3 ms·
Show HN: WyrmRSS – a self-hosted RSS reader with inline YouTube
I'm a software engineer and have been working on this for a couple of months, for fun, and thought I'd share it. If you try it, let me know, I'd be stoked!
I was inspired by a friend who wanted to escape the algorithms and had built a small, private reader for himself. He wasn't sure he'd ever release it, so I built my own.
It's yet another self-hosted RSS reader, I know. I've been trying to build things like inline YouTube (with filters to drop Shorts and live streams) and webhooks into the core, rather than as add-ons the way some other readers handle them. I mostly built it to learn and to have a version that works the way I like. It's not complete yet and it's missing some features I deem important (listed on the README). So it's a WIP.
AI disclosure: the backend is mostly hand-written — I used an LLM for boilerplate, tests, and some refactoring, and leaned on it more for the frontend since that's not my strong area. I have, however, reviewed and understand every line I've merged.
- itsmaz 3mo ago[flagged]
- mariustoicescu 3mo agoNice work. The YouTube inline support with Shorts filtering is the detail that stands out to me — subscriptions-as-RSS is one of the last ways to follow creators chronologically, without the recommendation layer deciding for you. I come from the media/creator side and it's interesting how "just show me what I subscribed to, in order" went from default behavior to a feature you have to self-host. Curious: do you pull YouTube via the classic channel RSS feeds, or the API? The RSS feeds don't distinguish Shorts from regular uploads, so I'm wondering how you filter them.
- kryoseu 3mo agoHey,thanks for the comment and sorry for the delay. I pull YouTube by what it advertises on the channel URL, something like: https://www.youtube.com/feeds/videos.xml?channel_id=<channel_id>. But all the user has to do is enter the channel URL: https://www.youtube.com/channel/@<channel>. The user can then create filters like: - url:/shorts - url:/live - title:something - content:something Only items from the feed that don't match any of the filters are actually imported.