A small GTK4/libadwaita desktop client for Audiobookshelf. It signs into one server, browses book libraries, streams playback through GStreamer, and syncs listening position back to the server.
Requires an Audiobookshelf server 2.26.0 or newer.
On macOS, install the toolchain with Homebrew first:
brew install meson ninja vala gtk4 libadwaita gstreamer \
libgee libsecret json-glib libsoup blueprint-compiler \
desktop-file-utils adwaita-icon-themeThen:
meson setup build
meson compile -C build
meson test -C buildRun from the build tree (this sets GSETTINGS_SCHEMA_DIR so GSettings can find the schema):
meson compile -C build runOr:
GSETTINGS_SCHEMA_DIR=$PWD/build/data ./build/src/mini-audiobookshelfInstall locally:
meson install -C build- GTK 4.22+
- libadwaita 1.9+
- GStreamer 1.28+ with the good plugins (
scaletempo) gst-libavfor AAC and MJPEG decoding — m4b is the usual audiobook container, and without this plugin playback will fail. Homebrew'sgstreamerformula already bundles it.- libsoup 3, json-glib, libsecret, libgee
- meson 1.9+ and blueprint-compiler (build time)
On macOS, credentials go in the login keychain and window settings use GLib's keyfile backend (~/.config/glib-2.0/settings/keyfile). Homebrew GLib has no dconf, and there is no Secret Service, so without that the app would forget the server URL and token on quit. MPRIS is a no-op without a session bus.
Username/password and admin-issued API keys are both supported. An API key is stored indefinitely in the system keyring and can be revoked only on the server.
Do not paste GStreamer debug output (GST_DEBUG=...) into public issues. That log includes the stream URL, which contains the playback session id.