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)
quiterss
gst-plugins-good
gst-plugins-base-libs=1.24.3
gstreamer=1.24.3
glib2
bash
readline
glibc
linux-api-headers>=4.10
tzdata
filesystem
iana-etc
ncurses
glibc
gcc-libs
glibc>=2.27
ncurses
provideslibncursesw.so=6-64
readline
provideslibreadline.so=8-64
glibc
ncurses
glibc
libffi
glibc
libsysprof-capture
pcre2
bzip2
glibc
bash
providessh
glibc
readline
zlib
glibc
util-linux-libs
glibc
sqlite
readline
zlib
glibc
zlib
libffi
provideslibffi.so=8-64
util-linux-libs
provideslibmount.so=1-64
libcap
gcc-libs
glibc
pam
glibc
libtirpc
krb5
glibc
e2fsprogs
bash
providessh
util-linux-libs
libldap
libsasl
gdbm
glibc
bash
providessh
readline
readline
provideslibreadline.so=8-64
gdbm
provideslibgdbm.so=6-64
glibc
openssl
glibc
keyutils
glibc
bash
providessh
libverto
provideslibverto-module-base
glibc
libevent
openssl
keyutils
provideslibkeyutils.so=1-64
e2fsprogs
provideslibss.so=2-64
e2fsprogs
provideslibcom_err.so=2-64
libverto
provideslibverto.so=1-64
glibc
pambase
audit
glibc
krb5
krb5
provideslibkrb5.so=3-64
krb5
provideslibgssapi_krb5.so=2-64
libcap-ng
glibc
libcap-ng
provideslibcap-ng.so=0-64
audit
provideslibaudit.so=1-64
libxcrypt
glibc
libxcrypt
provideslibcrypt.so=2-64
libnsl
glibc
libtirpc
libelf
bzip2
bzip2
provideslibbz2.so=1.0-64
curl
ca-certificates
ca-certificates-mozilla
ca-certificates-utils>=20181109-3
bash
coreutils
glibc
acl
glibc
attr
glibc
gmp
gcc-libs
glibc
libcap
openssl
findutils
glibc
bash
providessh
p11-kit>=0.24.0
libp11-kit=0.25.3-1
glibc
libffi
libtasn1
glibc
coreutils
libp11-kit
provideslibp11-kit.so=0-64
systemd-libs
provideslibsystemd.so=0-64
glibc
gcc-libs
libcap
libgcrypt
libgpg-error
glibc
bash
providessh
lz4
glibc
xz
bash
providessh
zstd
glibc
gcc-libs
zlib
xz
lz4
brotli
glibc
brotli
provideslibbrotlidec.so=1-64
krb5
krb5
provideslibgssapi_krb5.so=2-64
libidn2
libunistring
glibc
libunistring
provideslibunistring.so=5-64
libidn2
provideslibidn2.so=0-64
libnghttp2
glibc
libnghttp2
provideslibnghttp2.so=14-64
libnghttp3
glibc
libnghttp3
provideslibnghttp3.so=9-64
libpsl
libidn2
libunistring
libidn2
provideslibidn2.so=0-64
libunistring
provideslibunistring.so=5-64
libpsl
provideslibpsl.so=5-64
libssh2
openssl
zlib
libssh2
provideslibssh2.so=1-64
zlib
zlib
provideslibz.so=1-64
zstd
zstd
provideslibzstd.so=1-64
openssl
openssl
provideslibcrypto.so=3-64
openssl
provideslibssl.so=3-64
curl
provideslibcurl.so=4-64
gcc-libs
glibc
xz
xz
providesliblzma.so=5-64
zlib
zstd
zstd
provideslibzstd.so=1-64
libunwind
glibc
xz
zlib
libxml2
glibc
icu
gcc-libs
glibc
bash
providessh
ncurses
readline
xz
zlib
iso-codes
libdrm
libpciaccess
glibc
zlib
glibc
libglvnd
provideslibgl
libxext
libx11
libxcb
xcb-proto
libxdmcp
glibc
xorgproto
libxau
glibc
xorgproto
glibc
glibc
xorgproto
glibc
xorgproto
mesa
expat
glibc
gcc-libs
glibc
libdrm
libelf
libglvnd
libx11
libxcb
libxext
libxfixes
libx11
libxshmfence
glibc
libxxf86vm
libxext
llvm-libs
gcc-libs
zlib
zstd
libffi
libedit
glibc
ncurses
ncurses
provideslibncursesw.so=6-64
ncurses
libxml2
lm_sensors
wayland
glibc
libffi
expat
libxml2
default-cursors
zlib
zstd
libomxil-bellagio
glibc
mesa
providesopengl-driver
libgudev
glib2
systemd
systemd-libs=255.7
acl
acl
provideslibacl.so=1-64
bash
cryptsetup
device-mapper
glibc
systemd-libs
systemd-libs
provideslibudev.so=1-64
device-mapper
provideslibdevmapper.so=1.02-64
openssl
popt
glibc
util-linux-libs
util-linux-libs
provideslibuuid.so=1-64
json-c
glibc
json-c
provideslibjson-c.so=5-64
argon2
glibc
argon2
provideslibargon2.so
cryptsetup
provideslibcryptsetup.so=12-64
dbus
audit
libcap-ng
expat
systemd-libs
audit
provideslibaudit.so=1-64
libcap-ng
provideslibcap-ng.so=0-64
expat
provideslibexpat.so=1-64
systemd-libs
provideslibsystemd.so=0-64
dbus-broker-units
providesdbus-units
dbus
dbus-broker
audit
libcap-ng
expat
systemd-libs
audit
provideslibaudit.so=1-64
libcap-ng
provideslibcap-ng.so=0-64
expat
provideslibexpat.so=1-64
systemd-libs
provideslibsystemd.so=0-64
kbd
glibc
pam
kmod
glibc
zlib
openssl
xz
zstd
kmod
provideslibkmod.so=2-64
hwdata
libcap
libcap
provideslibcap.so=2-64
libgcrypt
libxcrypt
libxcrypt
provideslibcrypt.so=2-64
libidn2
lz4
pam
libelf
libseccomp
glibc
libseccomp
provideslibseccomp.so=2-64
util-linux
util-linux-libs=2.40.1
coreutils
file
glibc
zlib
xz
bzip2
libseccomp
libseccomp
provideslibseccomp.so=2-64
zstd
zstd
provideslibzstd.so=1-64
file
provideslibmagic.so=1-64
glibc
libcap-ng
libxcrypt
libxcrypt
provideslibcrypt.so=2-64
ncurses
ncurses
provideslibncursesw.so=6-64
pam
readline
shadow
glibc
acl
acl
provideslibacl.so=1-64
attr
attr
provideslibattr.so=1-64
audit
audit
provideslibaudit.so=1-64
libxcrypt
libxcrypt
provideslibcrypt.so=2-64
pam
pam
provideslibpam.so=0-64
pam
provideslibpam_misc.so=0-64
systemd-libs
systemd-libs
provideslibsystemd.so=0-64
systemd-libs
provideslibudev.so=1-64
zlib
util-linux-libs
provideslibblkid.so=1-64
util-linux-libs
provideslibmount.so=1-64
xz
pcre2
audit
audit
provideslibaudit.so=1-64
openssl
openssl
provideslibcrypto.so=3-64
openssl
provideslibssl.so=3-64
glib2
provideslibglib-2.0.so=0-64
glib2
provideslibgobject-2.0.so=0-64
systemd-libs
provideslibudev.so=1-64
libxi
libxext
libxfixes
libxv
libxext
mesa
orc
glibc
wayland
aalib
glibc
gpm
bash
procps-ng
glibc
ncurses
ncurses
provideslibncursesw.so=6-64
systemd-libs
libx11
ncurses
slang
pcre
glibc
gcc-libs
readline
zlib
bzip2
bash
cairo
fontconfig
expat
freetype2
brotli
bzip2
libpng
zlib
bash
providessh
bash
providessh
zlib
harfbuzz
freetype2
glib2
glibc
graphite
gcc-libs
freetype2
provideslibfreetype.so=6-64
graphite
provideslibgraphite2.so=3-64
glib2
provideslibglib-2.0.so=0-64
glib2
provideslibgobject-2.0.so=0-64
expat
provideslibexpat.so=1-64
freetype2
provideslibfreetype.so=6-64
freetype2
glib2
libpng
libx11
libxcb
libxext
libxrender
libx11
lzo
glibc
pixman
glibc
zlib
flac
gcc-libs
libogg
glibc
gdk-pixbuf2
glib2
glibc
libjpeg-turbo
provideslibjpeg
glibc
libpng
libtiff
gcc-libs
glibc
jbigkit
glibc
libjpeg-turbo
libjpeg-turbo
provideslibjpeg.so=8-64
zlib
xz
zstd
shared-mime-info
libxml2
glib2
glibc
gcc-libs
lame
ncurses
libavc1394
glibc
libraw1394
glibc
libcaca
freeglut
libxi
libxrandr
libxext
libxrender
libx11
glibc
libglvnd
provideslibgl
gcc-libs
glibc
glu
libglvnd
provideslibgl
gcc-libs
glibc
imlib2
bzip2
freetype2
giflib
glibc
libjpeg-turbo
libpng
libtiff
libxext
xz
libglvnd
libx11
ncurses
slang
zlib
libdv
glibc
popt
libgudev
libiec61883
libraw1394
libpulse
dbus
libasyncns
glibc
libsndfile
glibc
flac
flac
provideslibFLAC.so=12-64
lame
lame
provideslibmp3lame.so=0-64
libogg
libogg
provideslibogg.so=0-64
libvorbis
libogg
provideslibogg.so=0-64
libvorbis
provideslibvorbis.so=0-64
libvorbis
provideslibvorbisenc.so=2-64
mpg123
alsa-lib
alsa-topology-conf
alsa-ucm-conf
glibc
mpg123
provideslibmpg123.so=0-64
opus
glibc
opus
provideslibopus.so=0-64
libxcb
systemd
libraw1394
libshout
libvorbis
libtheora
glibc
libogg
speex
gcc-libs
libogg
speexdsp
gcc-libs
libogg
provideslibogg.so=0-64
speexdsp
provideslibspeexdsp.so=1-64
openssl
libsoup3
brotli
glib-networking
glib2
glibc
gnutls
glibc
gcc-libs
gmp
libtasn1
zlib
nettle
glibc
gmp
libp11-kit
libidn2
zstd
libidn2
provideslibidn2.so=0-64
libunistring
brotli
gsettings-desktop-schemas
adobe-source-code-pro-fonts
cantarell-fonts
dconf
glib2
glib2
libproxy
curl
duktape
glibc
gcc-libs
glib2
glibc
glib2
krb5
libnghttp2
libpsl
libsysprof-capture
sqlite
brotli
provideslibbrotlidec.so=1-64
krb5
provideslibgssapi_krb5.so=2-64
glib2
provideslibglib-2.0.so=0-64
glib2
provideslibgobject-2.0.so=0-64
glib2
provideslibgio-2.0.so=0-64
libpsl
provideslibpsl.so=5-64
libvpx
gcc-libs
glibc
libxdamage
libxfixes
libxtst
libxext
libxi
libxfixes
mpg123
nettle
opencore-amr
glibc
speex
taglib
gcc-libs
glibc
bash
providessh
zlib
twolame
glibc
libsndfile
v4l-utils
hicolor-icon-theme
gcc-libs
libjpeg-turbo
systemd-libs
json-c
wavpack
glibc
qt5-multimedia
qt5-base
libjpeg-turbo
xcb-util-keysyms
libxcb
xcb-util-renderutil
libxcb>=1.7
libglvnd
provideslibgl
fontconfig
xdg-utils
bash
providessh
file
xorg-xset
libxmu
libxext
libxt
libsm
libice
glibc
xorgproto
util-linux-libs
libx11
libx11
xorgproto
glibc
xorg-xprop
libx11
glibc
shared-mime-info
xcb-util-wm
libxcb
libxrender
libxi
sqlite
xcb-util-image
libxcb
xcb-util
libxcb>=1.7
mesa
tslib
glibc
libinput
mtdev
glibc
systemd
libevdev
glibc
libwacom
glib2
libevdev
libgudev
glibc
systemd-libs
glibc
libxkbcommon-x11
glibc
libxcb
libxkbcommon
glibc
libxml2
xkeyboard-config
libxkbcommon
provideslibxkbcommon.so=0-64
libproxy
libcups
gnutls
avahi
dbus
expat
gdbm
glib2
libcap
libdaemon
dbus
provideslibdbus-1.so=3-64
glibc
zlib
bash
providessh
double-conversion
gcc-libs
md4c
glibc
qt5-translations
gst-plugins-base
gst-plugins-base-libs=1.24.3
alsa-lib
cdparanoia
glibc
graphene
glib2
provideslibglib-2.0.so=0-64
glib2
provideslibgobject-2.0.so=0-64
libjpeg-turbo
provideslibjpeg
libpng
libtheora
libvorbis
opus
pango
cairo
fribidi
glibc
harfbuzz
libthai
glibc
libdatrie
glibc
libxft
fontconfig
libxrender
libpulse
openal
gcc-libs
qt5-webkit
qt5-location
qt5-declarative
qt5-base
qt5-sensors
qt5-base
qt5-webchannel
qt5-declarative
libwebp
giflib
glibc
libjpeg-turbo
provideslibjpeg
libpng
libtiff
libxcomposite
libxfixes
gst-plugins-base
hyphen
glibc
perl
gdbm>=1.17
db5.3
gcc-libs
bash
providessh
glibc
libxcrypt
libxcrypt
provideslibcrypt.so=2-64
woff2
brotli
glibc
gcc-libs
glib2
zlib
libx11
sqlite
gst-plugins-base-libs
libjpeg-turbo
icu
libpng
gstreamer
libxml2
qt5-base
qt5-declarative
icu
provideslibicuuc.so=75-64
icu
provideslibicui18n.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