适用于 macOS · iPad · iPhone
DjVuReader
一款为扫描书、档案与学术文献而写的原生 DjVu 阅读器。界面用 SwiftUI,内核用 Rust。阅读全程留在本机——没有账号,没有分析统计,没有第三方追踪。
这是一个可运行的 preview。Apple 原生应用、真实 Rust 解码器、全文搜索、目录解析、设备端 OCR、标注与页面渲染已经串通;公开测试与 App Store 审核仍然是发布门槛。

截自 preview build 的真实截图 —— 页面由 Rust 内核在设备上解码,不是示意图。
01为什么是 DjVu,为什么是这款阅读器
档案馆从未离开的那个格式。
DjVu 压缩扫描页的方式,是按页面本来的构成拆开:锐利的黑色文字是一层,照片式的背景是另一层,剩下的颜色交给调色板。一本 700 页的专著,做成 PDF 要 400 MB,做成 DjVu 只要几十兆,而且衬线依然清晰。这就是为什么几十年过去,图书馆扫描件、数学档案与学术仓储仍在用它。
这个格式一直缺的,是一款有人维护的 Apple 客户端。桌面端的阅读器是移植的移植;移动端多是靠广告养活的壳,把页面画出来就算完事。我们用宽松许可证在 Rust 里重写解码器,再用 SwiftUI 包一层真正像系统一部分的应用——分栏、键盘焦点、动态字体、VoiceOver 都在。
- 按层解码
JB2 文字掩码、IW44 小波背景、FGbz 调色板与 MMR 掩码分层解码后再合成——与编码器当初构建这一页的方式相同。
- 读的是结构,不只是像素
Bundled、Indirect 与共享字典文档都能解析。隐藏文本层、NAVM 目录、缩略图与内嵌标注都以数据形式取出,而不是压成一张平图。
- 宽松许可的内核
Rust 解码器不含任何 GPL 运行时代码。DjVuLibre 仅在开发期作为 oracle 使用,用来对照已知样本校验解析器。
02隐私立场
文件不会离开这个房间。
DjVuReader 对待「打开一份文档」的方式,像图书馆员对待一张索书单——这一页只在你和书架之间流转,不去别处。没有副本被寄走,也没有那种表面写着「发送报告」、实际另有所为的下拉菜单。
本站点同样如此:静态渲染、由 CDN 分发、不含任何第三方脚本。
- 留在设备上
你的 DjVu 文件、书签与阅读记录,都留在你打开它们的那台设备上。应用从不上传。
- 没有账号
没有登录。没有邮箱,没有 Apple ID 交接,也没有我们留在服务器上的匿名用户标识。
- 没有分析统计
没有第三方 SDK。没有网页信标。没有广告网络。没有 A/B 测试服务。我们不度量你的阅读。
- 没有 Cookie
本落地页不写入任何 Cookie,也不加载第三方 JavaScript。它唯一存下的,是你选择的浅色/深色偏好,保存在这个浏览器的 local storage 里。
应用附带的 Privacy Manifest 声明:不追踪、无追踪域名、不收集任何数据类型。Required Reason API 条目仅限文件时间戳、磁盘空间与 user defaults 三类。
Rust 解码器 · Vision OCR · 本地存储
文档 · 阅读状态 · OCR 文本 · 手写标注
商品查询、购买、恢复——不含任何文档数据
无分析统计 · 无账号 · 无同步 · 无广告网络
03为 Apple 平台而写
是阅读器,不是查看器。
今天已有的原生控件都在 preview 版本里——分栏视图、侧栏、搜索抽屉、页面条、设置、无障碍与 Privacy Manifest。真实的 Rust 解码器已经接进这套外壳;公开测试与商店提交是另外两道发布门槛。
- 文档导入
读你的书库,不是云端
从访达、文件 App、隔空投送或授权文件夹打开 .djvu 与 .djv。应用把 DjVu 声明为 imported UTType——你的文件在我们的应用之外仍然保有自己的身份。
- 文本与搜索
搜正文,而不只是封面
带隐藏文本层的页面可以立即搜索。命中结果给出页码、行号与一小段上下文,按 Unicode 处理,包含中日韩子串。
- 目录
尊重卷册结构的目录
文档带 NAVM 目录时,侧栏会展开为可跳转的层级列表。没有目录时阅读器保持诚实:给出数字页索引,而不是猜章节。
- 多窗口
两页、两窗口、一个应用
基于 NavigationSplitView 构建,已为台前调度与 Mac Catalyst 准备。开第二个窗口,就能一边对照索引页一边读正文。
- 键盘优先
为键盘而写
方向键翻页,菜单命令暴露搜索与打开操作,阅读器快捷键不与系统冲突,并且能在系统菜单里被发现。
- Catalyst
在 Mac 上像 Mac
Catalyst 是为 Mac 优化,而不是把界面拉大。窗口外观、菜单栏与键盘焦点保持原生;同一套代码在 iPad 上自适应布局。
04诚实的进度
哪些已经交付,哪些还在路上。
DjVuReader 按里程碑推进,进度写在对外文档里。这张表就是工程团队内部跟踪的同一份状态——你和路线图之间没有一层市场话术。
| 能力 | 状态 | ||
|---|---|---|---|
| SwiftUI 应用外壳书库、阅读器、侧栏、搜索抽屉、设置 | 书库、阅读器、侧栏、搜索抽屉、设置 | preview 已支持iPhone、iPad 与 Mac Catalyst 均为原生界面 | iPhone、iPad 与 Mac Catalyst 均为原生界面 |
| DjVuKit Swift 包领域模型、真实 FFI 客户端、文本搜索 | 领域模型、真实 FFI 客户端、文本搜索 | preview 已支持存在 DjVuCore.xcframework 时链接 Rust 解码器 | 存在 DjVuCore.xcframework 时链接 Rust 解码器 |
| DjVu IFF 解析器(Rust)Bundled / Indirect / 共享字典结构 | Bundled / Indirect / 共享字典结构 | preview 已支持合成、畸形、公开与小规模真实语料均已纳入门禁 | 合成、畸形、公开与小规模真实语料均已纳入门禁 |
| FFI 元数据页数、尺寸、dpi、gamma、方向 | 页数、尺寸、dpi、gamma、方向 | preview 已支持通过真实 Swift 客户端读取 | 通过真实 Swift 客户端读取 |
| 文本层(TXTa / TXTz)分页文本、压缩文本、Unicode 感知搜索 | 分页文本、压缩文本、Unicode 感知搜索 | preview 已支持BZZ 压缩文本属于已支持的 MVP 范围 | BZZ 压缩文本属于已支持的 MVP 范围 |
| 页面渲染JB2、IW44、FGbz、FG44、基线 JPEG(BGjp / FGjp)、Smmr MMR 掩码 | JB2、IW44、FGbz、FG44、基线 JPEG(BGjp / FGjp)、Smmr MMR 掩码 | preview 已支持真实渲染器;仅非基线 JPEG 子变体按设计降级 | 真实渲染器;仅非基线 JPEG 子变体按设计降级 |
| NAVM 目录真实章节 / 标题树 | 真实章节 / 标题树 | preview 已支持BZZ 解码目录树,并带安全回退 | BZZ 解码目录树,并带安全回退 |
| 标注与缩略图ANTa / ANTz 标注解析、TH44 缩略图像素 | ANTa / ANTz 标注解析、TH44 缩略图像素 | preview 已支持解析进独立通道;缩略图经 IW44 解码 | 解析进独立通道;缩略图经 IW44 解码 |
| 选择、OCR 与笔记文本选择 / 复制、设备端 OCR、本地高亮与手写 | 文本选择 / 复制、设备端 OCR、本地高亮与手写 | preview 已支持纯图页由 Vision 在设备端 OCR;笔记留在本机 | 纯图页由 Vision 在设备端 OCR;笔记留在本机 |
| 不支持的 DjVu 块BGjp / FGjp 中的非基线 JPEG 子变体 | BGjp / FGjp 中的非基线 JPEG 子变体 | 不支持渐进 / 算术 / 无损 / 12 位 / CMYK 会干净地降级 | 渐进 / 算术 / 无损 / 12 位 / CMYK 会干净地降级 |
| App Store / TestFlight公开下载或测试招募 | 公开下载或测试招募 | 发布门槛待签名归档、商店元数据、截图与一轮公开测试 | 待签名归档、商店元数据、截图与一轮公开测试 |
preview 阶段的兼容性由 make ci-pr 跟踪。正式发布仍然需要签名归档、TestFlight、App Store / Mac App Store 审核素材,以及文档中写明的语料阈值。我们不会宣称支持已公布支持矩阵之外的编解码器。
05系统要求
面向当代 Apple 系统,不留意外。
我们面向 Sequoia 与 iOS 18 世代发布,以便直接依赖新的 Privacy Manifest、NavigationSplitView 与 Mac Catalyst 行为。我们不会为了装机量去迁就更旧的系统版本。
- iPhone
- iOS 18 及以上
- iPad
- iPadOS 18 及以上
- Mac
- macOS 15(Sequoia)及以上 · Apple 芯片与 Intel 均可
- 文件
- .djvu、.djv,以及受支持兼容集内的 bundled DjVu 文档。
- 网络
- 阅读不需要联网。购买与恢复通过 Apple StoreKit 进行。
定价立场
免费阅读。一次解锁,永不订阅。
- 应用免费下载。自行导入的文档中,可完整阅读三份;内置样本不占名额。
- 一次性非消耗型「永久解锁」开启无限书库、标注、导出 PDF、打印与朗读。没有订阅、广告、账号或推荐计划。
- 最终售价由 App Store 按当地货币展示。商店上架与价格仍属发布门槛。
06发布状态
这里暂时没有下载按钮。
与其放一个点不动的徽章,不如把门槛清单给你看。等这些全部变绿,这一节就会变成下载区——不会提前一行。
- preview 已支持
解码器与应用外壳
Rust 解码器、DjVuKit 桥接与 SwiftUI 阅读器已在设备上跑通,并通过门禁语料校验。
- preview 已支持
隐私清单与法务页面
Privacy Manifest、隐私政策与支持页已发布,且与应用的真实行为一致。
- 发布门槛
签名归档
通过 App Store 校验的 iOS、iPadOS 与 Mac Catalyst 发布签名归档。
- 发布门槛
公开 TestFlight
一轮面向外部的公测,用真实图书馆里的真实文档,以及随之而来的崩溃与反馈闭环。
- 发布门槛
商店元数据与截图
覆盖各设备尺寸的真实截图、终稿文案、分类、年龄分级与确定的价格点。
- 发布门槛
App Store 审核
App Store 与 Mac App Store 双双通过审核,并拿到可以放在本页上的正式商品链接。
没有邮件订阅,没有「上线通知我」表单,也没有账号。本页不收集任何联系方式,所以诚实的回答是:过些日子再来看,或者关注仓库。
07常见问题
有人问起时,我们是这么答的。
在 App Store 上架了吗?
还没有。应用已经跑着真实的 Rust 解码器和原生 Apple 外壳,但公开 TestFlight、App Store 审核与 Mac App Store 打包仍是发布门槛。本页没有 App Store 链接、没有 TestFlight 邀请、也没有下载徽章,这是有意为之。
今天能打开所有 DjVu 文件吗?
接近了。兼容集覆盖 bundled DjVu/DjVm 结构、共享资源、BZZ 压缩文本、NAVM 目录、JB2 掩码、IW44 前后景层、FGbz 调色板、基线 JPEG 层(BGjp / FGjp)、MMR 掩码(Smmr)、缩略图像素(TH44)以及内嵌标注解析(ANTa / ANTz)。唯一有意不支持的范围是非基线 JPEG 子变体——渐进、算术、无损、12 位与 CMYK——它们会干净地降级,而不是直接失败。
应用会怎么处理我的文件?
它以安全作用域权限打开文件,随后把导入的文档复制到应用的私有本地存储,以便重启后仍然可用。DjVuReader 从不上传或同步它们。设备端 OCR 与手写标注同样留在本机。没有账号体系、没有云同步、没有遥测。Privacy Manifest 声明不追踪、不收集任何数据类型。
有 OCR、标注或格式转换吗?
阅读、文本选择、设备端 OCR 与标注都已具备。你可以选中并复制页面文本,对纯图扫描用 Vision 在设备端识别文字,也可以用高亮与钢笔在页面上留下只存在本机的墨迹。整本「导出为 PDF」已内置——它会用同一套解码器逐页重新渲染(含墨迹),让 DjVu 书能被只认 PDF 的应用打开。除此之外它仍是阅读器而非编辑器:不提供 DjVu 转其他格式的工具,也不做原文件的就地编辑。
为什么是 DjVu,为什么是现在?
许多大型扫描书语料与学术档案至今仍以 DjVu 分发。而 Apple 平台上已有的阅读器,要么长期无人维护,要么半成品感明显。我们用宽松许可证在 Rust 中重写解码器,并用一款尊重平台的 SwiftUI 应用把它包起来。
和 DjVuLibre 是什么关系?许可证如何?
DjVuReader 的运行时不包含任何 DjVuLibre 代码。DjVuLibre 只在开发期作为 oracle,用来对照已知样本校验 Rust 解析器。发布的应用与本站点都不含 GPL 运行时代码。
这个网站会追踪我吗?
不会。它是一个静态站点,没有 Cookie、没有分析统计、没有第三方脚本,也没有远程字体——所有资源都由本域提供。浏览器里唯一存下的,是你选择的浅色/深色偏好,保存在 local storage 中,不会发往任何地方。
可以跟进开发吗?
仓库里有逐轮工程报告、架构决策记录(ADR)以及带验收门的明确路线图。接下来能被外部观察到的变化,都属于发布就绪门槛:更广的语料信心、签名归档、公开测试、商店元数据、截图、隐私链接与 Catalyst 打包。
