Show HN: I built a tiny-VPS friendly RSS aggregator and reader (github.com)
As an RSS user, I tried Inoreader and Feedly, then ended up self-hosting a Miniflux instance on my homelab. A few months ago, I moved to another city and had to shut down my homelab for a long time, so I couldn't access my local miniflux. It was quite inconvenient. I decided to self-host my RSS aggregator on a tiny VPS or PaaS such as fly.io. However, Miniflux requires a PostgreSQL database, which may isn't suitable for a tiny VPS instance.
So I built fusion with Golang and SQLite. It contains basic features such as Group, Bookmark, Search, Automatically feeds sniffing, Import/Export OPML file, etc. It uses about 80MB of Mem and negligible CPU usage (metrics here: https://imgur.com/a/EJIdevn).
Feel free to share your questions and suggestions.
BTW, I also built an online tool to sniff RSS links from a URL. (https://rss-finder.rook1e.com/)
48 comments
[ 3.7 ms ] story [ 115 ms ] threadNot something so complex that it requires docker. Not something that requires you to install a separate database. Not something that depends on redis and other external services.
I’ve turned down many self-hosted options due to the complexity of the setup and maintenance.
And the documentation literally specifies it requires docker.
How did this become "minimal dependencies"?
Still, seems like a great project. I added it to my list of things to check out whenever I have a free weekend... if I ever get there.
In Android, libraries are much stabler. Deprecated functions are picked by the IDE and an alternative is often presented in the comments. I'd much prefer to have big libraries (as we have tree-shaking) especially when dealing with frameworks instead of the bazillion packages when trying to do anything with npm.
That's what the whole version control thing that I mentioned is good for. Check out a two-year old copy that resolves to a faithful reproduction of whatever it was you were able to use successfully when you first checked it in.
"Deploy with a single binary"
> Node 21 with NPM > Sveltekit, shadcn-svelte
The front-end things are used during the build process. You don't need them when deploy.
> And the documentation literally specifies it requires docker.
Fusion can be deployed as a *single binary*. Docker is just the recommended way. Maybe we need to make documentation clearer.
I write all my personal projects using Go and one of the things I most like is that it compiles to a binary without external dependencies.
The SQLite driver uses cgo, so we use both Ubuntu and Windows Server in CI to avoid cross-compiling. However, we still can't confirm that it's 100% ok on Windows. If any weird bugs occur on Windows, we don't have much experience or energy to deal with them.
The Docker image is based on Debian, we are more familary with it.
For what it's worth, this is from the build log:
There is nothing we can do about it at the moment. Maybe in the future we will change the tech stack to reduce the complexity of the front-end.
And what's good about a single binary if you're going to recommend Docker?
Compared to all that, the current PHP app I use for RSS looks lighter. Especially since my VPS already runs PHP and PostgreSQL.
Hold on, I'm back to my earlier comment.
I do something a bit similar for my own project - it's a single binary REST server, but I still package it up with dpkg-deb and deploy that to a private apt repo so I can update it easily on the servers with "apt-get update && apt-get install blah" and that fits nicely with my existing processes and I can just add the repo and dependency to my cloud-init setup. If I used docker, I'm sure I'd find his docker image the easiest path to getting it installed and updated.
The other thing that blows my mind is how many of these self-hosted applications require mysql/postgres instead of just using sqlite.
You can create an issue about it on GitHub so we can evaluate how much it is needed.
You can create an issue about it on GitHub so we can evaluate how much it is needed.
All three of them allow you embed the UI assets (media, JS, CSS) into the binary and all three work great with key/value stores (badger, leveldb, rocksdb, etc..) or SQLite.
There is no install. No setup. No packages to download first. Just a simple binary that respects OS signals, has crazy good throughput, and uses so little memory that your router can run it.
Please, consider moving your JVM/Node.js/Electron project to one of these as a chance to jump into really performant software.
(There are also a lot of RSS servers written in Rust/Go/C on Github: https://github.com/search?q=rss+host+language%3AGo+language%...)
Sure, the binaries are bigger, and they cannot run on routers, but you can easily run many of them simultaneously on RaspberryPi, which is usually the bare minimum HW people use to self-host.
Performance wise, difference should be negligible for most use cases, and allows people to write software in the language that's most suited for them and the project.
I think you mean unnoticeable (or similar); the difference in performance (memory usage and CPU cycles) is certainly not negligible.
https://rachelbythebay.com/w/2024/05/27/feed/
https://rachelbythebay.com/w/2024/05/29/score/
https://rachelbythebay.com/w/2024/05/30/fs/
Don't be "that guy" who releases software that once deployed widely creates "thundering herds" that knock unsuspecting websites down <glares at Mastodon>
Am I missing the "mark all as read" button? That would be helpful vs going through 13 years of old posts and marking read page by page (albeit quickly at 500 at a time).
But large page size can cause page performance problems.