Quick answers to common questions about OpenPanel.
What file formats are supported?+
OpenPanel reads CBZ (Comic Book ZIP) files. Each CBZ is a standard ZIP archive containing image files (JPEG, PNG, WebP). Support for CBR, PDF, and EPUB is on the roadmap.
Is my data safe? Does OpenPanel modify my files?+
OpenPanel never writes to your library folders. When using Docker, libraries are mounted read-only (:ro). The only data OpenPanel writes is its own database and thumbnail cache in the data directory.
Can I access OpenPanel from my phone or tablet?+
Yes. OpenPanel is a Progressive Web App (PWA). Open the URL in your mobile browser and tap "Add to Home Screen" for a native app-like experience with offline support and page caching.
How does chapter detection work?+
OpenPanel parses filenames and folder names for chapter and volume numbers using pattern matching. It supports formats like "Chapter 001.cbz", "Ch.1.cbz", "Vol 01/Ch 01.cbz", and more. If detection is wrong, renaming the file fixes it.
Can multiple users share one instance?+
Yes. Create additional accounts from the admin panel. Each user gets their own reading progress, bookmarks, collections, and preferences. Only admin users can manage libraries and other accounts.
Where is metadata fetched from?+
OpenPanel uses the AniList API for series metadata (descriptions, genres, cover art, status). Metadata is cached in the local SQLite database. You can manually trigger a metadata refresh from the series detail page.
How do I back up my data?+
The entire state lives in the data directory (default: ./data). Copy this folder to back up everything — the SQLite database (users, progress, bookmarks, library index) and the thumbnail cache. You can also trigger a backup from the admin panel.
Can I run OpenPanel behind a reverse proxy?+
Yes. OpenPanel works behind nginx, Traefik, Caddy, or any reverse proxy. See the Reverse Proxy section in the docs for an nginx example. Set OPENPANEL_PUBLIC_URL to your domain for CORS to work correctly.
What are the system requirements?+
OpenPanel is lightweight. The Rust backend uses minimal RAM (~30-50 MB idle). Docker requires Docker Engine 20+ or Docker Desktop. For native builds: Rust 1.75+ and Node.js 20+. Any modern x86_64 or ARM64 system works.
How do I update OpenPanel?+
For Docker: run "docker compose pull && docker compose up -d". For native builds: git pull, rebuild frontend and backend, restart the service. Admin users can also trigger updates from the admin panel.
Does OpenPanel support reading right-to-left (manga style)?+
Yes. The reader supports both left-to-right and right-to-left reading modes. You can set the default in your user preferences and override it per-series.
Can I organize series into collections?+
Yes. Create named collections from the UI and add any series to them. Collections are per-user, so each reader can organize their library differently.
What happens if I add new files to my library?+
OpenPanel watches your library folders for changes using a file system watcher. New files are detected and indexed automatically within seconds. You can also trigger a manual scan from the admin panel.
Is there an API I can use?+
Yes. OpenPanel exposes a REST API under /api/. See the API Reference section in the docs for all available endpoints. Authenticate with a Bearer token from the login endpoint.
How do I reset my password?+
Users can change their own password from the Profile page. Admins can reset any user's password from the Admin panel → Profiles tab. If you've lost admin access entirely, see the Password Reset section in the docs for database-level recovery options.
Can I download chapters for offline reading?+
Yes, when using OpenPanel as an installed PWA (Add to Home Screen). The Downloads tab appears in the mobile navigation, and you can download individual chapters or entire series from the series detail page. Downloads are stored locally in your browser using IndexedDB with persistent storage protection.
Can an admin reset another user's password?+
Yes. Go to Admin → Profiles, click the lock icon next to any user, and enter a new password. The user's existing sessions are invalidated and they'll need to log in with the new password.