RSS Part 19: Current Thoughts
This blog entry expresses my current thoughts on RSS clients, now that I am looking for a new one (again).
QuiteRSS
QuiteRSS has been working well for me, so I am pretty disappointed to learn that it is dead. While writing this blog entry, I discovered that even the website is down, so I updated my links to point to the repository instead.
I am currently using Arch Linux for my daily driver, and somebody patched (deprecated) Qt Webkit to work with the new release of ICU. I needed to remove QuiteRSS and Qt Webkit and then reinstall them after upgrading the system, but QuiteRSS is working for me again. It is of course still available on many distributions. To continue the anthropomorphization, it is like an animated corpse that is still getting work done despite being dead for years and having hundreds of security vulnerabilities.
It might be worthwhile for somebody to create an AppImage for the final version (0.19.4) so that users have a way to continue using it (while searching for a replacement) if/when their distribution no longer runs it. It has many dependencies that might make this difficult, but one for an older version shows that it is possible.
Dependency tree on my system (large)
quiterssgst-plugins-goodgst-plugins-base-libs=1.24.3gstreamer=1.24.3glib2bashreadlineglibclinux-api-headers>=4.10tzdatafilesystemiana-etc
ncursesglibcgcc-libsglibc>=2.27
ncursesprovideslibncursesw.so=6-64
readlineprovideslibreadline.so=8-64glibcncurses
glibclibffiglibc
libsysprof-capturepcre2bzip2glibcbashprovidessh
glibcreadlinezlibglibc
util-linux-libsglibcsqlitereadlinezlibglibc
zliblibffiprovideslibffi.so=8-64util-linux-libsprovideslibmount.so=1-64
libcapgcc-libsglibcpamglibclibtirpckrb5glibce2fsprogsbashprovidesshutil-linux-libs
libldaplibsaslgdbmglibcbashprovidesshreadlinereadlineprovideslibreadline.so=8-64
gdbmprovideslibgdbm.so=6-64glibcopensslglibc
keyutilsglibcbashprovidessh
libvertoprovideslibverto-module-baseglibclibeventopenssl
keyutilsprovideslibkeyutils.so=1-64e2fsprogsprovideslibss.so=2-64e2fsprogsprovideslibcom_err.so=2-64libvertoprovideslibverto.so=1-64
glibc
pambaseauditglibckrb5krb5provideslibkrb5.so=3-64krb5provideslibgssapi_krb5.so=2-64libcap-ngglibc
libcap-ngprovideslibcap-ng.so=0-64
auditprovideslibaudit.so=1-64libxcryptglibc
libxcryptprovideslibcrypt.so=2-64libnslglibclibtirpc
libelfbzip2bzip2provideslibbz2.so=1.0-64curlca-certificatesca-certificates-mozillaca-certificates-utils>=20181109-3bashcoreutilsglibcaclglibc
attrglibc
gmpgcc-libsglibc
libcapopenssl
findutilsglibcbashprovidessh
p11-kit>=0.24.0libp11-kit=0.25.3-1glibclibffilibtasn1glibc
coreutilslibp11-kitprovideslibp11-kit.so=0-64systemd-libsprovideslibsystemd.so=0-64glibcgcc-libslibcaplibgcryptlibgpg-errorglibcbashprovidessh
lz4glibc
xzbashprovidessh
zstdglibcgcc-libszlibxzlz4
brotliglibc
brotliprovideslibbrotlidec.so=1-64krb5krb5provideslibgssapi_krb5.so=2-64libidn2libunistringglibc
libunistringprovideslibunistring.so=5-64
libidn2provideslibidn2.so=0-64libnghttp2glibc
libnghttp2provideslibnghttp2.so=14-64libnghttp3glibc
libnghttp3provideslibnghttp3.so=9-64libpsllibidn2libunistringlibidn2provideslibidn2.so=0-64libunistringprovideslibunistring.so=5-64
libpslprovideslibpsl.so=5-64libssh2opensslzlib
libssh2provideslibssh2.so=1-64zlibzlibprovideslibz.so=1-64zstdzstdprovideslibzstd.so=1-64opensslopensslprovideslibcrypto.so=3-64opensslprovideslibssl.so=3-64
curlprovideslibcurl.so=4-64gcc-libsglibcxzxzprovidesliblzma.so=5-64zlibzstdzstdprovideslibzstd.so=1-64
libunwindglibcxzzlib
libxml2glibcicugcc-libsglibcbashprovidessh
ncursesreadlinexzzlib
iso-codeslibdrmlibpciaccessglibczlib
glibc
libglvndprovideslibgllibxextlibx11libxcbxcb-protolibxdmcpglibcxorgproto
libxauglibcxorgproto
glibc
glibcxorgproto
glibcxorgproto
mesaexpatglibc
gcc-libsglibclibdrmlibelflibglvndlibx11libxcblibxextlibxfixeslibx11
libxshmfenceglibc
libxxf86vmlibxext
llvm-libsgcc-libszlibzstdlibffilibeditglibcncursesncursesprovideslibncursesw.so=6-64
ncurseslibxml2
lm_sensorswaylandglibclibffiexpatlibxml2default-cursors
zlibzstdlibomxil-bellagioglibc
mesaprovidesopengl-driver
libgudevglib2systemdsystemd-libs=255.7aclaclprovideslibacl.so=1-64bashcryptsetupdevice-mapperglibcsystemd-libssystemd-libsprovideslibudev.so=1-64
device-mapperprovideslibdevmapper.so=1.02-64opensslpoptglibc
util-linux-libsutil-linux-libsprovideslibuuid.so=1-64json-cglibc
json-cprovideslibjson-c.so=5-64argon2glibc
argon2provideslibargon2.so
cryptsetupprovideslibcryptsetup.so=12-64dbusauditlibcap-ngexpatsystemd-libsauditprovideslibaudit.so=1-64libcap-ngprovideslibcap-ng.so=0-64expatprovideslibexpat.so=1-64systemd-libsprovideslibsystemd.so=0-64
dbus-broker-unitsprovidesdbus-unitsdbusdbus-brokerauditlibcap-ngexpatsystemd-libsauditprovideslibaudit.so=1-64libcap-ngprovideslibcap-ng.so=0-64expatprovideslibexpat.so=1-64systemd-libsprovideslibsystemd.so=0-64
kbdglibcpam
kmodglibczlibopensslxzzstd
kmodprovideslibkmod.so=2-64hwdatalibcaplibcapprovideslibcap.so=2-64libgcryptlibxcryptlibxcryptprovideslibcrypt.so=2-64libidn2lz4pamlibelflibseccompglibc
libseccompprovideslibseccomp.so=2-64util-linuxutil-linux-libs=2.40.1coreutilsfileglibczlibxzbzip2libseccomplibseccompprovideslibseccomp.so=2-64zstdzstdprovideslibzstd.so=1-64
fileprovideslibmagic.so=1-64glibclibcap-nglibxcryptlibxcryptprovideslibcrypt.so=2-64ncursesncursesprovideslibncursesw.so=6-64pamreadlineshadowglibcaclaclprovideslibacl.so=1-64attrattrprovideslibattr.so=1-64auditauditprovideslibaudit.so=1-64libxcryptlibxcryptprovideslibcrypt.so=2-64pampamprovideslibpam.so=0-64pamprovideslibpam_misc.so=0-64
systemd-libssystemd-libsprovideslibsystemd.so=0-64systemd-libsprovideslibudev.so=1-64zlib
util-linux-libsprovideslibblkid.so=1-64util-linux-libsprovideslibmount.so=1-64xzpcre2auditauditprovideslibaudit.so=1-64opensslopensslprovideslibcrypto.so=3-64opensslprovideslibssl.so=3-64
glib2provideslibglib-2.0.so=0-64glib2provideslibgobject-2.0.so=0-64systemd-libsprovideslibudev.so=1-64
libxilibxextlibxfixes
libxvlibxext
mesaorcglibc
wayland
aalibglibcgpmbashprocps-ngglibcncursesncursesprovideslibncursesw.so=6-64systemd-libs
libx11ncursesslangpcreglibcgcc-libsreadlinezlibbzip2bash
cairofontconfigexpatfreetype2brotlibzip2libpngzlibbashprovidessh
bashprovidesshzlibharfbuzzfreetype2glib2glibcgraphitegcc-libs
freetype2provideslibfreetype.so=6-64graphiteprovideslibgraphite2.so=3-64glib2provideslibglib-2.0.so=0-64glib2provideslibgobject-2.0.so=0-64
expatprovideslibexpat.so=1-64freetype2provideslibfreetype.so=6-64
freetype2glib2libpnglibx11libxcblibxextlibxrenderlibx11
lzoglibc
pixmanglibc
zlib
flacgcc-libsliboggglibc
gdk-pixbuf2glib2glibclibjpeg-turboprovideslibjpegglibc
libpnglibtiffgcc-libsglibcjbigkitglibc
libjpeg-turbolibjpeg-turboprovideslibjpeg.so=8-64zlibxzzstd
shared-mime-infolibxml2glib2glibcgcc-libs
lamencurses
libavc1394glibclibraw1394glibc
libcacafreeglutlibxilibxrandrlibxextlibxrenderlibx11glibc
libglvndprovideslibgl
gcc-libsglibcglulibglvndprovideslibglgcc-libsglibc
imlib2bzip2freetype2giflibglibc
libjpeg-turbolibpnglibtifflibxextxz
libglvndlibx11ncursesslangzlib
libdvglibcpopt
libgudevlibiec61883libraw1394
libpulsedbuslibasyncnsglibc
libsndfileglibcflacflacprovideslibFLAC.so=12-64lamelameprovideslibmp3lame.so=0-64liboggliboggprovideslibogg.so=0-64libvorbisliboggprovideslibogg.so=0-64
libvorbisprovideslibvorbis.so=0-64libvorbisprovideslibvorbisenc.so=2-64mpg123alsa-libalsa-topology-confalsa-ucm-confglibc
mpg123provideslibmpg123.so=0-64opusglibc
opusprovideslibopus.so=0-64
libxcbsystemd
libraw1394libshoutlibvorbislibtheoraglibclibogg
speexgcc-libsliboggspeexdspgcc-libs
liboggprovideslibogg.so=0-64speexdspprovideslibspeexdsp.so=1-64
openssl
libsoup3brotliglib-networkingglib2glibcgnutlsglibcgcc-libsgmplibtasn1zlibnettleglibcgmp
libp11-kitlibidn2zstdlibidn2provideslibidn2.so=0-64libunistringbrotli
gsettings-desktop-schemasadobe-source-code-pro-fontscantarell-fontsdconfglib2
glib2
libproxycurlduktapeglibc
gcc-libsglib2glibc
glib2krb5libnghttp2libpsllibsysprof-capturesqlitebrotliprovideslibbrotlidec.so=1-64krb5provideslibgssapi_krb5.so=2-64glib2provideslibglib-2.0.so=0-64glib2provideslibgobject-2.0.so=0-64glib2provideslibgio-2.0.so=0-64libpslprovideslibpsl.so=5-64
libvpxgcc-libsglibc
libxdamagelibxfixes
libxtstlibxextlibxilibxfixes
mpg123nettleopencore-amrglibc
speextaglibgcc-libsglibcbashprovidesshzlib
twolameglibclibsndfile
v4l-utilshicolor-icon-themegcc-libslibjpeg-turbosystemd-libsjson-c
wavpackglibc
qt5-multimediaqt5-baselibjpeg-turboxcb-util-keysymslibxcb
xcb-util-renderutillibxcb>=1.7
libglvndprovideslibglfontconfigxdg-utilsbashprovidesshfilexorg-xsetlibxmulibxextlibxtlibsmlibiceglibcxorgproto
util-linux-libs
libx11
libx11xorgprotoglibc
xorg-xproplibx11glibc
shared-mime-infoxcb-util-wmlibxcb
libxrenderlibxisqlitexcb-util-imagelibxcbxcb-utillibxcb>=1.7
mesatslibglibc
libinputmtdevglibc
systemdlibevdevglibc
libwacomglib2libevdevlibgudevglibc
systemd-libsglibc
libxkbcommon-x11glibclibxcblibxkbcommonglibclibxml2xkeyboard-config
libxkbcommonprovideslibxkbcommon.so=0-64
libproxylibcupsgnutlsavahidbusexpatgdbmglib2libcaplibdaemondbusprovideslibdbus-1.so=3-64
glibczlibbashprovidessh
double-conversiongcc-libs
md4cglibc
qt5-translations
gst-plugins-basegst-plugins-base-libs=1.24.3alsa-libcdparanoiaglibc
grapheneglib2provideslibglib-2.0.so=0-64glib2provideslibgobject-2.0.so=0-64
libjpeg-turboprovideslibjpeglibpnglibtheoralibvorbisopuspangocairofribidiglibc
harfbuzzlibthaiglibclibdatrieglibc
libxftfontconfiglibxrender
libpulseopenalgcc-libs
qt5-webkitqt5-locationqt5-declarativeqt5-base
qt5-sensorsqt5-base
qt5-webchannelqt5-declarative
libwebpgiflibglibclibjpeg-turboprovideslibjpeglibpnglibtiff
libxcompositelibxfixes
gst-plugins-basehyphenglibcperlgdbm>=1.17db5.3gcc-libsbashprovidessh
glibclibxcryptlibxcryptprovideslibcrypt.so=2-64
woff2brotli
glibcgcc-libsglib2zliblibx11sqlitegst-plugins-base-libslibjpeg-turboiculibpnggstreamerlibxml2qt5-baseqt5-declarativeicuprovideslibicuuc.so=75-64icuprovideslibicui18n.so=75-64
Another option is to use Nix, which
is quite adept at deploying vulnerable software. (cough) I
wonder what the size of the closure for quiterss
is…
Promising Clients
I am now looking for a new RSS client that meets my client requirements. As described in my client reflections, I (still) prefer to use a native application, not a web client. I do not check RSS feeds continually, and I dislike distracting notifications. I check RSS at certain times during the day, and I prefer to fetch feeds at that time so that they are current. Native applications that only run at those times are a good match for my use case.
I plan on trying out RSS Guard again. The author is doing a great job at maintaining the project. He asked if I could create some GitHub issues for any bugs that I notice. I have not had time to do so yet, but I plan on doing so when I try it out again.
I also plan on trying out Liferea again. Perhaps I can change my deletion-based workflow in order to use this software? It is worth a try.
After using QuiteRSS for more than two and a half years, it might be painful to go back to Thunderbird. Casual observation indicates that both the UI and UX has gotten worse over the years, IMHO. I plan on trying it out again, however.
I occasionally read about new RSS clients. Just today, I saw a Show HN post about a new web-based client called Fusion. While it looks like an interesting project, the screenshot indicates that it would probably not provide efficient usage with hundreds of feeds.
Various Other Thoughts
Rachel Kroll published So many feed readers, so many bizarre behaviors earlier this week, describing some poor RSS client behavior as well as some features that she wishes RSS clients had. It is an interesting read.
It seems like many RSS clients try to provide a stream of posts/notifications like Mastodon or X (formerly Twitter). Checking an RSS feed that rarely updates every ten minutes is not a great design, especially when the TTL and other metadata is being ignored. RSS works great for my use case, where I check for updates at specific times, but something like WebSub (formally PubSubHubbub) would probably work better for people who like such continuous streams. Perhaps I should look into adding support for WebSub to this website when I can find the time.
The demise of QuiteRSS brings the difficulty of software maintenance to mind. In particular, dependencies often incur a high cost. Most difficulties in maintenance of my own projects are caused by the lack of maintenance of dependencies. Thinking about RSS clients in particular, I would be interested in finding a robust client that minimizes dependencies. I need a client that makes it easy to organize and manage many feeds as well as efficiently filter entries. I do not need my RSS client to act like a web browser, as opening non-textual content in a separate web browser is fine. I wonder if I am part of a small minority or if there are many others who prefer to use RSS like this.
- RSS Part 1
- RSS Part 2: My Client Requirements
- RSS Part 3: Validation Issues
- RSS Part 4: Thunderbird
- RSS Part 5: Newsboat
- RSS Part 6: GORSS
- RSS Part 7: QuiteRSS
- RSS Part 8: Liferea
- RSS Part 9: Akregator
- RSS Part 10: Tiny Tiny RSS
- RSS Part 11: FreshRSS
- RSS Part 12: yarr
- RSS Part 13: RSS Guard
- RSS Part 14: Feature Reflections
- RSS Part 15: Feature Reflections
- RSS Part 16: QuiteRSS Day 1
- RSS Part 17: QuiteRSS Update
- RSS Part 18: QuiteRSS is Dead
- RSS Part 20: RSS Guard Revisited
- RSS Part 21: RSS Guard in Production