Show HN: WyrmRSS – a self-hosted RSS reader with inline YouTube (github.com)

1 points by kryoseu ↗ HN
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.

3 comments

[ 1.9 ms ] story [ 15.5 ms ] thread
Nice 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.
Hey,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.