In Praise of Yarr
Build and (eventually) deploy / Check if website builds (pull_request) Successful in 39s Details
Build and (eventually) deploy / Deploy to Fly.io (pull_request) Has been skipped Details

Tudor Roman 2024-03-10 15:59:04 +01:00
parent 8d3ae2509f
commit b3e1e8505f
Signed by: tudor
SSH Key Fingerprint: SHA256:3CwS9plgXBecpXImPGxDIaSktUXBejbV/zerZMqzzBk
2 changed files with 281 additions and 0 deletions

View File

@ -0,0 +1,281 @@
---
title: "Zoomer Tries RSS: In Praise of Yarr"
excerpt: >-
Yarr is, according to its GitHub page, “yet another rss reader”.
But I think this description doesn't do it justice.
date: 2024-04-04 14:22:58+02:00
category: technical
tags:
- praise
- good-software
- self-hosted
- rss
---
[yarr]: https://github.com/nkanaev/yarr
[Yarr][yarr] is, according to its GitHub page, <q>yet another rss reader</q>.
But I think this description doesn't do it justice.
I started using a feed reader less than half a year ago, to easily keep track
of new content I enjoy on the internet without depending on social media.
Web feeds are, in 2024 terms, old technology: according to the [RSS Advisory Board][rss-board],
RSS, one of the main web feed formats available, has been published in 1999, and it's not
even the first web syndication format ever made.
I'm a [Gen Z-er][gen-z]: I was a toddler when RSS reached its 2.0 milestone,
and when Apple popularised RSS for podcasts [by adding support in iTunes][itunes-rss].
I was in middle school when Google Reader was shut down. When I started using the internet
by myself, it was already dominated by social media, which is still the dominant
source of information for many people around me, younger and older alike.
[rss-board]: https://www.rssboard.org/rss-history
[gen-z]: https://en.wikipedia.org/wiki/Generation_Z
[itunes-rss]: https://www.macworld.com/article/176125/podcastingfirstlook.html
Getting all my information from social media got really tiring; I was using Reddit mostly,
and a carefully curated set of information-oriented Instagram profiles
(so nice to read pictures of text!). I didn't really like wasting my time doom-scrolling
instead of doing other things that could generate some creative output &mdash; like
writing on this blog, maybe &mdash; or
doing some fun coding. Or maybe I could tidy up my kitchen, read a book and actually learn
some interesting, useful things laid out in a long-form structure. Heck, even getting bored
is pleasant, it makes your brain think!
I ditched Instagram altogether, and then I also uninstalled the Reddit client I was using on my phone.
I still read some subreddits from time to time, but now it requires me to manually type in
the subreddit I want to read, scroll a bit, and then become very frustrated with the new web UI &mdash;
which is totally not intentionally bad to make you download the mobile app.
Not only that, but I also change the URL to `old.reddit.com` when needed (even harder when doing it on my phone&hellip;).
And then I only read without ever logging in, which is why using Old Reddit is a requirement.
You can easily see that it's not the best reading experience for the web.
With this in mind, I remembered RSS and feeds are a thing, so I figured I should set up a reader.
I've never used one before, but the concept sounded promising: I can subscribe to blogs and news outlets, directly!
I had three requirements for choosing one:
* Simple, non-distracting UI.
* Has some kind of feature to extract relevant content from web pages &mdash; many feeds truncate the content.
* Doesn't require me to do any kind of syncing when using multiple devices to read (laptop and phone). A self-hosted web app should be fine.
## First try: Feeder
[Feeder][feeder] is a pretty Android app, it implements the newest [Material 3][material-3] design language, and it's generally very pleasant to use.
It definitely satisfies the first requirement. And it knows how to extract the content from a web page, very nice!
Unfortunately, it's only for your phone. If you want to change your reader app, it does support importing and exporting OPML files; that is pretty sweet,
but I don't want to be tied to my phone to read the news and the blogs I want to follow.
[feeder]: https://f-droid.org/packages/com.nononsenseapps.feeder/
[material-3]: https://m3.material.io/
## Second try: Miniflux
[Miniflux][miniflux] is what I've been using up until I discovered Yarr, actually. It's wonderful software: it's a web application, very easy to self-host, and it's [quite featureful][miniflux-features].
It has a very simple UI (some might say “arcane”), stays out of your way, no useless spacing, readable, accessible, it's just great.
Looks similar to [Lobsters][lobsters] and [sourcehut][sourcehut], I really like this style. It even has the required manifests to make it a Progressive Web App,
making it look like an app on your phone. It's just an all-around pleasant experience to use Miniflux.
[miniflux]: https://miniflux.app/
[miniflux-features]: https://miniflux.app/features.html
[lobsters]: https://lobste.rs/
[sourcehut]: https://sourcehut.org/
Being written in Go, it's very easy to self-host: the program is just a single statically-linked executable. I run [NixOS][nixos] on my server, and I was very delighted to see
that [there is a module for Miniflux in Nixpkgs][nixpkgs-miniflux]. Very easy to set it up and integrate it in my setup.
[nixos]: https://nixos.org/
[nixpkgs-miniflux]: https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/services/web-apps/miniflux.nix
I have one big gripe with Miniflux, though: it only supports PostgreSQL, though [very understandably so][miniflux-postgres].
It's much easier to support a single configuration, a very respectable one in this case.
Miniflux also has a commercial offering, so it shouldn't come as a surprise that it's in its best interest to have a well-tested and reliable storage layer.
[miniflux-postgres]: https://miniflux.app/opinionated.html#postgresql
It's just that I prefer having as many services as possible use SQLite when it comes to my self-hosted services. One of the main downsides
of self-hosting is that you have to take care of your own services &mdash; who would've thought! I really, really don't want to take care of a PostgreSQL
cluster, even if it's a single-node one. You might argue that it's just one node, what's to be taken care of? Identity maps, backups, authentication&hellip;
I can just use SQLite, have all my data in one file (per service), you cannot access it remotely, so that's covered,
backups are a one-line command (`sqlite3 db.sqlite ".backup db.sqlite.bak"`), and the only authentication and authorisation is in the file system permissions.
I don't even have to think about *what needs to be taken care of*, there isn't really anything I need to worry about!
Of course, serious usage should make me worried about the throughput, write blocking, cache sizes, journal modes and so on. But at my scale, that's not really an issue.
It reduces the cognitive complexity, let's put it this way.
The less I need to think about things when self-hosting<br/>
&rarr; The easier it is to self-host<br/>
&rarr; The more satisfied I am<br/>
&rarr; The more I am encouraged to keep on doing it!
It's the same as: the cleaner and well-stocked my kitchen is, the more I am encouraged to cook and eat healthy.
The sharper my knives, the more I enjoy cutting onions.
Hence, sorry PostgreSQL, but I don't want you here. If this is not a problem for you, then I strongly encourage you to give Miniflux a try.
Which brings me to&hellip;
## Third try: Yarr
<comp.Picture path="yarr"
desc="A screenshot of my Yarr instance, showing some websites I follow and some posts from samwho.dev" />
[Yarr][yarr] is, in some regards, even more minimalistic than Miniflux.
It doesn't provide fancy integrations, it doesn't support multiple users (it does support authentication, though).
It doesn't do much, really.
But what it does, it does well. And it has a couple of niceties, such as the possibility to change
the auto-refresh interval &mdash; or disable it altogether &mdash;
or to switch between the predefined colour palettes.
There are also some keyboard shortcuts, and the ability to save (star ⭐️) articles for later.
It has a small search box, too.
What I find to be the best feature, though, is the UI: it's simple, yet it looks good.
And on a large enough screen, it has this three-column layout, with the feeds, articles, and
article view columns, really nice for reading the news. Yet, if your screen &mdash; or browser window &mdash; is smaller, it
will switch to a one-column layout. I find it clean and practical, and I like its choice of
icons. It also has a couple dynamic elements, just enough to enhance it and not to be defined by it.
For example, when you manually refresh the feeds, it shows the progress in the bottom-left corner,
together with a little animated spinner. And when you add a new feed, in the event that it finds multiple
feeds for the same websites, it will present the choices in the same “Add feed” modal.
It's completely a single-page application, unlike Miniflux, which is the opposite: Miniflux
is a completely server-side application. And I'm usually against that, but in the case of Yarr,
there isn't any “routing”, there aren't different screens, it's just one large feed-reading window,
and the dynamic elements only enhance the interaction.
I have even more appreciation for the developer for publishing [this text file][yarr-rationale]
in the repo with the rationale behind Yarr and the sources of inspiration for the user interface.
It would be great if more people did this, to get a small glimpse of what they were thinking
of when they started a project. The message of the commit that added this file is <q>let's be honest</q>, nice touch.
[yarr-rationale]: https://github.com/nkanaev/yarr/blob/master/doc/rationale.txt
Yarr is a bit stuck in time: the author claims that the software is complete,
that it fulfils all their expectations, and that no pull requests with new features will be merged.
I think this is good for a feed reader: it does what it says on the tin, without burdening
anyone with maintaining the program, and without burdening users with upgrades, config changes and the like.
There isn't much to be done, it just works; I applaud the lack of feature creep.
Contrast this to Miniflux, which is an actively maintained and updated project, with many features (not a bad thing!).
Yarr can also be used as a desktop application: it supports being launched from the system tray, of all things.
This is a feature that I will never use, yet the author wanted to use their program this way,
so they implemented it. For self-hosting, it supports only a single user account (or no account),
protected with a username and password.
And when it comes to storage, everything is stored in a single SQLite database.
There are no other data folders kept around, just that sole database file containing all the state. (This might be a con if you care about cross-compiling the binary, or if anything else breaks because of cgo. Use of cgo is required,
because SQLite is written in C, and is embedded in programs directly by linking to its shared library. Read: [cgo is not Go](https://dave.cheney.net/2016/01/18/cgo-is-not-go).)
I love it so much, it's one of my favourite programs I used on a daily basis.
Open-source, useful, easy to self-host, easy to use, works with a mouse, works with a keyboard, works with a touchscreen. I don't have to think about it.
And whenever I'm thinking of it, it's always out of gratefulness. This is the most I can wish
from software, in my opinion.
It's not as well-known, if judging by the number of stars on GitHub, which might be part of the reason for why there isn't already a ready-made module for NixOS.
Luckily, I made my own, [which is available on Codeberg][yarr-nix].
[yarr-nix]: https://codeberg.org/tudor/yarr-nix
All in all, I think switching to feed readers has brought a net improvement in my quality of life, when it
comes to consuming information. If Yarr sounds compelling to you, I suggest you give it a try.
You don't have to self-host it, you can just grab a binary release from GitHub and run it locally.
## Appendix: The Feeds I Follow
### Link Aggregators
[Hacker News Daily][hn-daily]: This is an feed containing the ten highest-rating articles on Hacker News which have not appeared on previous daily digests. I read HN from time to time, but the volume of submissions it receives is too high for me,
I prefer visiting the website directly.
My favourite link aggregator is [Lobsters][lobsters], yet I don't have it in my feed reader, because I prefer just browsing
the website directly.
[hn-daily]: http://www.daemonology.net/hn-daily/
### Blogs
Various blogs I enjoy reading. At the time of writing this article, in no particular order:
* **Artemis Everfree**: https://artemis.sh
* **Bartosz Chiechanowski**: https://ciechanow.ski
* **Drew DeVault**: https://drewdevault.com
* **ENOSUCHBLOG**: https://blog.yossarian.net
* **fasterthanli.me**: https://fasterthanli.me
* **j3s.sh**: https://j3s.sh
* **Julia Evans**: https://jvns.ca
* **Michael Stapelberg**: https://micahel.stapelberg.ch
* **Mozilla Hacks**: https://hacks.mozilla.org
* **Neil Panchal**: https://neil.computer
* **samwho.dev**: https://samwho.dev
* **The Copetti site**: https://www.copetti.org
* **tonsky.me**: https://tonsky.me
* **Winny's Blog**: https://blog.winny.tech
* **Xesite**: https://xeiaso.net
### Comics
I only follow [xkcd](https://xkcd.com). I haven't found other comics I would enjoy reading, yet.
### The News
I use my feed reader to read both Dutch news &mdash; I live here, and it's very good language immersion &mdash;
and Romanian news, to keep an eye on what's going on there.
Dutch:
* [AT5 Achtergrond][at5-achtergrond]: AT5 is a local news outlet. I'm glad that they offer separate RSS feeds for each category on their website, so that I can only follow the investigations.
* [NOS][nos] Algemeen: General news from the public broadcasting system. The [online Teletext][nos-teletekst] is the best, in my opinion, for getting a quick look at the news.
* [NOS op 3][nos-op3]: Mostly targeted at younger people, the NOS also makes nice explainer videos for various events happening in and out the country. They also make explainer apps, [such as this one about the electricity network][nos-stroomnet].
[at5-achtergrond]: https://www.at5.nl/achtergrond
[nos]: https://nos.nl
[nos-op3]: https://nos.nl/op3
[nos-teletekst]: https://nos.nl/teletekst
[nos-stroomnet]: https://app.nos.nl/op3/stroomnet/
As you can see, I mostly read news from the public service.
For investigative journalism and more detailed stories,
I prefer purchasing magazines and newspapers. It's always nice to read from paper!
Romanian:
* [PressOne][pressone]: Investigative journalism
* [Rise Project][rise] (link in English): Investigative journalism, focused on organised crime and corruption.
I had to be careful when adding this one into Yarr, because the meta tags on the website's front page lead to the feed for their blog. To get the investigations feed, I fed Yarr with the web page containing all articles categorised with "investigation".
* [Recorder][recorder-english] (link in English): Investigative journalism, again&hellip; They have really nice videos on their website and YouTube channel.
* [Buletin de București][buletin]: The Bucharest Bulletin. Local publication, I like seeing what's going on there.
The website has a funny address.
[rise]: https://riseproject.ro/en/
[pressone]: https://pressone.ro/
[recorder-english]: https://recorder.ro/english/
[buletin]: https://buletin.de/bucuresti/
### YouTube Channels
YouTube offers feeds for all their channels, which I use to subscribe to them without doing it from YouTube itself.
You should be able to just paste a YouTube channel in any reader, and it should just pick it up.
### Online Magazines
Currently, I only follow [Ars Technica][ars] and [Teletext][tltxt] (not to be confused with the NOS Teletext).
Teletext is, according to their website, <q>the newest platform dedicated to pop culture in Romania</q>.
I'm more of a technical person, I don't have all the cultural knowledge Teletext's authors do,
yet I really love reading their articles, precisely because it's all new and different to me.
[ars]: https://arstechnica.com
[tltxt]: https://tltxt.ro
### Others
As I have highlighted above, podcasts are actually based on RSS, so nothing stops you from putting them in your feed reader.
I personally use dedicated apps for podcasts like [GNOME Podcasts][gnome-podcasts] on my computer, and [AntennaPod][antennapod] on Android.
[gnome-podcasts]: https://apps.gnome.org/Podcasts/
[antennapod]: https://antennapod.org/
I also have a recipe website in there which I really like, [RecipeTin Eats][recipetin].
Of course the best way to cook is to train your intuition and just make something you'd fancy with the ingredients you have,
but it's always good to get some inspiration from time to time, which is the reason why I have it in my feed reader.
[recipetin]: https://recipetineats.com

Binary file not shown.