Cozy: a Linux audiobook player with a library model instead of a file list
🎧 Listen to audio books 📚 on Linux
At a glance
- What is it?
- Cozy is a GTK audiobook player for Linux, distributed through Flathub, that imports books into a browsable library, remembers playback position per book, keeps multiple storage locations, and offers an offline mode that copies a book to internal storage for listening on the move.
- Who is it for?
- Adopt Cozy if your audiobooks live on a NAS or an external drive and you want a Linux player that treats them as a library with remembered positions rather than as a folder of files. Do not adopt it if you need to play DRM-protected titles, since the supported formats are explicitly the DRM-free ones.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 99 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A player built around books, not files
Cozy is a modern audiobook player for Linux, and the organising idea is that your audiobooks form a library rather than a pile of files. The first feature in the list is importing all your audio books into Cozy so you can browse them comfortably, and the second is sorting them by author, reader, and name. The reader as a separate sort key is a small detail that tells you the model is audiobook-specific, since an audiobook has a narrator who is not the author.
The rest of the feature list covers the things an audiobook player needs that a music player does not. It remembers your playback position, which is the single most important feature in the category, because an audiobook is typically tens of hours long and the alternative is scrubbing through a progress bar. There is a sleep timer. Playback speed control is set for each book individually, which again reflects the format: a technical book might be fine at 1.5 times while a novel at 1.5 times is a different experience, and a global speed setting would not express that. You can search your library.
The formats listed are mp3, m4b, m4a covering aac and ALAC, flac, ogg, and wav, and the wording is that these are DRM free audio books, which is a clear boundary rather than a promise. There is MPRIS integration, which gives you media key support and playback information in the desktop environment.
The project is GPL-3.0 licensed, written in Python, its homepage is cozy.sh, and the most recent release is Cozy 1.3.0 from 2024-03-23, with the last push to the repository on 2026-07-16.
Offline mode is the feature that justifies the app
Offline Mode is described as allowing you to keep an audio book on internal storage if you store your audiobooks on an external or network drive, and the README calls it perfect for listening on the go.
That is the crux of the design, and it explains several of the other choices. If your audiobook library lives on a NAS, a USB drive, or a mounted network share, then it is available at your desk and not in your pocket. A player that copies a single book to local storage before you leave solves that, and the interesting design question is whether it copies the whole book or a window of it. A whole book at, say, 800 megabytes is a lot to copy over a network link every time, which is why the feature is described as keeping an audio book rather than your whole library.
The other related feature is support for multiple storage locations. Combined with offline mode, that means the library can span several directories or mounts, and one of them can be the internal copy. The structure implied here is a library database that points at files in several places, with some of those files optionally present in more than one place.
Import itself is drag and drop, so files can be dragged from a file manager into the window. There is also a plain import path for bulk additions, and given that the import writes into a managed library, the natural question is how a wrong import is cleaned up, which the FAQ answers directly.
Installation through Flathub, and the distro package caveat
The preferred installation route is Flatpak, with the official package on Flathub, and the application id is com.github.geigi.cozy. A Flathub download badge is the first thing in the README.
The alternative is third party packages in distribution repositories, and the caveat is stated clearly: those packages are usually outdated, and if you encounter an issue, it may in fact have already been fixed. That is a fair description of the state of desktop application packaging, where a distribution's copy of an app can lag by a year while the Flatpak moves daily. The list of distro packages is long, with entries for openSUSE, Fedora, Arch Linux through the AUR as cozy-audiobooks, Debian, VoidLinux, Solus, MX Linux, Ubuntu through a PPA, OpenBSD, and Nix through nixpkgs.
The fact that OpenBSD and Nix are on the list tells you how far the packaging reach goes for a Linux desktop application, and the Arch package name being cozy-audiobooks while the application id is com.github.geigi.cozy is the kind of divergence that makes searching for the right package name a small chore.
Removing the Flatpak installation is the operation that catches people, because there are two of them. The system-wide installation and the per-user one are uninstalled with different commands:
flatpak uninstall com.github.geigi.cozy/x86_64/stableand, if you installed it for your user account only, the user variant is:
flatpak uninstall --user com.github.geigi.cozy/x86_64/stableThe Flatpak route has its own characteristic failure, which the FAQ addresses twice. The first is uninstalling, where the Flatpak reference and the user installation are separate commands. The second is a library path that is not reachable inside the sandbox, which is what the next section is about.
Flatpak sandbox permissions for a library on /media
If you store your audiobooks in a location that the Flatpak sandbox cannot access, the documented remedy is the Flatseal application, which lets you change the permissions of a Flatpak app and allow access to a custom path such as /media.
This is the single most common thing that goes wrong with a Flatpak-distributed media player, and it is worth understanding why it happens. A Flatpak application runs with a restricted view of the filesystem, and the paths it can see are limited to its own installation, the user's home in a filtered form, and whatever else has been granted. A library on a removable drive mounted at /media, or on a NAS mounted somewhere outside the home directory, is not visible until it is explicitly permitted.
The fix is a permission change rather than a reinstall, and Flatseal provides a graphical way to make it, which matters for users who would otherwise have to edit a permissions file by hand. It is also reversible, so granting access to one library directory is not a permanent widening of the sandbox.
The other FAQ entry covers resetting the application. Deleting the folders below resets Cozy, and the documentation warns that this loses all saved progress, which includes the playback positions the app exists to remember:
~/.local/share/cozy
~/.cache/cozyResetting is the answer to the case where wrong files have been imported and cannot be removed.
The Python and GTK stack behind the player
The repository layout shows a GNOME application rather than a generic Python project. There is a cozy/ package directory, main.py at the root, a data/ directory holding icons including the scalable app icon at data/icons/hicolor/scalable/apps/com.github.geigi.cozy.svg, a flatpak/ directory for the packaging, a po/ directory for translations, a meson.build for the build, a pyproject.toml for tool configuration, and a requirements.txt for the Python dependencies.
The dependency list is short and tells you what does the work. distro handles the platform detection that the README's long distro package list implies, mutagen at 1.47 or higher reads and writes audio file metadata, peewee at 3.9.6 or higher is the ORM behind the library database, pytz handles time zones, requests handles network access, inject provides dependency injection, and Pillow handles images such as cover art.
Peewee is the notable choice. It is a small ORM, which fits an application whose database holds a library index rather than an application domain, and it means the database schema is defined in Python rather than in a separate migration tool. Mutagen is the standard Python library for audio metadata, which is what makes reading the title, author, and narrator from a file's tags possible.
The tool configuration is a modern Python setup with black at a line length of 100, isort configured with the black profile, and ruff with the flake8 bugbear, flake8 simplify, flake8 pie, flake8 comprehensions, flake8 logging format, and flake8 int rules extended in. The CI setup runs a tests workflow, and there is a DEVELOPMENT.md with instructions for GNOME Builder, Fedora, and Ubuntu.
Localisation is handled through Transifex, and the project asks for help translating, with the translator list kept in AUTHORS.md.
Against the built-in players, and against a media server
The comparison with a general media player is the first one. A general media player opens an audio file or a directory of files, but does not model an audiobook with a narrator, a per-book speed, and a remembered position. If your library is a single folder of mp3 files that you always start from the beginning, a general player is enough. The moment you have twenty books and want to resume each where you left it, the audiobook-specific model earns its place.
The comparison with a media server is the other direction. A media server can hold an audio library with metadata, position tracking, and multiple clients, and it serves several platforms at once. The difference is that Cozy is a single desktop application on Linux, it plays the local file directly rather than streaming, and it has no server component to run, configure, or keep updated. For a household with one Linux laptop and a NAS, that simplicity is the argument. For a household with phones, a TV, and speakers, the server is the better answer.
The third point is about format support. Cozy handles DRM-free mp3, m4b, m4a, flac, ogg, and wav. It does not handle DRM, and it does not claim to. A purchased audiobook store that delivers encrypted files, or a subscription service that streams, is out of scope for a local player by definition, and that is worth checking before you migrate a library.
Editorial conclusion
Adopt Cozy if your audiobooks live on a NAS or an external drive and you want a Linux player that treats them as a library with remembered positions rather than as a folder of files. Do not adopt it if you need to play DRM-protected titles, since the supported formats are explicitly the DRM-free ones. Verify first that your library path is reachable from inside the Flatpak sandbox, because that is the most common installation failure and Flatseal is the documented remedy.
Frequently asked questions
How do I install Cozy on Linux?
The preferred way is Flatpak, with the official package on Flathub under the application id com.github.geigi.cozy. Third party packages also exist for openSUSE, Fedora, Arch through the AUR, Debian, VoidLinux, Solus, MX Linux, Ubuntu through a PPA, OpenBSD, and Nix, but the documentation warns that those are usually outdated and that a bug you hit may already be fixed upstream.
What is the offline mode in Cozy?
It lets you keep an audio book on internal storage when your library lives on an external or network drive, so you can listen while away from the drive. The player also supports adding multiple storage locations and drag and drop import.
Which audio formats does Cozy support?
DRM free mp3, m4b, m4a including aac and ALAC, flac, ogg, and wav. DRM-protected titles are outside what the player handles.
My audiobook folder is not visible in the Flatpak version of Cozy. What do I do?
Use the Flatseal application to change the permissions of the Flatpak app and allow access to a custom path such as /media. This is the documented fix for a library location the sandbox cannot reach.
How do I reset Cozy after importing the wrong files?
Delete the folders ~/.local/share/cozy and ~/.cache/cozy. The documentation warns that this loses all saved progress, which includes the remembered playback positions.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/geigi-cozy)Was this useful?