Frequently asked questions
Installing
Is it on the Play Store?
No. PandaReader is distributed as an APK from GitHub. See Download.
How do I update?
Install the newer APK over the existing app. Servers, settings, progress, highlights and synced files are all kept.
One exception: moving to 1.7.2 or later from 1.7.1 or earlier. The app's package name changed from io.Coitus.PandaReader to io.pandareader in 1.7.2, and Android treats that as a different app, so the new version installs beside the old one rather than over it. Nothing is carried across: add your servers again in the new app, let it sync, then uninstall the old PandaReader once you are happy. From 1.7.2 onward updates install over the top as before.
Android says the app can't be installed over the existing one.
The installed copy was signed with a different key, usually an older developer build. Uninstall it first, then install the public APK. That phone's settings and progress are lost, so note your servers first.
Which Android versions work?
Android 10 (API 29) and newer. The app targets Android 16.
Formats and DRM
Which formats can it read?
EPUB, MOBI, PRC, AZW, AZW3, KF8, PDF, CBZ, CBR, CB7, CBT, DjVu, FB2, FB3 and TXT. The Formats page shows what each engine supports.
Can it open Kindle books I bought?
Only if they are DRM-free. PandaReader never removes protection, and the DRM-only KFX format is not scanned at all. HUFF/CDIC-compressed MOBI files are also unsupported and fail with a clear message.
Why does a book show formats I can't open?
The detail page lists every format the library holds so you can see what Calibre has, including RTF, DOCX and others the app does not read.
Library
Why does a book appear once when I have it on two servers?
Copies with the same title and author are grouped on purpose. The detail page lists every copy and format; reading progress is tracked across all of them.
Where do series come from?
From Calibre when the book is in a Calibre library, otherwise from Hardcover, Open Library or Google Books. See Series and Hardcover.
Can I hide books I don't want to see?
Yes. Long-press to select books or whole series, then tap the hide icon. Swipe left from the shelf to reach the Hidden page and bring them back.
Does the app change anything on my server?
No. Every source is read-only. Sync writes only to the folder you choose on the phone.
Reading
Why don't settings appear inside the book?
Theme, font, size and mode are global, set once in Reader settings with a live preview, and apply to every book.
Are page numbers real?
Yes. Totals come from the actual layout at your current font and size, never an estimate, and they settle a couple of seconds after a book opens while the remaining chapters are measured.
Will my highlights survive a font change?
Yes. Highlights and your position are anchored to the text, not to a page.
Why does a comic saved as EPUB open in the comic viewer?
Image-per-page books are detected and routed to the bitmap pager so they read like a comic, with pinch-to-zoom and panning, rather than as a very tall text document.
Troubleshooting
SFTP connects by password but not with my key.
Confirm the public key is in the server account's authorized_keys and that the file permissions are strict (600 for the file, 700 for .ssh). Re-import the private key if it was edited on Windows; BOMs and CRLF are handled, but a truncated file is not.
NFS lists folders but can't read files.
The client authenticates as uid 0. Check the export's root-squash setting or allow the anonymous user to read the files.
Offline mode isn't hiding anything.
Make sure Hide unavailable content when offline is on in App settings, and that the books you expect to disappear were never downloaded or synced; a book opened once stays available.
Where are the logs?
Diagnostics in the app shows scan, sync and reader events, and the same log is written to the app's private files/logs/app.log. On a debug build it can be read with:
adb exec-out run-as io.pandareader cat files/logs/app.log
The app launched without network and felt slow.
Update to 1.1.17 or later; network checks are bounded and synced servers show their local mirror immediately.