About

Why PandaReader exists

PandaReader started in July 2026 as a reader for one household's Calibre library, which lived on a home server and never quite fit any existing app. The goal has stayed the same since: pull books in from wherever they actually live, and read them with a reader you can tune to exactly how you want it.

Timeline

WhenMilestone
July 2026First versions: WebDAV, FTP and SFTP sources, Calibre detection, a WebView-based EPUB reader with scroll and paged modes, exact page counts, local sync. Books, Authors and Series views and the A–Z index. Calibre wireless sync.
July 31, 2026Source goes into git. NFSv3 and SMB sources. First GitHub release, 1.0.39.
August 1–2, 2026SFTP key auth with on-device key generation, SSH key management, case-insensitive paths, sync as a foreground service, reader settings live preview. Multi-format support arrives: PDF, comics, plain text, MOBI/AZW3 with a from-scratch parser, then DjVu and FB2.
August 7, 2026Version 1.2.0 replaces the WebView with the from-scratch text engine and adds the native PDF viewer: real text selection, highlights and notes.
August 9–10, 2026Version 1.5.0 brings pinch-to-zoom and free panning back for image formats. The three-source series lookup lands with user-owned Hardcover keys.
August 13–18, 2026Version 1.6.0: hidden books and the Hidden page. Highlight editing, auto-merge across page breaks and the drag magnifier follow in 1.6.7.
September 2–3, 2026Offline mode: hide everything that is not available locally, reacting live to connectivity.
September 5, 2026Version 1.7.0: progressive layout, so books open instantly. First public, release-signed APK published to PandaReader-releases.
October 17, 2026Version 1.7.1: Hardcover's scoped API keys, correct failure caching, app-wide rate-limit handling.
October 17, 2026Version 1.7.2: the app moves to the io.pandareader package and gains an About section linking to pandareader.io, which goes live as the project site.

The changelog has every one of the 220 versions in between.

Technology

Platform

  • Kotlin 2.1, Android Gradle Plugin 9.3
  • Jetpack Compose with Material 3 (BOM 2025.01)
  • Kotlin coroutines and serialization
  • WorkManager, DataStore, Security-Crypto
  • minSdk 29 (Android 10), targetSdk 36

Sources

  • sardine-android (WebDAV)
  • Apache commons-net (FTP)
  • sshj 0.38 (SFTP) with Bouncy Castle 1.75
  • smbj 0.13 (SMB 2/3)
  • Own ONC-RPC/XDR/NFSv3 client
  • Own Calibre Smart Device client

Reading

  • Readium Kotlin toolkit 3.3 for EPUB parsing only
  • Jsoup for XHTML, Android StaticLayout for text
  • pdfium-android for PDF
  • junrar, commons-compress and xz for comic archives
  • djvu.js for DjVu
  • Own MOBI/KF8 parser

Bundled font

OpenDyslexic Regular and Bold are bundled under their open licence, and scaled slightly so they match other typefaces at the same size setting.

Scope and principles

  • Your servers, your data. No account, no cloud, no analytics. External lookups are optional and use your own API keys.
  • No DRM removal, ever. Protected formats are not scanned.
  • Exact over estimated. Page counts and positions are real, even when that costs more engineering.
  • Fix the cause. The changelog is frank about what broke and why; fixes are verified against real files and real device data before they ship.
  • One changelog. The in-app What's new list is the record of what shipped when, and this site is generated from it.

PandaReader is a personal project by SirBiggin. It is not affiliated with Calibre, Hardcover, Open Library, Google or Amazon.