当你构建隐私工具时,‘Offline-First’ 实际意味着什么

发布: (2026年4月29日 GMT+8 20:39)
4 分钟阅读
原文: Dev.to

Source: Dev.to

对隐私导向的 PDF 工具而言,“offline‑first” 真正意味着什么

“offline‑first” 常被用来表示“在没有网络的情况下也能工作,重新连接后再同步”。
对于隐私导向的 PDF 应用,这一要求更为严格:应用必须在架构上无法将你的数据发送到任何地方——而不仅仅是通过配置禁止。

承诺不发送你的数据是一种政策承诺。目标是将在代码层面强制执行该承诺。

从 Rust 后端移除网络依赖

Rust 后端应当没有任何网络 crate。例如,Cargo.toml 可能如下所示:

# Cargo.toml — no network crates
[dependencies]
lopdf = "0.31"
aes-gcm = "0.10"
argon2 = "0.5"
image = "0.24"
notify = "6"
# reqwest is not here intentionally.

如果依赖树中不存在网络 crate,二进制文件就无法发起 HTTP 请求,任何配置选项也无法启用不存在的功能。

检查传递性的网络 crate

即使你没有直接列出网络 crate,某个依赖可能会通过传递方式引入它。运行:

cargo tree | grep -E "reqwest|hyper|h2|rustls|native-tls"

如果出现任何匹配项,追溯输出找到来源 crate 并禁用对应的特性。在上面的例子中,早期的一个依赖通过可选特性标志拉入了 hyper;移除该特性即可解决问题。

禁用 Tauri 内置的网络调用

Tauri 为更新检查和遥测会发起网络请求。要保持应用仅离线运行,需要同时禁用这两项:

{
  "plugins": {
    "updater": {
      "active": false
    }
  }
}

验证没有流量离开机器

使用网络监控工具(例如 macOS 上的 Little Snitch)确认在正常使用期间没有任何出站连接

通过最小网络面进行许可证验证

一次性激活密钥检查仅在首次启动时进行。激活后,密钥会本地保存,且不再重新验证,从而允许离线用户无限期运行应用。这是该产品可接受的最小网络面。

为什么 “offline‑first” 很重要

大多数用户在需要打开高度敏感的文档——如医疗记录、法律合同、税表——之前并不会考虑网络行为。此时,“offline‑first” 不再是一个功能,而是他们选择该工具的核心理由。

Hiyoko PDF Vaulthttps://hiyokoko.gumroad.com/l/HiyokoPDFVault

@hiyoyok

0 浏览
Back to Blog

相关文章

阅读更多 »

Rust 正在参加 Outreachy

简介 Rust 项目一直在积极参与开源导师计划,建立了丰富的历史,其中包括 Google Summer of Code https://bl...