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.jsonfile alongsidedata.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 touser-state.json.data.jsonnow 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 Taggingnow 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 playerdefault 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 locationto 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:encodedXML 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 everysaveDatacall, appending a random 1-2kb string sodata.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
fsandpathusages from production plugin code. - Eliminated all superfluous
!importantdeclarations; 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
postMessageblocks from theapp://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.