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.
The Apple app, live Rust decoder, text search, outline parsing, on-device OCR, annotations, and page rendering ship together on the App Store for iPhone and iPad. The Mac build runs but is not published.

Real screenshots from the shipping app — 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.
Rust decoder · Vision OCR · local storage
Documents · reading state · OCR text · ink annotations
Product lookup, purchase, restore — no document data
No analytics · no accounts · no sync · no ad networks
03Built for Apple
A reader, not a viewer.
Every native control listed here ships — split view, sidebar, search drawer, page strip, settings, accessibility and Privacy Manifest. The real Rust decoder is wired into that shell, on the App Store today for iPhone and iPad.
- 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.
| Capability | Status | ||
|---|---|---|---|
| SwiftUI app shellLibrary, reader, sidebar, search drawer, settings | Library, reader, sidebar, search drawer, settings | ShippingNative iPhone, iPad, and Mac Catalyst surfaces | Native iPhone, iPad, and Mac Catalyst surfaces |
| DjVuKit Swift packageDomain models, live FFI client, text search | Domain models, live FFI client, text search | ShippingLinks the Rust decoder when DjVuCore.xcframework is present | Links the Rust decoder when DjVuCore.xcframework is present |
| DjVu IFF parser (Rust)Bundled / Indirect / Shared dictionary structure | Bundled / Indirect / Shared dictionary structure | ShippingSynthetic, malformed, public, and small wild corpora are gated | Synthetic, malformed, public, and small wild corpora are gated |
| Metadata over FFIpage count, dimensions, dpi, gamma, orientation | page count, dimensions, dpi, gamma, orientation | ShippingAvailable through the live Swift client | Available through the live Swift client |
| Text layer (TXTa / TXTz)Per-page text, compressed text, Unicode-aware search | Per-page text, compressed text, Unicode-aware search | ShippingBZZ-compressed text is part of the supported MVP set | BZZ-compressed text is part of the supported MVP set |
| Page renderingJB2, IW44, FGbz, FG44, baseline JPEG (BGjp / FGjp), Smmr MMR mask | JB2, IW44, FGbz, FG44, baseline JPEG (BGjp / FGjp), Smmr MMR mask | ShippingLive renderer; only non-baseline JPEG sub-variants degrade by design | Live renderer; only non-baseline JPEG sub-variants degrade by design |
| NAVM outlineReal chapter / heading tree | Real chapter / heading tree | ShippingBZZ-decoded outline tree with safe fallback | BZZ-decoded outline tree with safe fallback |
| Annotations & thumbnailsANTa / ANTz annotation parsing, TH44 thumbnail pixels | ANTa / ANTz annotation parsing, TH44 thumbnail pixels | ShippingParsed into a dedicated channel; thumbnails decode via IW44 | Parsed into a dedicated channel; thumbnails decode via IW44 |
| Selection, OCR & notesText selection / copy, on-device OCR, local highlights & ink | Text selection / copy, on-device OCR, local highlights & ink | ShippingVision OCR runs on-device for image-only pages; notes stay on device | Vision OCR runs on-device for image-only pages; notes stay on device |
| Unsupported DjVu chunksNon-baseline JPEG sub-variants in BGjp / FGjp | Non-baseline JPEG sub-variants in BGjp / FGjp | UnsupportedProgressive / arithmetic / lossless / 12-bit / CMYK degrade cleanly | Progressive / arithmetic / lossless / 12-bit / CMYK degrade cleanly |
| App StorePublic download for iPhone and iPad | Public download for iPhone and iPad | ShippingLive; the Mac App Store build is not submitted | Live; the Mac App Store build is not submitted |
Compatibility is tracked under make ci-pr and gated on every change. The Mac App Store build still needs its own packaging and review. 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 is 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 shows the price in your local currency. The Mac App Store version is not available yet.
06Availability
On the App Store for iPhone and iPad.
This section used to be a list of gates rather than a badge that led nowhere. Four of the five are green and the app is live; the one that is not is the Mac App Store, and it is still listed as unmet rather than quietly dropped.
- Shipping
Decoder + app shell
Rust decoder, DjVuKit bridge, and the SwiftUI reader run together on device against the gated corpora.
- Shipping
Privacy manifest & legal pages
Privacy Manifest, privacy policy, and support page are published and match what the app actually does.
- Shipping
Signed archives
Distribution-signed iOS and iPadOS archives that pass App Store validation. The Mac Catalyst archive builds but has not been submitted.
- Not yet
Public TestFlight
No external beta was run: the app went to review directly. Kept on the list because it is a gate we did not clear, not one we passed.
- Shipping
Store metadata & screenshots
Real captured screenshots for every device class, copy in ten languages, category, age rating, and the confirmed price point — all published on the store record.
- Shipping
App Store review
Review passed for the App Store on iPhone and iPad; the app is live. The Mac App Store has not been through review.
Search the App Store for DjVu Reader. No mailing list, no “notify me” form, no account — nothing on this page collects an address.
07FAQ
What we tell people who ask.
Is this on the App Store?
Yes, for iPhone and iPad. The Mac version is not: the Catalyst build runs, but Mac App Store packaging and review have not been done, so nothing on this page claims a Mac download.
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 wider corpus confidence and Mac App Store packaging.
