Skip to main content
DjVuReader
简体中文

For macOS · iPad · iPhone

DjVuReader

A native Apple reader for scanned books, archives, and academic papers in DjVu. Built in SwiftUI, backed by a Rust core. Reads stay on your device — no accounts, no analytics, no third-party trackers.

This is a working preview. The Apple app, live Rust decoder, text search, outline parsing, on-device OCR, annotations, and page rendering are wired together; public beta and App Store review are still release gates.

No App Store badge yetNo download URLFree download · lifetime unlock planned
Screenshot of DjVuReader on iPhone: a DjVu document decoded on the device and rendered in continuous scroll, showing the title page and the start of the next page with the page indicator reading 3 of 5.

Real screenshots from the preview build — the pages are decoded on the device by the Rust core, not mocked up.

01Why DjVu, why this reader

The format the archives never left.

DjVu compresses a scanned page by separating what it actually is: sharp black text in one layer, the photographic background in another, a palette for the colour that remains. A 700-page monograph that would be a 400 MB PDF lands in a few dozen megabytes and still resolves the serifs. That is why library scans, mathematical archives, and academic repositories still ship it decades on.

What the format never got is a maintained Apple client. The desktop readers are ports of ports; the mobile ones are ad-funded shells that render a page and stop. We are rebuilding the decoder in Rust under a permissive licence and wrapping it in a SwiftUI app that behaves like the rest of the system — split view, keyboard focus, Dynamic Type, VoiceOver.

  • Layered by design

    JB2 text masks, IW44 wavelet backgrounds, FGbz colour palettes, and MMR masks are decoded as separate layers and composited — the same way the encoder built the page.

  • Structure, not just pixels

    Bundled, indirect, and shared-dictionary documents all resolve. The hidden text layer, NAVM outline, thumbnails, and embedded annotations come across as data, not as a flat image.

  • A permissive core

    The Rust decoder carries no GPL runtime code. DjVuLibre is used only at development time, as an oracle to check the parser against known fixtures.

02Privacy posture

The file does not leave the room.

DjVuReader treats opening a document the way a librarian treats a call slip — the page goes between you and the shelf, and nothing else. No copy is mailed elsewhere. There is no “send report” dropdown that quietly does something else.

The same posture applies to this site. It is statically rendered, served from a CDN, and free of third-party scripts.

  • On device

    Your DjVu files, page bookmarks, and reading history live on the device you opened them on. The app never uploads them.

  • No accounts

    There is no sign-in. No email, no Apple ID handoff, no anonymous user identifiers we keep on a server.

  • No analytics

    No third-party SDKs. No web beacons. No ad networks. No A/B testing service. We do not measure your reading.

  • No cookies

    This landing page sets no cookies and ships no third-party JavaScript. The only thing it stores is your light/dark preference, in this browser’s local storage.

The Apple app ships a Privacy Manifest declaring no tracking, no tracking domains, and no collected data types. Required Reason API entries are limited to file timestamps, disk space, and user-defaults categories.

Your device
DjVuReader

Rust decoder · Vision OCR · local storage

Your library

Documents · reading state · OCR text · ink annotations

Apple StoreKit

Product lookup, purchase, restore — no document data

Everything else

No analytics · no accounts · no sync · no ad networks

Data-flow diagram: documents, reading state, OCR, and annotations stay inside the device boundary; only StoreKit product and purchase traffic crosses it.

03Built for Apple

A reader, not a viewer.

Every native control we have today is in the preview build — split view, sidebar, search drawer, page strip, settings, accessibility and Privacy Manifest. The real Rust decoder is wired into that shell; public beta and store submission are separate release gates.

  • Document import

    Reads your library, not the cloud

    Open .djvu and .djv files from Finder, the Files app, AirDrop, or a security-scoped folder. The app declares DjVu as an imported UTType — your files keep their identity outside our app.

  • Text & search

    Search the page, not just the cover

    Pages with an embedded text layer become searchable instantly. Hits show page, line, and a short snippet — Unicode-aware, including CJK substrings.

  • Outline

    Outline that respects the volume

    When a NAVM outline is present, the reader exposes a flattened sidebar with page jumps. Until then the reader is honest: it shows a numeric index instead of guessing chapters.

  • Multi-window

    Two pages, two windows, one app

    Built on NavigationSplitView and prepared for Stage Manager and Mac Catalyst. Open a second window to keep an index page visible while you read.

  • Keyboard-first

    Built for keyboard hands

    Arrow keys page through the document, menu commands expose search and open actions, and non-conflicting reader shortcuts stay discoverable from the system menus.

  • Catalyst

    macOS that feels like macOS

    Catalyst optimised for Mac, not just resized. Window chrome, menu bar, and keyboard focus stay native; the same code runs on iPad with adaptive layout.

04Honest status

What is shipped, what is in progress.

DjVuReader is being built milestone by milestone in public-facing documentation. This table is the same status the engineering team tracks internally — there is no marketing layer between you and the roadmap.

CapabilityStatus
SwiftUI app shellLibrary, reader, sidebar, search drawer, settingsPreview supportedNative iPhone, iPad, and Mac Catalyst surfaces
DjVuKit Swift packageDomain models, live FFI client, text searchPreview supportedLinks the Rust decoder when DjVuCore.xcframework is present
DjVu IFF parser (Rust)Bundled / Indirect / Shared dictionary structurePreview supportedSynthetic, malformed, public, and small wild corpora are gated
Metadata over FFIpage count, dimensions, dpi, gamma, orientationPreview supportedAvailable through the live Swift client
Text layer (TXTa / TXTz)Per-page text, compressed text, Unicode-aware searchPreview supportedBZZ-compressed text is part of the supported MVP set
Page renderingJB2, IW44, FGbz, FG44, baseline JPEG (BGjp / FGjp), Smmr MMR maskPreview supportedLive renderer; only non-baseline JPEG sub-variants degrade by design
NAVM outlineReal chapter / heading treePreview supportedBZZ-decoded outline tree with safe fallback
Annotations & thumbnailsANTa / ANTz annotation parsing, TH44 thumbnail pixelsPreview supportedParsed into a dedicated channel; thumbnails decode via IW44
Selection, OCR & notesText selection / copy, on-device OCR, local highlights & inkPreview supportedVision OCR runs on-device for image-only pages; notes stay on device
Unsupported DjVu chunksNon-baseline JPEG sub-variants in BGjp / FGjpUnsupportedProgressive / arithmetic / lossless / 12-bit / CMYK degrade cleanly
App Store / TestFlightPublic download or beta enrolmentRelease gatePending signed archives, store metadata, screenshots, and beta run

Preview compatibility is tracked under make ci-pr. Public release still requires signed app archives, TestFlight, App Store / Mac App Store review assets, and the documented corpus thresholds. We will not claim support for codecs outside the published support matrix.

05System requirements

Modern Apple, no surprises.

We ship for Sequoia and the iOS 18 generation so we can rely on the new Privacy Manifest, NavigationSplitView, and Mac Catalyst behaviour. We are not stretching across older OS revisions to chase install counts.

iPhone
iOS 18 or later
iPad
iPadOS 18 or later
Mac
macOS 15 (Sequoia) or later · Apple silicon and Intel
Files
.djvu, .djv, and bundled DjVu documents in the supported compatibility set.
Network
Not required for reading. Purchases and restores use Apple StoreKit.

Pricing posture

Free to read. One unlock, never a subscription.

  • The app will be free to download. Read up to three imported documents in full; bundled samples do not use a slot.
  • One non-consumable Lifetime Unlock enables an unlimited library, annotations, PDF export, printing, and Read Aloud. No subscription, ads, account, or referral program.
  • The App Store will show the final local price. Store availability and price remain release gates.

06Availability

There is no download button here yet.

We would rather show you the gate list than a badge that leads nowhere. When these are green, this section becomes the download section — and not one line before.

  1. Preview supported

    Decoder + app shell

    Rust decoder, DjVuKit bridge, and the SwiftUI reader run together on device against the gated corpora.

  2. Preview supported

    Privacy manifest & legal pages

    Privacy Manifest, privacy policy, and support page are published and match what the app actually does.

  3. Release gate

    Signed archives

    Distribution-signed iOS, iPadOS, and Mac Catalyst archives that pass App Store validation.

  4. Release gate

    Public TestFlight

    An external beta with real documents from real libraries, and the crash and feedback loop that comes with it.

  5. Release gate

    Store metadata & screenshots

    Real captured screenshots for every device class, final copy, category, age rating, and the confirmed price point.

  6. Release gate

    App Store review

    Review passed for both the App Store and the Mac App Store, with a live product URL to put on this page.

No mailing list, no “notify me” form, no account. Nothing on this page collects an address, so the honest answer is: check back, or watch the repository.

07FAQ

What we tell people who ask.

Is this on the App Store?

Not yet. The app has a live Rust decoder and native Apple shell, but public TestFlight, App Store review, and Mac App Store packaging are still release gates. There is no App Store URL, no TestFlight invite, and no download badge on this page on purpose.

Can DjVuReader open every DjVu file today?

Almost. The compatibility set covers bundled DjVu/DjVm structure, shared resources, BZZ-compressed text, NAVM outlines, JB2 masks, IW44 background and foreground layers, FGbz colour palettes, baseline-JPEG layers (BGjp / FGjp), MMR masks (Smmr), thumbnail pixels (TH44), and embedded annotation parsing (ANTa / ANTz). The only deliberately unsupported scope is non-baseline JPEG sub-variants — progressive, arithmetic, lossless, 12-bit, and CMYK — which degrade cleanly instead of failing.

What does the app do with my files?

It opens them with security-scoped access, then copies imported documents into the app’s private local storage so they stay available after relaunch. DjVuReader never uploads or syncs them. On-device OCR and ink annotations stay on the device too. There is no account system, no cloud sync, no telemetry. The Privacy Manifest declares no tracking and no collected data types.

Is there OCR, annotation, or format conversion?

Reading, text selection, on-device OCR, and annotation are in. You can select and copy a page’s text, recognise text on-device with Vision for image-only scans, and mark pages with local highlighter and pen ink that stays on your device. Whole-document Export as PDF is built in — it re-renders every page through the same decoder (ink included) so DjVu books can travel to apps that only read PDF. Beyond that it remains a reader rather than an editor: no DjVu→other-format conversion tooling and no in-place file editing.

Why DjVu, why now?

DjVu is the format many large scanned-book corpora and academic archives still ship in. Existing Apple-platform readers tend to be unmaintained or feel unfinished. We are rebuilding the decoder in Rust under a permissive licence and wrapping it in a SwiftUI app that respects the platform.

What about DjVuLibre and licensing?

DjVuReader does not ship any DjVuLibre code at runtime. DjVuLibre is used only as a development-time oracle to validate the Rust parser against known fixtures. The shipping app and this site contain no GPL runtime code.

Does this site track me?

No. It is a static site with no cookies, no analytics, no third-party scripts, and no remote fonts — every asset is served from this origin. The only thing stored in your browser is the light/dark preference you choose, kept in local storage and never sent anywhere.

Can I follow along?

The repository tracks per-round engineering reports, an architecture decision record log, and an explicit roadmap with acceptance gates. The next observable changes are release-readiness gates: wider corpus confidence, signed archives, public beta, store metadata, screenshots, privacy URLs, and Catalyst packaging.