Skip to content

2.4.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Jul 01:56

2.4.0 - July 1, 2026

RSS Dashboard 2.4 focuses on sync reliability at scale: Shard Storage v2 separates settings, user state, and article content to eliminate cross-device race conditions, joined by deeper auto-tagging (feed source, individual feed, and folder), richer podcast controls, and continued Community Plugin compliance remediation.


Headline Features

Shard Storage v2 — resolving sync race conditions

  • Added Shard Storage mode v2 to improve sync reliability across devices. This mode introduces a new user-state.json file alongside data.json, storing per-article state — read/unread, favorited, saved, tags, and play progress. Feed shard files now contain only article content and the GUID used to link back to user-state.json. data.json now stores only plugin settings.
  • This separation resolves race conditions that previously caused some sync tools (e.g. Remotely Save, WebDAV-based sync) to overwrite read/star/tag changes when a feed refresh on another device landed at the same time.
  • v2 is opt-in: existing users on Legacy or v1 storage can migrate via the new "Vault location (v2 — split user state)" option in the Storage settings tab. A confirmation prompt explains the change before migration runs. Future versions will likely force users to migrate from v1 to v2.
  • Updated docs/storage-vault-shards-guide.md to include v2 documentation and a comparison of all three storage modes.

Smarter auto-tagging: by feed source, individual feed, and folder

  • Added three ways to auto-tag articles, which can be combined: by feed source, by individual feed, and by folder, with folder tags cascading to descendant feeds.
  • Feed source: Settings > Tags > Auto Tagging now supports multi-tag auto-tagging based on feed source (for example, apply "RSS" to all RSS feeds, or "YouTube" to all YouTube feeds).
  • Individual feed: A new "Custom auto-tags" dropdown in the Add/Edit feed window layers feed-specific tags on top of any enabled feed-source tags.
  • Folder: Right-click any sidebar folder and choose Auto-tag feeds in folder... to assign tags that cascade to all feeds in that folder and its descendants, with support for targeting subfolders. Choose "Sync folder auto-tags" to add newly selected tags and remove deselected ones while leaving manual and other rule tags untouched, or "Remove all tags" to strip every tag in scope.
  • See docs/tags-primer.md for full precedence rules and examples.

Multi-select sidebar folders

  • Added ability to control+click and shift+click select multiple folders in the sidebar. This allows you to filter and view only the articles contained within those folders.

Podcast player upgrades

  • Added Settings > Media > Podcast player default play speed, applied automatically when an episode loads.
  • Added an "Autoplay" toggle in the playlist bar to automatically continue to the next episode, or keep playback limited to the current episode when disabled.

Sidebar feed fetch status

  • Added a red (!) icon next to the unread badge indicating a feed that failed to fetch. Hover, right-click "View fetch error," or long-press on mobile/tablet to see the failure reason.
  • Added a toggle in the Sidebar settings tab to enable/disable the feed fetch status icon.

Feed Management and Workflow Improvements

  • Added Obsidian URI support for one-click feed subscription via obsidian://rss-dashboard?action=add-feed&url=<encoded-feed-url>, including parameter validation and unsupported-action notices. GH FR #126
  • Added Settings > General > Saved article open location to control where saved articles open. GH FR #131
  • Added {{image}} to the Article Saving template, inserting the cover image URL when one exists. GH FR #128
  • Added , keybind to mark the current article read and advance to the next. GH FR #138
  • Added an "Auto" option to the Proxy dropdown in General Settings, cycling through all configured proxies instead of a single fixed choice. Enabled by default.
  • Added a configurable startup refresh delay (in seconds, default 5) to reduce processing load immediately after launch.
  • Added two new dedicated settings tabs, Storage and Sidebar, consolidating options previously spread across other tabs.

Stability and Quality of Life

Saving articles to vault

  • GH Issue #127 covered several distinct problems, now resolved:
    • Certain feeds with malformed XML could corrupt the saved article; added a cleaner helper to sanitize feed XML (e.g. beehiiv.com).
    • Substack's content:encoded XML schema wasn't handled properly by the parsing helper, causing articles and images to save incorrectly.
    • Resolved a format discrepancy between saving an article via the dashboard card versus the reader toolbar; both paths now resolve to the same saved note.

Cross-platform sync reliability

  • Added a bootstrap pointer that saves metadata config locally so the app knows where to look on restart.
  • Changed the default storage type for fresh installs from Legacy JSON to Shard Storage v2, while retaining Legacy JSON as an option for existing users.
  • Added a variable-length sync nonce (_syncNonce + _syncPad) to every saveData call, appending a random 1-2kb string so data.json's file size always changes on save — ensuring Obsidian Sync reliably detects and uploads settings changes even when the underlying data itself is unchanged.
  • Resolves GH Issue #142 and GH Issue #140.
  • Added step-by-step cross-platform sync instructions to README.md ## Syncing Across Devices.

Card rendering and display fixes

  • Fixed some feeds not properly rendering card previews (e.g. World History Encyclopedia).
  • Fixed laggy rendering on some feeds (NPR).
  • Fixed preview images not appearing on cards for feeds without a provided image URL.
  • Fixed cards showing a blank gray state instead of summary text due to pixel trackers being misinterpreted as images.
  • Fixed date misalignment inside the card toolbar.
  • Fixed some feeds (e.g. TED Talks) not properly showing summary text inside cards.

Mobile and interface fixes

  • Fixed RSS feed profile favicon size overflow on Android, where sidebar favicons (used by Mastodon feeds) rendered at massive sizes instead of the intended 16x16px; added explicit max-width, max-height, and touch-device CSS constraints.
  • Fixed mobile sidebar tags issue where tapping a checked row failed to uncheck it.
  • Fixed the inline viewer not rendering the reader toolbar.
  • Fixed some sidebar icons not rendering properly.
  • Fixed the "All Feeds" spinner not animating on mobile/tablet during a refresh-all.
  • Fixed some broken favicons causing unnecessary internal retry loops while attempting to resolve.

Commnuity Plugin Audit remediation

  • Addressed the remaining issues on the Obsidian Community Plugin Audit (https://community.obsidian.md/plugins/rss-dashboard)
  • Rewrote how media progress (YouTube iframe embeds) is stored to remove dynamic <script> element creation, which had been flagged as a red/critical audit risk; added a CI/CD ESLint rule to prevent regressions. This unforunately breaks the YouTube saved progress feature (see below)
  • Completely eliminated all Node.js/Electron fs and path usages from production plugin code.
  • Eliminated all superfluous !important declarations; documented remaining necessary declarations that pass audit.

Known issues

YouTube saved progress

  • Known Issue: YouTube watch progress is currently not being saved. This is due to YouTube API limitations in Obsidian's Electron environment (specifically, cross-origin postMessage blocks from the app:// protocol). Previously, this was handled by a dynamic <script> injection of the YouTube IFrame API, but that had to be removed during the 2.3.0 plugin audit as a potential security violation. We are continuing to monitor for upstream Electron or API workarounds. See YouTube progress not being saved.