这是一个 PowerPoint 替代品,整个应用就是一个 HTML 文件。Bento 演示文稿自带查看器、演示模式和编辑器——用任意浏览器打开即可编辑、演示、发送。接收方无需安装任何软件。
整个办公应用(编辑器 + 查看器 + 演示器 + 文档数据)压缩进一个自包含的 HTML 文件(约 560 KB 未压缩 / 更小 DEFLATE 压缩),无需安装、无需后端、无需登录,打开即用,文件即软件。

| Morph 演示 | |
| 实时协作 | |
| 盲中继 | server/sync-worker/)只存储密文,什么都学不到。源码可读;它其实就一个文件。 |
| 内置图表 | |
| 为 AI 设计 | .bento.html 文件,聊天机器人也可以往返 JSON(window.bento.loadDoc)。详见 docs/agents.md。 |
| 签名自更新 | |
| 其他一切 |
因为文档是文件顶部附近一个明文 JSON 块,任何能读写文件的助手都能编辑你的演示文稿——无需插件、无需 API。两种方式:
#bento-doc JSON: Cursor、Aider以及其他主流Coding Agent,或任何有文件系统访问权限的代理。它完全支持离线本地开源模型——把 Ollama[1]、llama.cpp 或 LM Studio 指向文稿,任何东西都不会离开你的机器。
文档格式:.bento.html 是合法 HTML,固定结构:
#bento-doc 明文 JSON 块(type="application/bento+json",< 转义为 \u003c,这是唯一可变部分)自保存机制(save.ts):使用 File System Access API(Chromium 系浏览器)直接原地重写同一文件;降级为下载新文件。启动时捕获“干净”克隆,保存时只替换 #bento-doc 内容。
构建链路:TypeScript → Vite 7 + vite-plugin-singlefile → 单 HTML → 后处理 DEFLATE 压缩(scripts/postbuild-compress.mjs)。assetsInlineLimit 极高,确保零外部请求。
Kernel 层(kernel/):应用无关的共享核心(文档生命周期、加密信封、签名更新、i18n、动画、charts-lite),被 slides/spaces/dash 等应用以相对路径直接导入,无打包依赖。
model.ts:定义 bento/slides JSON Schema(元素、幻灯片、状态、布局、协作字段)。元素有稳定 id,支持 morphId 做跨页动画绑定。render.ts:唯一模型→DOM 渲染器,被编辑器画布、缩略图、演示模式、PDF 导出共用。Morph 完全从模型计算,而非 DOM 比较。assets 中,真正做到“文件即完整包”。动画引擎 anim.ts纯自研 tween 引擎,支持 opacity、transform、颜色、渐变、SVG 属性、运动路径(Catmull-Rom + 可变速度)。无 GSAP,可手动驱动时钟,便于测试。Morph 演示是其杀手级功能。
图表引擎 charts.ts(charts-lite)纯 SVG 实现,支持柱状/折线/饼图/散点。演示时可实时交互(tooltip、缩放),数据变化可 morph(柱图→饼图)。支持双 Y 轴、表格数据绑定、主题色板继承。体积远小于 ECharts。
协作 CRDT sync/crdt.ts(bento-sync)核心亮点:完全自研、op-based + state-based 混合。
set / ins / del / ord密钥模型:
中继(server/sync-worker/):Cloudflare Workers + Durable Objects(SQLite) + R2。只存密文、验证签名、转发,零知识。使用 WebSocket Hibernation。房间超时约 30 天。
密码加密(at-rest):PBKDF2-SHA-256(30 万次迭代)+ AES-GCM-256,信封格式 bento/enc。
自更新:ECDSA 签名 manifest,应用内验证后写出新文件(旧文件保留作回滚)。私钥永不离开维护者机器。
离线模式:硬阻断网络请求,证明真正本地优先。
只需要 Node 20+ 和 npm——应用是单页面构建,无需启动后端。
cd slidesnpm installnpm run dev # 开发服务器 (http://localhost:5173)npm run build:single # → dist-single/Bento_Slides.bento.html(最终产品)node scripts/test-sync.ts 运行 CRDT 收敛测试。发布在本地完成,签名密钥永不离开维护者机器——详见 docs/RELEASING.md。
https://github.com/nyblnet/bentoOllama: https://ollama.com/