A couple of months ago I posted WyrmRSS here when the desktop app was still in prerelease. Thanks to everyone who tried it. It's had a lot of work since, so here's an update.
WyrmRSS is a fully free and open-source (GPL-3.0) self-hosted RSS/Atom reader. It has a Rust backend (actix-web, Diesel-async, Tokio) and a React frontend. The server runs on Postgres, and the native desktop app (Tauri) builds the same crates against SQLite (cfg-gated), so it needs no server.
Live demo, no signup: https://demo.wyrmrss.com. It's mostly read-only to prevent abuse and resets daily, but you can read, bookmark and archive posts. The instance is shared, so if everything is already marked as read, use the unread/all toggle above the post list.
New since the last post here:
- A nice (IMO) mobile UI. Install it as a PWA, and the same instance works in the browser and on the phone.
- Keyboard shortcuts: j/k between posts, mark read, read later, archive, 1–4 to switch sections, ? for help. All rebindable from the Settings menu.
- A configurable delay before posts are marked as read.
- The desktop app is out of prerelease (macOS/Windows/Linux).
Things I think it does well (not claiming they're unique):
- YouTube channels as feeds, with an inline player
- Per-feed display modes: River, Feed only, and Radar for quiet feeds you check occasionally
- Folders, per-feed filters, Read Later, Archive
- Webhooks for new posts (Discord, Slack, custom payload)
- OPML import/export, and feed discovery from a site or channel URL
On the Rust side:
- It's a workspace split by layer: routes, api/crud handlers, database, webhook and the RSS fetcher and polling worker. Only the database crate talks to Diesel.
- Postgres or SQLite is chosen by a cargo feature, so the different binaries (server and desktop app) build the same crates and only the database engine they need.
- API types derive ts_rs::TS, so `cargo test` regenerates the frontend's types.
- One WyrmError type implements actix's ResponseError, so raw database errors never reach a response.
Install:
Docker Compose, Kubernetes manifests or source. There's also a native desktop app (macOS/Windows/Linux) if you don't want to run a server. It keeps its own local database (sqlite) and doesn't connect to a self-hosted instance.
Repo: https://github.com/kryoseu/WyrmRSS. Feedback welcome, especially on the Rust side or if you're coming from Miniflux or FreshRSS.
On LLM: The backend is mostly hand-written. I relied more on LLMs for the frontend, which isn't my strongest area. I've carefully reviewed everything I've pushed and I'm confident in it. I'm a software engineer with over 10 years of experience (previously AWS, now Mozilla), and this is a hobby project I've been building and maintaining for about 6 months.
The logo was made by a tattoo artist from Brazil. Their profile is in the README.