nyblnet/bento

GitHub: nyblnet/bento

Bento 是一款将编辑器、查看器和播放器全部打包进单个 HTML 文件的本地优先演示工具,以「文件即软件」的理念实现无需安装、无需账号、数据自主可控的幻灯片制作与协作。

Stars: 900 | Forks: 51

Bento

# [Bento — 装进文件的办公套件](https://bento.page/) **这款 PowerPoint 替代品是一个单 HTML 文件。** 一个 Bento 演示文稿将 它自己的查看器、演示器和编辑器内嵌在文档中 —— 在任何 浏览器中打开它,编辑它,演示它,发送它。你发送给的人什么也 不需要:文件本身*就是*软件。 **花 10 秒钟试一试:** 打开 [bento.page/slides](https://bento.page/slides) —— 这就是整个应用,它在一个同时作为功能向导的初始演示文稿上运行。或者从 [图库](https://bento.page/) 获取一个设计好的模板并将其变成你自己的。 **下载应用:** 从 [GitHub Releases](https://github.com/nyblnet/bento/releases) 页面或直接从 [bento.page](https://bento.page/releases/slides/Bento_Slides.bento.html) 获取这个单一的 `Bento_Slides.bento.html`(约 560 KB,无需账号,无需安装程序)。在任何现代浏览器中打开它,它*就是* 编辑器。保存,它会用你的演示文稿重写自身。 ## 为什么会有这个项目 办公文档曾经是你*拥有*的东西。现在它们变成了你租用的东西 —— 被锁定在别人的云盘中,隐藏在别人的登录名后,只有在某家 公司保持其服务器运行时才可读取。Bento 走上了另一条路: - **一个文件,永远相伴。** 演示文稿、字体、图像、图表、动画和 完整的编辑器结伴而行。2026 年的副本在 2036 年依然能打开。 - **诚实的源码可见。** 你的数据位于文件顶部一个普通且易读的 JSON 块中。 没有二进制格式,没有锁定,无需考古挖掘。 - **自我保存。** 文件在保存时重写自身的数据块(File System Access API,带有下载后备方案)。永远无需安装应用。 - **本地优先,毋庸置疑。** 开启离线模式,任何数据都不会离开你的 机器 —— 更新和协作被强制阻断,并且应用会明确说明这一点。 ## 内部功能 | 功能 | 描述 | |---|---| | **Morph(平滑)演示** | 共享同一 id 的元素会在幻灯片之间产生动画效果 —— 位置、大小、颜色,甚至渐变。复制一张幻灯片,重新排列,动画效果会自动生成。 | | **实时协作** | 采用 E2EE (AES-GCM) 加密,密钥仅存于你的文件中,绝不上服务器。文件本身就是邀请函:任何人打开副本即可加入。离线编辑会精准合并 —— 基于我们自研的 CRDT,包括字符级别的文本合并。 | | **盲中继** | 可选的同步中继 ([`server/sync-worker/`](server/sync-worker/)) 仅存储密文,对内容一无所知。阅读源码吧;它仅仅只有一个文件。 | | **内置图表** | 柱状图 / 折线图 / 饼图 / 散点图由我们自研的无依赖引擎绘制,在演示期间实时呈现:包含工具提示、缩放,以及柱状图变为饼图时平滑过渡的数据。 | | **专为 AI 设计** | 文档是文件中纯粹的 JSON,因此 agent 可以就地编辑 `.bento.html` 文件,而聊天机器人可以往返交互 JSON (`window.bento.loadDoc`)。参见 [docs/agents.md](docs/agents.md)。 | | **带签名的自我更新** | 发布版本均经过 ECDSA 签名并在应用内提供。更新时会写入一个*新*文件 —— 旧文件将保留作为你的回滚备份。任何服务器都不会触碰你的文档。 | | **其他所有功能** | 演讲者视图、评论、布局、隐藏的交互状态、悬停显示、动作路径、PDF 导出、页面尺寸、8 种 UI 语言 —— 全部集成在约 560 KB 的外壳中。 | ## 配合 AI 使用 由于文档是位于文件顶部附近的一个纯文本块中的纯 JSON, 任何能够读写文件的助手都能编辑你的演示文稿 —— 无需插件,无需 API。有两种使用方式: - **文件工具集** 就地编辑 `#bento-doc` JSON: [Claude Code](https://claude.com/claude-code)、Cursor、Aider 或任何具备 文件系统访问权限的 agent。Claude Code 用户将获得一个打包好的 `bento-slides` 技能(可从此代码库的插件市场安装:`/plugin marketplace add nyblnet/bento`),它甚至会自动下载最新的 Bento 应用。 - **聊天交互** 适用于任何聊天机器人:复制出文档 JSON(*About → Copy document JSON*),让助手重写它,然后将其粘贴回去。 **它可以完全离线配合本地开放权重模型工作** —— 只需将 [Ollama](https://ollama.com)、llama.cpp 或 LM Studio 指向演示文稿,任何数据都不会 离开你的机器。Agent 指南是一个单页文档,你可以将其直接放入任何 模型的上下文中:[bento.page/agents.md](https://bento.page/agents.md)(同时也在 此代码库的 [docs/agents.md](docs/agents.md) 中)。 ## 一段话讲清架构 `slides/src/model.ts` 定义了 JSON 文档模型;一个渲染器 (`render.ts`) 负责为编辑器画布、缩略图和演示模式绘制它 (Reveal.js 驱动导航;Morph 效果是根据模型而非 DOM 计算得出的)。动画是自研引擎(`anim.ts`),图表是自研的 (`charts.ts`),协作是自研的 CRDT (`sync/crdt.ts` —— 纯数据,由 `scripts/test-sync.ts` 进行了数十万次 收敛检查的模糊测试)。外壳压缩后约为 560 KB,文档块 作为纯文本保留,以便旧文件和外部工具随时进行拼接。 深入了解:[docs/architecture.md](docs/architecture.md)。 ## 真实的安全模型 - 协作密钥在创建文档时在客户端生成,仅存在于 文件中。拥有文件 = 拥有成员资格;“Rotate keys” = 撤销权限。 - 中继可见内容:密文、连接时间以及房间密钥的哈希值。 它无法读取内容、名称或结构。 - 在线状态名称属于声明,而非证明 —— 在共享密钥的房间内没问题; 企业级身份验证需要签名的数据帧(已设计,未构建)。 - 更新检查仅获取静态清单,不发送任何关于你或你 文档的信息。签名 + 哈希 + 版本单调性均在应用内验证。 - 已知权衡:实时协作期间的撤销基于快照,可能会还原 其他协作者对同一属性的并发编辑;编辑功能 优先针对桌面端设计(手机端非常适合查看和演示)。 ## 从源码构建 你只需要 Node 20+ 和 npm —— 该应用是一个单页构建,无需 搭建后端。 ``` cd slides npm install npm run dev # dev server (http://localhost:5173) npm run build:single # → dist-single/Bento_Slides.bento.html (the product) ``` `node scripts/test-sync.ts` 运行 CRDT 收敛测试套件。发布版本在本地 构建,因此签名密钥永远不会离开维护者的机器 —— 参见 [docs/RELEASING.md](docs/RELEASING.md)。 ## 延伸阅读 - [CLAUDE.md](CLAUDE.md) — 深入的架构 + 开发指南(也是 AI agents 在此代码库中工作时阅读的文档)。 - [docs/architecture.md](docs/architecture.md) — `.bento.html` 文件是如何 构建的、磁盘上的格式以及运行时布局。 - [docs/format.md](docs/format.md) — 规范的 `bento/slides` 文档模型 规范(每种元素类型、幻灯片/状态/布局结构及协作字段)。 - [docs/collab-design.md](docs/collab-design.md) — CRDT、E2EE 中继和 签名写入 RBAC 设计 + 威胁模型。 - [docs/agents.md](docs/agents.md) — 面向 AI agents 的文档格式说明。 - [CHANGELOG.md](CHANGELOG.md) — 版本历史。 - **布局:** `slides/` 是应用(源码在 `slides/src/`); `server/sync-worker/` 是盲中继;`docs/` 和 `scripts/` 是 指南和构建工具。 欢迎贡献代码 —— 从 [CONTRIBUTING.md](CONTRIBUTING.md) 开始吧。发现了 安全问题?请参见 [SECURITY.md](SECURITY.md)。 ## 路线图 **Bento/Slides** 是 Bento/Suite 的首款应用 —— 一款现已发布的 PowerPoint 替代品。接下来是 **Docs** (`bento/docs`) 和 **Sheets** (`bento/sheets`), 每一款都作为各自独立的 `.bento.html` 分发文件。当前发布版本 存在于 [bento.page](https://bento.page) 上,并通过 签名更新通道触达每一个现有文件。 ## 许可证 Bento 是基于 [MIT 许可证](LICENSE) 的开源项目 —— 此处的所有软件均为 MIT 许可,© 2026 The Bento/Suite 作者。捆绑的运行时组件 (reveal.js、 Moveable、Selecto) 均为 MIT 许可;嵌入的字体 (Fraunces、Instrument Sans) 为 OFL 许可;图库图像属于公共领域(参见 `scripts/gallery-photos/SOURCES.md`)。每个组件均保留其原始许可。
标签:HTML, MITM代理, 办公套件, 多模态安全, 本地优先, 演示文稿, 离线优先, 程序员工具, 自动化攻击