2026-09-13
· Dylan Yu本地优先软件:为什么你的工具应该不用云也能工作
云应用在网络断时断、在公司下线时消失、永远为访问你自己数据收费。本地优先软件是反向趋势——在你机器上跑、本地存数据、把云当可选同步而非必需的工具。
你感受过。你依赖的应用在可能最糟的时刻「计划维护」宕机——截止前夜、发布早晨、你真正留出来做事的那个下午。你盯着转圈、或 502 页、或关于「调查中」的欢快状态推文,你等。因为你没选择。你的数据在他们服务器上,应用是瘦客户端,没有他们服务器起来,你什么都没有。
也许是另一个版本。公司被收购,十八个月后你围绕建了整个工作流的产品下线了。博客帖感谢社区,导出窗口开三十天,然后没了。你用了三年的东西现在重定向到你不想要的东西的着陆页。
或定价版本。你所在的层级——对独立运营者或小团队合理的那个——消失了。你用的功能现在锁在三倍贵的计划后面。你可以付,或你可以走。但走意味着留下你数据,因为导出是丢了半个关系的 CSV,或限速到下星期的 API,或没别的能读的格式。
这是云依赖软件的成本,人们开始反击。
反击有名字。叫本地优先,我认为它是现在软件架构中更重要想法之一——不是因为它新(它其实是计算里最老的想法),而是因为我们在 SaaS 淘金潮中集体忘了它,现在账到期了我们在记起。
「本地优先」实际什么意思
「本地优先」术语来自 Ink & Switch(Evernote 团队背后的研究实验室)2019 年的研究论文。论文《Local-first software: You own your data, in spite of the cloud》列出了不同软件构建方式的原则。精神上简单执行上难:如果你每天用的软件把你设备当真理来源、把云当可选便利,会怎样?
核心原则,如我想的:
你的数据首先在你设备上,云第二。 不是「同步到云并本地缓存」。本地优先。本地副本是真副本。云副本是复制品。
应用没有互联网连接也能工作。 不是「优雅降级」。工作。你能打开、读你数据、编辑你数据、创建新数据、关闭,全在 wifi 关时,什么都不坏。
云用于同步和协作,不是基本功能的要求。 这是关键区别。云是功能,不是依赖。你想要时在那,不想要时不在。
你拥有你数据。 没有供应商能锁你出去。如果你停止付费、如果公司倒闭、如果你因不知道犯了的服务条款违规被封——你数据仍在机器上,在你读的格式里。
值得跟它两边的架构对比。
云优先是大多数 SaaS。数据在服务器上。应用——不管是 web 应用、移动应用、还是 Electron 包装——是获取和渲染的瘦客户端。如果服务器宕、或你网络宕、或你会话过期,你什么都没有。你在租访问你自己数据的权限。
纯本地是另一极端。想想 90 年代的老桌面应用,或你用脚本打开的 SQLite 数据库文件。一切在你机器上。没同步、没协作、没多设备。它永远工作,但孤立。如果你硬盘死且没备份,没了。如果你想笔记本和台式机都工作,你手动拷文件。
本地优先是综合。你得到纯本地的永久和拥有,加上云同步的便利——但同步是附加的,不是基础的。拿走同步应用仍工作。拿走云你仍有你数据。
本地优先解决的问题
具体说云优先软件实际什么坏了,因为上面原则抽象而问题具体。
可用性依赖
关于云应用的有趣事实:它们能在两处坏。你网络能宕,意味着你到不了服务器。或它们服务器能宕,意味着服务器到不了你。任一方式,你盯着转圈。你对任一失败模式都没控制。你能升级互联网计划,但你不能让 AWS us-east-1 别有坏天。
本地优先应用在一处坏:你机器。如果你机器开着,应用工作。就这样。不依赖你不控制的网络,不依赖你看不到的服务器。失败影响范围从「你和数据中心之间的整个互联网」缩到「你面前的笔记本」。
我不是说本地机器从不失败。它们会。硬盘死、电池鼓、咖啡洒。但本地机器失败时,是一个人的问题,且是有已知解的问题(备份、新机器、另一设备上的同步副本)。云服务失败时,是所有人同时的问题,唯一解是等。
下线问题
这是真正吓我的,因为它不是假设。它不断发生。
公司建工具。人们采用。人们围绕它建工作流、放几年数据、集成进日常。然后公司钱烧完、或被想要团队不想要产品的人收购、或转型「企业 AI 解决方案」或当前转型时尚。产品下线。
云优先应用关闭时,你失去一切。服务器关、应用停、你数据——活在那个服务器上的——没了。也许你得到导出。也许导出可用。也许你有三十天搞清楚。也许没有。
本地优先应用关闭时,你失去更新。就这样。你已装的应用继续工作。你数据——活在你机器上的——仍在机器上。你能无限期继续用工具——你只是不会得到新功能或 bug 修复。最终,也许,OS 更新会破坏它,那是真实问题。但「最终这可能停」跟「这在 3 月 31 日停且你所有数据跟着走」是非常不同命题。
有带走人们数据的云应用墓地。Google Reader。Sunrise。Workflowy 的旧定价模型(不是下线,但「你数据现在在付费墙后」时刻)。每个烧完跑道的小 SaaS。本地优先是对这个的结构性保护。如果数据从不在别人服务器上,你不能被下线出你自己数据。
定价杠杆
云 SaaS 有种我认为人们想得不够的特定杠杆:它把你数据当人质。
我不是说 SaaS 公司恶意做这个。大多数不。但架构给他们杠杆不管用不用。如果你停止付费,他们能关你访问。而这里「访问」指「打开、读、用你花了几年创建的数据的能力」。导出功能是他们控制的阀。他们能让它好,或让它成剥掉每个关系和附件的 CSV。他们能给你 30 天,或不给。
本地优先完全移除这个杠杆。如果你停止为本地优先应用付费,应用继续工作。你保留你数据。你保留打开、读、编辑它的能力。你失去的是同步、更新、高级功能——真正值得付费的东西,而不是你因为没选择而付费的东西。
这不是反 SaaS。我付很多 SaaS。但我意识到,每次我付,我在租访问而不是拥有工具。本地优先是关于拥有工具。商业模式必须不同——你为软件收费、或为同步、或为更新——但跟用户的关系更健康。用户是客户,不是人质。
隐私和合规
你数据不流经别人服务器。那不只是哲学点。是法律和运营点。
如果你用受 GDPR、HIPAA、SOC 2 或任何合规字母汤约束的数据,你数据碰的每个服务器是负债。你栈里每个 SaaS 是你要评估的供应商、你要签的数据处理协议、你要担心的 breach 面。云优先软件倍增这些面。每个工具是你数据活的另一处、可能有 breach 的另一公司、你 flow-down 里的另一子处理者。
本地优先软件缩小这些面。如果你数据留在你机器,它不碰别人基建。核心功能没有要评估的供应商。如果同步可选且你不用,没有数据流到任何地方。如果你用同步,你对你数据去哪做了深思熟虑选择,而不是因为应用不工作否则数据默认流到服务器。
还有基本尊严问题。我不认为我写的每个笔记、跑的每个查询、打开的每个文件需要对可能用它训练模型、或卖聚合分析、或响应我永远听不到的传票的公司可见。本地优先是让你工作是你自己事的方式。不是因为你在做错事,而是因为它是你的。
性能
这个被低估,随着人们注意到「现代」软件感觉多慢而变得更重要。
云应用基本上为每件事做网络往返。你点东西,应用发请求到服务器,服务器查数据库,数据库响应,服务器响应,应用重渲染。那是毫秒——几十到几百,取决于服务器在哪和多少跳。加冷连接、TLS 握手、DNS 查询,你进入秒。我们都用过点标签要整秒的应用。不是因为应用复杂。是因为应用远。
本地优先应用在微秒做操作。数据就在那。磁盘就在那。CPU 就在那。没有往返因为没有行程。这是为什么本地优先应用感觉快是云应用无论多优化都难以匹配的。不是工程努力问题。是物理。光快,但你本地内存总线更快。
这比人们承认的重要。速度是功能。10ms 响应和 200ms 响应的应用差别是感觉像你手延伸的应用和感觉像你在发请求等回复的应用。本地优先默认给你前者。
取舍(诚实说)
我不假装本地优先免费。不是。云优先赢十年的原因是它更易建、更易变现、更易扩展。本地优先要你解决一些真正难的问题。
协作更难。 云优先应用里,协作容易因为有一个服务器一个真理来源。两人编辑文档,服务器合并编辑,完。本地优先应用里,两人有两个本地副本,那些副本需要收敛。那是分布式系统问题,分布式系统问题出名地不容易。你需要冲突解决。你需要合并并发编辑而不丢数据或损坏状态的方式。这是 CRDT(无冲突复制数据类型)进来的地方,CRDT 是真正研究领域,不是不懂就能用的即插即用库。
多设备需要同步。 如果你想要数据在笔记本、手机、台式机上,有什么要在它们之间移动。那个什么是同步层,同步是听起来简单直到你试建的那种东西。两设备离线时编辑同一记录会怎样?设备一周后回来上线会怎样?同步服务器宕会怎样?这些是可解问题——Automerge 和 Yjs 这样的工具专门为解决它们存在——但它们是你要解决的问题,不是架构为你解决的问题。
没有开箱即用的实时多用户编辑。 没有同步层,两人不能同时编辑同一数据。他们各自能有自己副本,但不能实时看到对方更改。如果你想要 Google Docs 式并发编辑,你需要建它(或用做的库)。云优先应用免费得到这个因为服务器是共享视图。本地优先应用要构造它。
更新是你的责任。 云优先应用里,供应商更新服务器每个人立刻得到新版本。本地优先应用里,更新要到每个客户端。自动更新器处理这个,但它们是要建和维护的另一东西,且用户能拒绝更新(这对拥有好但对想要每个人在最新版的供应商坏)。还有长尾问题:如果你在版本 3 发数据迁移,你可能多年有版本 1 的用户,你要在他们最终升级时处理他们数据。
这些是真实取舍。它们是为什么不是每个应用该本地优先、为什么云优先不会消失。但它们也是生态在更好处理的取舍。CRDT 库在成熟。同步基建在商品化。建本地优先的成本在降,而云优先的成本(美元成本和依赖成本)在变得更可见。
实践中的本地优先:谁在做
这不是理论运动。有真正基于本地优先原则建的产品,有些广泛使用。这里是我关注的几个。
Obsidian 可能是最可见的本地优先成功故事。它是笔记应用,把一切存为你机器上文件夹里的纯 Markdown 文件。你能用任何文本编辑器打开那个文件夹。你能用 Dropbox、iCloud、git 或 Obsidian 付费同步服务同步。应用完全离线工作。如果 Obsidian 公司明天消失,你笔记还在,Markdown,一切可读。这是本地优先最纯形式,是很多离开 Evernote 和 Notion 的人落那的原因。数据是你的,是托管 wiki 里数据从不是的方式。
Linear 是部分例子,有趣的。Linear 是项目管理工具——基本是 issue 追踪——它云端支撑。但它工程化来感觉本地优先。应用激进缓存、操作乐观、UI 在服务器确认前响应。它不是真正本地优先(如果他们服务器宕,你做不了多少),但它展示你能在云架构内应用本地优先原则到体验。速度和响应是 treat 本地状态为主、服务器为同步目标的直接结果。
Reflect 是建在 CRDT 同步层上的笔记应用。它本地优先带内置多设备同步。你笔记在机器上、跨设备同步、同步自动处理冲突。它是「本地优先加同步」模型的好例子——你得到本地的拥有和云的便利,难的部分(冲突解决)由同步基建处理。
BaseVolt 是我最近的,因为我在上面工作。它是桌面数据库管理面板——把它想成基于 web 数据库工具的本地优先替代。你连它到数据库(可能是本地 SQLite 文件或远程 Postgres 服务器),它在机器上跑、离线、你查询和连接细节从不流经第三方服务器。有可选云同步用于跨设备的保存查询和连接配置等,但核心工具没有它也工作。我提它不是因为这篇关于 BaseVolt——不是——而是因为它是本地优先应用到几乎完全云优先化的类别(数据库工具)的例子,而我认为那个转变是错误。
更广的 CRDT 生态 是使能层。Automerge、Yjs 和类似库在让建带实时协作的本地优先应用变得实际。几年前,如果你想要两人离线编辑同一数据并干净合并,你基本要做原创研究。现在你能用库。这是使本地优先对不只单用户工具可行的基建变化,也是为什么我认为接下来几年会在目前似乎需要云后端的类别看到更多本地优先产品。
为什么这对数据库工具特别重要
放大我最了解的类别,因为我认为它说明更广的点。
数据库管理面板——你用来看数据库、跑查询、浏览表、管理 schema 的工具——几乎都搬到云了。你登录 web 应用、连它到数据库、通过浏览器工作。web 应用跟你数据库说话。你查询从浏览器到他们服务器到你数据库再回来。
想想那意味什么。你刚给应该是两方的路径加了第三方:你和数据库。你跑的每个查询经别人服务器。你连接凭证可能存在那服务器上。你查询历史活在那服务器上。你查询结果——可能包含客户数据、财务记录、健康信息、什么——在回你路上流经那服务器。
这是本地优先反对的架构,在数据库案例里论点特别清楚。你数据库可能本地(机器上 SQLite 文件)或远程(AWS 上 Postgres 实例),但接口——你用来跟数据库交互的东西——不需要也是托管服务。直接连你数据库、本地跑查询、本地渲染结果的桌面应用比通过 SaaS 后端路由一切的 web 应用更简单、更快、更私密、更稳健。
这里也有安全论点。每个 SaaS 数据库工具是潜在外泄点。如果工具被攻破,攻击者可能得到访问其客户连的每个数据库。我们在其他 SaaS 类别见过这个模式。本地存连接细节、直接连数据库的本地优先桌面工具完全移除那个面。没有要攻破的中间人因为没有中间人。
我不是说基于 web 的数据库工具邪恶或无用。它们存在有理由——零安装、易分享、默认跨平台。但我认为「数据库工具 = web 应用」的默认假设是错的,我认为它会变。web 应用的便利不值得把你数据库流量经第三方,一旦你用过直接连、即时响应的本地优先数据库工具,web 应用版本感觉像通过吸管工作。
怎么评估工具是否真本地优先
「本地优先」正变成营销术语,意味着会被稀释。本地缓存一点数据的产品会叫自己本地优先。有离线只读模式的产品会叫自己本地优先。这是我用的清单,我建议你也用,当有人声称这个标签时。
没互联网能工作吗? 不是「能读缓存数据」。网络完全关时能做工具做的核心事——创建、编辑、保存——吗?如果答案是「能看不能编辑」或「能编辑但上线才保存」,那不是本地优先。那是离线容忍的云优先,比没有好但不是同样东西。
你数据存在不用应用也能访问的格式吗? 纯文件(Markdown、JSON、SQLite)理想。只有应用能读的专有本地数据库比远程服务器好,但不完全本地优先——如果应用坏且格式无文档,你卡住。金标准是任何合理工具能打开的格式的数据。Markdown、CSV、SQLite、JSON。比任何单个应用长寿的格式。
如果公司明天消失,你还能用工具吗? 这是下线测试。如果公司关闭、删服务器、停止存在,你仍有工作应用和数据吗?对真正本地优先应用,答案是是——你失去更新和同步,但应用和数据持续。对带离线缓存的云优先应用,答案是否——应用是不再存在的服务器的客户端。
云可选还是必需? 具体:云用于同步和协作(可选、附加)还是用于认证和数据存储(必需、基础)?如果你必须登录用应用,云必需——认证是云依赖。如果你数据存服务器且本地副本是缓存,云必需。如果应用完全不用账号不用连接工作,云可选。
工具不必全过四项才有用。但全过四项的是我这里意思的本地优先,叫自己本地优先但没过下线测试的工具在把术语当营销用。
未来
我不认为本地优先会替代云 SaaS。那不是主张。云优先是对很多东西对的架构——数据根本共享且实时的(多人游戏、实时 dashboard、客服队列)、计算比客户端能做的重的(大规模分析、ML 推理)、价值在网络里的(市场、社交平台)。对这些,云是产品,不是功能。
但对大且服务不足的工具类别——笔记、代码编辑器、数据库管理、文件管理、个人知识库、设计工具、写作工具——本地优先是更好架构。这些是数据主要是你的、工作主要是独立或小团队、核心操作本地性质(编辑文本、跑查询、组织文件)、云加便利不加根本能力的工具。对这些工具,通过服务器路由一切是你无理由交的税,本地优先移除税。
历史上对本地优先的主要反对是同步。「本地优先对单用户好,但你需要协作或多设备的那一刻它崩溃。」那个反对 2015 年有效。现在不那么有效了。CRDT 生态——Automerge、Yjs 和围绕它们增长的模式体——在使同步成为足够解决的问题,小团队能建带实时协作的本地优先应用而不用做原创分布式系统研究。基建在商品化。成本曲线在弯。
我认为接下来几年会看到本地优先从小众哲学到主流架构选择,像十年前「离线优先」对移动应用那样。不是到处,而是在适合的类别。而我认为现在采用本地优先工具的用户会是五年后仍有数据的——因为数据在他们机器上、在他们拥有的格式里、在不需要服务器许可就工作的应用里。
至少是那个赌注。云不会消失。但每个工具需要服务器才能工作的想法——那个在消失,且不早一刻。
总结
你应该在乎本地优先因为它改变谁拥有你工作。云优先软件租你访问你自己数据,房东能涨租、驱逐你、或拆楼。本地优先软件把你数据放机器上、在你控制的格式里、在不管谁服务器起来都工作的应用里。你为工具付费,不为访问你自己付费。
这不是小众关切。是租和拥有的区别,应用到你每天用的工具。且它在变实际——同步基建在成熟、工具在变好、云依赖成本在变难忽略。
如果你用数据库,这加倍重要。你数据库工具不该是你和数据之间的另一方。该是直接连接——本地、快、私密、你的。
在 basevolt.app 试试 — 不用注册,不用信用卡。
如果你想争论这些、或在建本地优先东西想交流,在 X 上找我。