Capsule:把网页应用和数据打包进单个 SQLite 文件

Capsule 将 HTML 应用与数据同时打包进单个 SQLite 文件,实现零后端的可分享本地应用。
Capsule 是一款用 Rust 和 Tauri 2.0 构建的桌面应用,核心思路是将 HTML 界面、脚本资源与用户数据全部打包进一个 SQLite 文件(扩展名 `.capsule`),让"一个文件即一个完整应用"成为现实。它提供类 localStorage 的键值存储和 MongoDB 风格的集合 API,支持将 PDF、图片等资产直接存入数据库,并可导出为 CSV/JSON。安全方面,文档默认不具备文件系统访问权限,联网需单独授权。针对多人协作场景,Capsule 为每条记录分配 UUID 和时间戳以支持副本合并,作者还计划在 1.0 版本开放格式规范并引入 AI 辅助生成应用功能。该项目在 Hacker News 获得广泛关注,适合需要快速搭建个人小工具却不想折腾服务器和数据库的开发者。
一个被忽视的痛点:网页容易建,数据难存
构建 HTML 页面从未如此简单,但一旦涉及数据存储,事情就变得复杂起来——你需要找地方托管,还要考虑数据库、后端服务,甚至分享给别人时还得配置一整套环境。开发者 Capsule 正是从这个痛点出发的。
在 Hacker News 的 Show HN 帖子中,作者描述了自己的困扰:搭建界面很容易,但保存数据却总要托管在某处,事后分享也不方便。为此他花了几个月,用 Rust 和 Tauri 2.0 打造了一款名为 Capsule 的应用(同时也是文件扩展名),核心思路是把一个 HTML 应用及其数据一并打包进单个 SQLite 文件中。
这个项目在 HN 上收获了 255 分和超过 110 条评论,说明它触及了不少人共有的需求。

数据与应用同处一个文件
Capsule 的技术设计相当直接:HTML 文件及相关资源被直接嵌入到 SQLite 数据库中,用户数据则有两种保存方式。
一种是类似 localStorage 的键值存储,另一种是受 MongoDB 启发的集合(collections)API,以文档形式存入文件中的表。除此之外,PDF、图片等其他资产也可以直接存进数据库,让不同文档保持在一起。所有数据都能方便地导出为 CSV 或 JSON,避免了数据被锁死在专有格式里的顾虑。
这种"一切在一个文件里"的设计,本质上是把 SQLite 当作了一个便携的应用容器。用户拿到一个 .capsule 文件,就等于同时拿到了应用界面和全部数据,复制、备份、分享都只是复制一个文件那么简单。
SQLite 作为"应用容器"的思路并非首创,但 Capsule 的用法尤为彻底。SQLite 本身是一种无服务器、零配置的嵌入式关系型数据库,其数据库文件是标准的跨平台二进制格式,可以像普通文件一样复制和传输。它已被广泛内嵌于浏览器、操作系统和移动应用中,被称为"世界上部署量最大的数据库引擎"。Capsule 利用 SQLite 的 BLOB 字段将 HTML、CSS、JavaScript 及二进制资产(图片、PDF)一并塞入数据库,使得同一个 .capsule 文件既是"程序"又是"数据库"。这与传统的 Web 应用需要将前端代码、后端服务和数据库分层部署的模式形成了鲜明对比,代价是牺牲了水平扩展能力,但换来了极致的可移植性。
隐私优先的权限模型
作者把隐私和安全放在了很高的优先级上。默认情况下,Capsule 文档"什么都做不了"——它们没有对文件系统的直接访问权限,访问互联网也需要单独授权。
这种沙箱式的默认封闭策略,对于一个用于分享的文件格式来说尤为重要:你不希望打开别人发来的 Capsule 文件时,它偷偷读取你的本地文件或向外部服务器发送数据。作者也坦言,权限模型仍在持续改进中。
值得一提的是,Capsule 文档还能调用本地或远程的 AI 模型,实现文档专属的 AI 功能。这让它不只是一个静态的数据容器,而具备了一定的智能扩展能力。
Tauri 2.0 是 Capsule 安全模型的技术基础之一。与 Electron 不同,Tauri 使用操作系统原生的 WebView 渲染界面,并通过 Rust 编写的后端进程严格控制前端能够调用的系统 API。Tauri 2.0 引入了更细粒度的权限系统,允许开发者在清单文件中精确声明哪些插件和能力对 Web 前端可见,未经声明的能力在运行时直接不可访问。这意味着 Capsule 可以在框架层面实现"默认拒绝"策略,而不仅仅依赖应用层的逻辑判断,从而为打开第三方 Capsule 文件提供了相对可靠的隔离保障。
多人协作的难题与 UUID 方案
单文件方案有一个天然的短板:多人协作时,每个人都会产生文件的不同副本。这是所有"本地优先"(local-first)工具都要面对的经典问题。
Capsule 的应对方式是为每一条数据条目分配唯一的 UUID 和时间戳,从而让不同副本之间的合并成为可能。这套机制借鉴了分布式系统中冲突解决的思路,虽然还称不上完整的 CRDT,但为后续的合并功能打下了基础。
CRDT(Conflict-free Replicated Data Type,无冲突复制数据类型)是分布式系统中用于解决多副本并发写入冲突的一类数据结构。其核心思想是:只要数据操作满足特定的数学性质(通常是交换律和幂等律),不同节点上的修改就可以在不需要中心协调者的情况下自动合并,且合并结果唯一确定。Notion、Linear、Figma 等协作工具均不同程度地使用了 CRDT 或类似思想。Capsule 目前采用的 UUID + 时间戳方案是一种更简单的"最后写入者胜"(Last-Write-Wins)策略,在没有网络冲突的场景下已经够用,但面对两个副本几乎同时修改同一条记录时,仍可能丢失一方的变更。这也是作者将其描述为"为后续合并功能打下基础"而非宣称已完整支持 CRDT 的原因。
开放格式与上手方式
作者计划在 1.0 版本中开放文件格式规范,让其他应用也能读写 Capsule 文件。这是一个关键承诺——一个开放的格式意味着数据不会被单一应用绑架,也更容易形成生态。
对于数据迁移的担忧,作者表示每个新版本都会提供迁移逻辑,确保在使用更新版本时数据不会丢失。
想要体验的用户可以通过 Web 预览(withcapsule.app/preview)使用预置模板,或者用任意 AI 服务商配合作者提供的提示词,让 AI 帮你设计一个针对 Capsule 优化的定制应用。这种"AI 辅助生成应用"的路径,也顺应了当下用自然语言快速搭建工具的趋势。
它适合谁
Capsule 的定位介于"个人小工具"和"可分享数据文档"之间。对于那些想快速做一个记账表、清单管理器、小型知识库,又不想折腾服务器和数据库的人来说,它提供了一条极简路径。
当然,它的局限也很明显:多人实时协作仍不成熟,权限模型尚在打磨,作为一个早期项目,很多细节还有待验证。但它把 SQLite 的可移植性、HTML 的易开发性和本地优先的隐私理念结合在一起,这个方向本身值得关注。
相关推荐

Vercel智能体进化史:从翻车到翻倍的文件系统实战
Vercel首席软件官Andrew复盘数据科学智能体D0从多智能体架构翻车到文件系统Agent评分翻倍的全过程,揭示Claude Code式文件系统、技能沉淀的关键作用,并解析新开源Agent框架EVE的设计理念。

企业级AI Agent实战:低代码与硬核框架双线打法解析
解析企业级 AI Agent 实战课程框架:低代码平台(Coze/Dify/n8n)与代码框架(LangChain/LangGraph/CrewAI)双线并行,涵盖 MCP 协议、九大智能岗位与四大实战项目,助你构建能落地的企业数字员工。

OpenSpec实战:用SDD规范驱动开发驯服AI写代码
AI写代码前30分钟开挂后3小时救火?本文解析OpenSpec如何通过SDD规范驱动开发,让AI写的代码可追踪、可验证、可交付,并对比OpenSpec与SpecHit的选型场景。