Open-source project
JellyBookOrg/JellyBook avatar
JellyBookOrg/JellyBook

JellyBook: a Flutter reader for the books and comics on your own Jellyfin

A nice way to read books and comics from Jellyfin

835 stars37 forksDartMIT

At a glance

What is it?
JellyBook is a Flutter client for people who already keep ebooks, comics and audiobooks on a Jellyfin server. It reads CBZ and CBR archives, EPUB and PDF, plays the audiobook formats Jellyfin hands out, and its format support is capped by the Jellyfin Bookshelf plugin rather than by the app itself.
Who is it for?
JellyBook suits a self-hosting reader who wants one app for the comic archives, ebooks and audiobooks already in their Jellyfin library, and who is willing to install from a release or sideload an IPA. It is the wrong choice for a Kindle-style reader, for anyone whose library relies on formats the Bookshelf plugin does not expose, or for a multi server household, since multiple server support is still on the todo list.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 33 days ago.
What is it written in?
Mainly Dart, 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 reader built for a library you already host

JellyBook is a Flutter application, written in Dart, that reads books and comics from a Jellyfin server. The project describes it as a passion project by a single developer, whose aim is to let you read ebooks and comics and listen to audiobooks from your own server rather than from a commercial reading store.

The audience is narrower than a generic reader app. It assumes a Jellyfin installation holding your media, with the Jellyfin Bookshelf plugin providing the book and audiobook metadata. The plugin is the pivot of the whole design: its supported formats decide what JellyBook can open, and the project says so directly.

The app itself is MIT licensed, and the source tree carries the usual Flutter scaffolding, with lib, android, ios and linux directories, a Runner.xcodeproj, an assets folder and l10n.yaml for translations. There is also a PRIVACY.md at the root, and a docker-compose.yml that stands up a Jellyfin container, which tells you the intended way to try it is against a server you control.

The visible app is a set of four screens, library, collection, book info and search, each shown in phone and tablet layouts in the project's screenshots. The roadmap admits the interface still looks like an Android app built in Flutter rather than something designed for every platform, which is an honest description of a single maintainer's UI budget.

Where you can install it, and where you cannot

The installation table is short and comes with warnings attached. On Android, the project says to download the latest release for your platform from the releases, and that it will at some point be added to the Google Play store and may be added to the Galaxy Store. There is an F-Droid listing, linked through the IzzyOnDroid repository under the package name com.KaraWilson.JellyBook.

For iOS the news is worse. The TestFlight link is listed, but the project states plainly that the author has no developer license, so the TestFlight route will not work, and that you should sideload the IPA file instead. Sideloading is a worse experience than an install from a store: you handle the IPA yourself and you will have to repeat the process on each device update.

Other platforms are handled by opening an issue asking for support, which is how a Linux desktop build would arrive if the community wanted it.

One note applies to every platform and is worth repeating. The project states that any distribution platform it lists is considered official and trusted, and that any source not on that list is not official and may contain malware, to be used at your own risk. For an app that holds your server credentials and your reading history, that is a meaningful instruction rather than boilerplate.

Comic archives: CBZ works better than the proprietary CBR

Comics are the case where the format split bites. The supported table lists .cbz and .zip alongside .cbr and .rar, and the project's notes on CBR are the sharpest in the document: CBR is a proprietary file format so is not necessarily encouraged, CBR files do not support streaming yet, the library used for it relies on deprecated functions, and the viewer shows no progress indicator.

The CBZ entry is lighter on warnings. It is a zip container of images, and the only limitation recorded for it is that the view does not show a progress indicator, which for a comic is a smaller problem than for a large scanned PDF.

The unsupported list for books is long and tells you where the real boundaries are: .cbt and .tar, .cba and .ACE, .cb7 and .7z, tar.gz, .WebP, .gif, .lrf and .lrx, .djvu, .pdb, .fb2, .ibooks, .azw, .azw3, .kf8 and .kfx, .pcf and .mobi, .opf, .txt, .oxps and .xps.

That list includes Kindle formats and plain text, which means the app is not a general purpose ebook reader. If your library is mostly .mobi or .azw3, JellyBook will show you the title and you will not be able to open it.

EPUB and PDF support the author calls unfinished

The two formats most readers care about carry the most candid notes in the table.

For EPUB the project says image support is not the greatest, that horizontal support does not exist yet, and bluntly that it is just not in a state where the author would consider the support proper. The specification reference is EPUB 3.2, so the target format is current even where the renderer is not.

For PDF the listed problems are different in kind. Sometimes the app throws an error saying the content is not downloaded even when it is, only horizontal scrolling is supported, and there is no progress bar. The error case is the one to worry about in practice, because a false negative during download looks like a server problem rather than a client one.

The PDF specification references are the ISO 32000 series, both the 2008 and the 2020 parts, which again points at a deliberate target rather than an accidental format.

The format support story as a whole is constrained from above. The project notes that the app supports epub, mobi, pdf, cbz and cbr for books and mp3, m4a, m4b and flac for audiobooks only because the Jellyfin Bookshelf plugin currently exposes those formats, and that the author is unsure whether other formats can be added until the plugin is updated. In other words, adding a format to the app is not a local decision. It is gated on someone else's server side release.

Audiobooks: eight formats in, three out

The audiobook list is the part of the app that looks most complete. Supported formats are flac, mpga, mp3, m3u, m3u8, m4a, m4b and wav, and the list covers both individual files and the playlist formats, which lets a library split a title into tracks.

Three audiobook formats are explicitly unsupported: .aax, .aac and .ogg. The .aax exclusion is the one worth understanding, since Audible's own format is proprietary and encrypted, while the AAC omission is likely a consequence of the same plugin constraint that governs books.

Playback is not described in detail in the project documentation, so the honest statement is that the format support is documented and the playback behaviour is not. What you can verify before installing is narrower and still useful: whether the audiobooks in your library are stored in the formats above, and whether the Bookshelf plugin on your server is handing them over as those formats.

That last point is the recurring theme of this project. The app is not the limiting factor in the pipeline. Your Jellyfin server and its Bookshelf plugin are.

Building the app and a throwaway Jellyfin to point it at

The Makefile turns the release build into a set of named targets and reads the version straight out of the Flutter manifest:

bash
VERSION := $(shell yq eval '.version' pubspec.yaml)
OUTPUT_DIR := $(VERSION)

On macOS the default target builds iOS alongside the Android artefacts, and elsewhere the iOS steps are skipped:

bash
all: build_runner generate_icons ios_release ios_debug android_release android_debug app_bundle_release app_bundle_debug sha1_hashes

Each artefact build runs a Flutter build with a dart define file, which is how crash reporting configuration reaches the compiler:

bash
	@flutter build apk --release --dart-define-from-file=./sentry.json

The iOS target does the same for an IPA, and the project states that iOS builds are only supported on macOS.

To try the app you need a server. The repository ships a compose file that runs the official Jellyfin image with config, cache and media directories mounted from a local Jellyfin folder:

yaml
services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin
    user: 1001:1001
    volumes:
      - ./Jellyfin/config:/config
      - ./Jellyfin/media:/media
    ports:
     - "8096:8096"

Point a browser at port 8096 to finish setting up the server, install the Bookshelf plugin so the metadata reaches the app, and then connect JellyBook to that server.

One maintainer, a two year gap, and an explicit roadmap

The maintenance picture is the part to weigh before investing time. The last push was on 2026-09-20, and two releases landed on 2026-09-09, v1.4.0 and v1.4.1. Before those, the previous tag was v1.3.2 from 2024-02-19, so the gap between releases was about two and a half years. The project is not dead, but its release cadence is closer to a burst every couple of years than to a steady stream.

The reason is stated on the project page in its own section about slow development, and the todo list gives the detail. Outstanding items include a more consistent experience between all book formats, redesigns of several screens for a more cross platform feel, multiple server support, and a UI overhaul that keeps the current look available as an option. A plan for a small jellyfish animation on the download screen is also on the list, which tells you what kind of project this is.

The licence is MIT and the source is complete, including the PRIVACY.md file and the Weblate translation project. The single maintainer is the real dependency: if a format you need never arrives, it arrives when that person decides it does, unless you pick up the work yourself and submit it through the contribution process.

Editorial conclusion

JellyBook suits a self-hosting reader who wants one app for the comic archives, ebooks and audiobooks already in their Jellyfin library, and who is willing to install from a release or sideload an IPA. It is the wrong choice for a Kindle-style reader, for anyone whose library relies on formats the Bookshelf plugin does not expose, or for a multi server household, since multiple server support is still on the todo list. Verify three things before you rely on it: that your Jellyfin instance exposes your titles as the Bookshelf plugin does, that the format of the file you actually want to read is in the supported list rather than the unsupported one, and on Android that you install the release APK from the repository rather than a build from an unlisted source, since the project states only its own listed channels are official.

Frequently asked questions

How do I install JellyBook on Android and iOS?

On Android the project says to download the latest release for your platform from the releases, with a F-Droid listing under the package name com.KaraWilson.JellyBook, and says a Google Play listing is still to come. On iOS the TestFlight link will not work because the author has no developer license, so the documented route is to sideload the IPA file.

Which comic and book formats does JellyBook support?

The supported table lists .cbz, .zip, .cbr and .rar for comics and archives, plus .pdf and .epub for books. CBR is described as a proprietary format that does not stream yet and relies on deprecated library functions, and EPUB support is described by the author as not yet in a proper state.

Which audiobook formats can JellyBook play?

The documented list is flac, mpga, mp3, m3u, m3u8, m4a, m4b and wav. The unsupported audiobook formats are .aax, .aac and .ogg.

Why does JellyBook refuse to open some of my files?

The format support of the app follows what the Jellyfin Bookshelf plugin exposes, which the project lists as epub, mobi, pdf, cbz and cbr for books and mp3, m4a, m4b and flac for audiobooks. Adding further formats depends on the plugin being updated first.

Can JellyBook connect to more than one Jellyfin server?

Not yet. Multiple server support appears on the project's todo list, which means the current build handles one server.

Official sources

  1. Issues
  2. JellyBookOrg/JellyBook on GitHub
  3. License: MIT
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/jellybookorg-jellybook.svg)](https://hysenlabs.com/projects/jellybookorg-jellybook)

Was this useful?