Menu ▾ ▴

Tree [r127] / trunk /
 History

HTTPS access


File Date Author Commit
 backend 2026-09-13 twm [r126] Correct documentation that no longer matches th...
 CLAUDE.md 2026-09-13 twm [r126] Correct documentation that no longer matches th...
 README.md 2026-09-13 twm [r126] Correct documentation that no longer matches th...
 feeds.json 2025-12-26 twm [r66] removed the subscription only file name from th...
 rssshow.html 2026-09-13 twm [r127] Show a feed's countdown right away when its ref...

Read Me

RSS Show

A single-file, client-side RSS feed reader that runs entirely in your browser. No server required, no dependencies, no build process.

Features

Core Functionality

  • Pure Client-Side: Single HTML file with no external dependencies
  • Multi-Feed Display: View multiple RSS/Atom feeds in a customizable grid layout
  • Offline Capable: Works from local filesystem or any web server
  • Import/Export: Share feed lists via JSON files or dpaste.com with QR codes

Feed Management

  • Auto-Refresh: Configurable per-feed automatic updates (default: 5 minutes)
  • Custom Titles: Override feed titles with your own names
  • Feed Filters: Hide unwanted entries with regex-like patterns
  • Read Tracking: Mark entries as read, show only unread items
  • Drag & Drop: Reorder feeds via drag and drop (desktop) or menu (mobile)

Content Control

  • Content Sanitization: Feed descriptions are reduced to plain formatting - scripts, styles,
    video, audio, embedded content and event handlers are removed before anything is displayed
  • Tracking Pixel Removal: Detects and removes tiny and hidden images
  • Image Control: Toggle image display on/off (disabled by default)
  • Smart Title Cleanup: Removes duplicate titles from feed descriptions

Customization

  • Grid Layout: 1-8 columns, automatically adjusts to screen width
  • Per-Feed Settings: Individual refresh intervals and auto-update toggles
  • CORS Proxy: Configurable proxy with optional authentication
  • Update Delay: Stagger feed refreshes to avoid overwhelming proxy servers

Quick Start

Basic Usage

  1. Open the file: Simply open rssshow.html in any modern web browser
  2. Add a feed: Click the "Add Feed" button and enter an RSS/Atom feed URL
  3. Done: Your feeds will load automatically

Example Feeds

The repository includes a feeds.json file with example feeds:

https://delta.chat/feed.xml
https://www.heise.de/rss/heise.rdf
http://rss.slashdot.org/Slashdot/slashdot
https://rss.golem.de/

You can import this file via: Hamburger menu → Import Feeds → Select feeds.json

URL Parameters

Debug Mode

Enable detailed console logging:

rssshow.html?debug=true

Custom Proxy

Override the CORS proxy:

rssshow.html?proxy=http://localhost:3000/proxy.php?url=

Auto-Import Feed List

Automatically import feeds from dpaste.com:

rssshow.html?dpaste=ABC123

Combine multiple parameters:

rssshow.html?debug=true&dpaste=ABC123

Feed Sharing

Share Feed List

  1. Click hamburger menu → Export Feeds → Share via dpaste.com
  2. Your feed list is uploaded to dpaste.com (expires in 1 day)
  3. Get a QR code and URL with ?dpaste=<id> parameter
  4. Recipients can scan the QR code or click the link for one-click import

Manual Export/Import

  • Export: Hamburger menu → Export Feeds → Download JSON file
  • Import: Hamburger menu → Import Feeds → Select JSON file

Export format includes feeds and filters:

{
  "feeds": [
    "https://example.com/feed.rss",
    "https://another.com/atom.xml"
  ],
  "filters": {
    "https://example.com/feed.rss": ["Sponsored", "Advertisement"]
  }
}

Feed Filters

Hide unwanted entries using filter expressions in the Edit Feed dialog.

Filter Syntax

  • One filter per line
  • Case-sensitive matching from start of title
  • Wildcards:
  • .* - Match any characters (zero or more)
  • .+ - Match one or more characters
  • .? - Match zero or one character
  • . - Match exactly one character
  • \. - Literal dot (escape with backslash)
  • Everything else is literal, including [, (, * and \ - no other escaping is needed
  • Implicit .* at end of each filter

Examples

Sponsored.*          # Hides titles starting with "Sponsored"
Ad:.*                # Hides titles starting with "Ad:"
[Promo]              # Hides titles starting with "[Promo]"
v1\.0                 # Hides titles starting with "v1.0" (but not "v1x0")
.*cryptocurrency.*   # Hides titles containing "cryptocurrency" anywhere

Using Filters

  1. Click hamburger menu on feed → Edit
  2. Enter filter expressions (one per line)
  3. Click Save
  4. Filtered entries show as "ignored: n" in feed status bar
  5. Click ignored count to temporarily show filtered items

Settings

Global Settings

Access via hamburger menu → Settings:

  • Enable auto-refresh: Global toggle for all feeds
  • Show images: Display images in feed descriptions (default: off)
  • Show feed status bar: Display countdown timers and ignored counts
  • Grid columns: Number of columns (1-8, default: 4)

Per-Feed Settings

Access via feed hamburger menu → Edit:

  • Custom title: Override the feed's title
  • Enable auto-refresh: Toggle auto-refresh for this feed
  • Refresh interval: Minutes between updates (default: 5)
  • Filters: Hide unwanted entries (edit mode only)

Proxy Configuration

Access via hamburger menu → Proxy:

  • Custom proxy URL: Override default CORS proxy
  • Username/Password: Optional proxy authentication
  • Delay between updates: Seconds between feed refreshes (default: 1)

Default proxy: https://api.allorigins.win/raw?url=

Keyboard & Interaction

Feed Controls

  • ↻ - Refresh feed manually
  • ✓ - Mark all entries as read
  • ☰ - Open feed menu (Move Up/Down, Edit, Remove)

Entry Interaction

  • Click title - Open link in new tab and mark as read
  • Middle-click title - Open link and mark as read
  • Click unread count - Temporarily show only unread entries
  • Click ignored count - Temporarily show filtered entries

Drag & Drop (Desktop)

Drag feed boxes to reorder them. On mobile, use the feed menu (☰ → Move Up/Down).

Browser Compatibility

Works in all modern browsers that support:

  • ES6 JavaScript
  • Fetch API
  • LocalStorage
  • DOM Parser

Tested on:

  • Chrome/Edge (recommended)
  • Firefox
  • Safari

File Structure

This is a single-file application:

  • rssshow.html - Complete application (HTML + CSS + JavaScript)
  • No build process required
  • No external dependencies
  • No server-side code needed

Optional files:

  • feeds.json - Sample feed list to import via Import Feeds (not loaded automatically)
  • proxy.php - Example CORS proxy (if self-hosting)

CORS Proxy

RSS feeds require a CORS proxy to bypass browser cross-origin restrictions.

Default Proxy

Uses https://api.allorigins.win/raw?url= - a free third-party service.
Please note that this is not the most reliable choice.

Alternative: https://proxy.corsfix.com/?url= kindly provided by Corsfix (https://corsfix.com) for use by rssshow.dummzeuch.de.

Self-Hosted Proxy

For better privacy/reliability, host your own:

  1. Copy proxy-config.example.php to proxy-config.php
  2. Set credentials in proxy-config.php
  3. Configure proxy URL in Settings → Proxy
  4. Enter username/password if using authentication

Example URL: http://localhost/proxy.php?url=

Privacy

  • No tracking: Zero analytics, no cookies, no external scripts
  • Local storage only: All data stored in browser localStorage
  • No accounts: No sign-up, no login required
  • CORS proxy: Every feed is fetched through the configured proxy, so its operator can see which
    feeds you read and when. The default is the third-party service api.allorigins.win; host your
    own proxy (see below) to avoid that
  • Feed sharing: dpaste.com uploads are public but unlisted (expire in 1 day). The QR code in the
    share dialog is generated by api.qrserver.com, which receives the share link

Technical Details

Storage

All data stored in browser localStorage:

  • savedFeeds - Array of feed URLs
  • feedSettings - Per-feed configuration (title, intervals, auto-refresh)
  • feedFilters - Filter expressions per feed
  • readEntries - Read entries per feed
  • autoUpdateEnabled - Global auto-refresh setting
  • showImagesEnabled - Image display preference
  • gridColumns - Grid layout preference
  • showFeedCountdowns - Feed status bar preference
  • fixedTopBar - Whether the top bar stays at the top
  • dpasteWarningDontShow - dpaste privacy warning dismissed
  • customProxy - Custom CORS proxy URL
  • proxyUsername / proxyPassword - Proxy authentication
  • feedUpdateDelay - Delay between feed updates

Feed Formats

Supports both RSS and Atom:

  • RSS: <item>, <title>, <link>, <description>, <pubDate>
  • Atom: <entry>, <title>, <link href="">, <content>/<summary>, <published>/<updated>

Content Sanitization

Feed descriptions are treated as untrusted HTML. They are parsed into an inert document (nothing in
it is loaded or executed) and reduced to an allowlist before being shown:

  • Kept: text formatting (<p>, <br>, <b>, <i>, <em>, <strong>, headings, lists,
    tables, <blockquote>, <pre>, <code>, <span>, <div>, ...), links (<a href> with an
    http(s) URL) and images (<img src> with an http(s) URL, plus alt, width, height)
  • Removed with their content: <script>, <style>, <video>, <audio>, <iframe>,
    <embed>, <object>, <source>, <track>, <svg>, <math>, form controls and similar
  • Unwrapped (element dropped, text kept): every other element
  • Attributes: everything except the ones listed above is dropped - in particular style,
    class, id and all on* event handlers. javascript: and data: URLs never become links
  • Images: removed entirely while "Show images" is disabled (the default). When enabled,
    tracking pixels (width or height of 2px or less, display: none, visibility: hidden) are
    still removed

Development

Built with:

  • Vanilla JavaScript (ES6)
  • No frameworks or libraries
  • Single HTML file architecture
  • LocalStorage for persistence

See CLAUDE.md for development guidelines and architecture details.

License

Created by Thomas Mueller using vibe coding with Claude and Mistral.

Support

For issues or questions:

  • Check the built-in Help (hamburger menu → Help)
  • Review CLAUDE.md for technical details
  • File issues on the project repository

Version Control

This project uses SVN (Subversion). The .svn directory contains version control metadata.