OpenPanel
A self-hosted manga and comic book reader -- like Jellyfin, but for CBZ files.
OpenPanel scans your comic/manga library (CBZ, CBR and CB7) and your light novels (EPUB), indexes pages from ZIP archives without extracting them, generates thumbnails, and serves a responsive web reader with continuous-scroll and single-page modes, RTL/LTR support, reading progress tracking, bookmarks, collections, and multi-user support.
Features
- Zero extraction -- pages are streamed directly from CBZ (ZIP) archives
- RAR and 7z too -- CBR and CB7 books (or any book that is really a RAR or 7z, whatever its extension) are listed when scanned and unpacked once, the first time they're read, into a cache that keeps the books read most recently
- Light novels -- EPUB books are read as text, in pages or one long scroll, with your choice of font, size, line spacing, margins and paper colours; the contents, bookmarks, progress and the next volume work as they do for comics, and a downloaded novel reads offline
- Automatic scanning -- on startup, and whenever the library folders change: OpenPanel looks every few minutes (5 by default) and scans only when something changed; new, changed, moved and removed files are picked up, and reading progress follows a replaced or moved file
- Thumbnail generation -- WebP thumbnails for books and series
- Reading modes -- continuous scroll, single or two pages, LTR or RTL, fit-width/fit-height/original; the screen stays on while reading, and the end of a book offers the next one
- Reading progress -- tracked per-user, server-side continue-reading, shown on every poster
- Bookmarks -- bookmark pages with optional notes, accessible from a slide-out panel
- Collections -- organize series into custom collections
- Stories in parts -- a folder holding a folder per part of a story (
JoJo's Bizarre Adventure/Part 1 …/, Part 2 …/) becomes a story group: one poster in the library that opens to its parts in order, or every part on its own, as each reader likes; a series shows which part it is, and the end of a part leads on to the next
- Multi-user -- username/password authentication; the first user becomes admin and adds the others
- Devices -- everyone sees where they're signed in and can sign a device out
- Admin overview -- what needs attention (unreadable files, errors, failed sign-ins, updates, backups, doubtful metadata), the last scan, and who is reading what
- Admin panel -- libraries, users (roles, devices, sign-out everywhere), scheduled scans and backups with retention and download, updates with their changes, searchable logs with who did what
- Safe updates -- the server updates itself from a release, installing only archives signed with the project's release key; it backs up the database first, and goes back to the previous version on its own if the new one fails to start
- AniList integration -- automatic metadata, covers, and descriptions from AniList, matched by title, with a review list for missing or doubtful matches
- PWA -- installable on mobile and desktop with offline caching
- Security headers -- X-Content-Type-Options, X-Frame-Options, Referrer-Policy
- Responsive -- works on desktop, tablet, and mobile
- Keyboard shortcuts -- arrows and space to turn pages, Home/End, [ ] for the previous or next book, B to bookmark, F for full screen, Esc, and ? for the list
- Docker ready -- single multi-stage Docker image
Quick Start
Prerequisites
- Rust 1.75+ (for the backend)
- Node.js 20+ (for the frontend build)
- CBZ files organized in folders
Library Structure
Organize your files like this:
/path/to/manga/
+-- One Piece/
| +-- Chapter 001.cbz
| +-- Chapter 002.cbz
| +-- ...
+-- Naruto/
| +-- Vol 01.cbz
| +-- ...
+-- Standalone Book.cbz
Each subfolder becomes a series. Books directly in the root become standalone books. CBZ, CBR and CB7 files are read as pages, EPUB files as text. PDF files are listed by name only, without their pages.
Local Development
-
Clone the repository:
git clone https://github.com/youruser/openpanel.git
cd openpanel
-
Install frontend dependencies:
cd ui
npm install
-
Start the backend:
cd server
cargo run
The server starts on http://localhost:3001.
-
Start the frontend dev server:
cd ui
npm run dev
The dev server starts on http://localhost:3000 and proxies /api calls to :3001.
-
Open the app: Go to http://localhost:3000
-
First-time setup:
- You will be prompted to create an admin account (username + password)
- Add a library in the Admin panel (shield icon in the sidebar)
- Click Scan Now to index your library
- Go back Home to see your series
Configuration
The backend is configured through environment variables (or a .env file in the server/ directory):
This is the beginning of the README. Read the rest at the original. Read the full README ↗