bento README

The project's README from github.com/nyblnet/bento. As one markdown file: README.md.

Bento

Bento — the office suite that fits in a file

This PowerPoint alternative is a single HTML file. A Bento deck carries its own viewer, presenter, and editor inside the document — open it in any browser, edit it, present it, send it. The person you send it to needs nothing: the file is the software.

Try it in 10 seconds: open bento.page/slides — that's the entire app, running on a starter deck that doubles as the feature tour. Or grab a designed template from the gallery and make it yours.

Download the app: grab the single Bento_Slides.bento.html from the GitHub Releases page or straight from bento.page (~560 KB, no account, no installer). Open it in any modern browser and it is the editor. Save, and it rewrites itself with your deck inside.

Why this exists

Office documents used to be things you had. Now they're things you rent — locked in someone's cloud, behind someone's login, readable only while a company keeps its servers on. Bento takes the other path:

What's inside

Feature Description
Morph presenting Elements that share an id animate between slides — position, size, color, even gradients. Duplicate a slide, rearrange, and the motion designs itself.
Live collaboration E2EE (AES-GCM) with keys that live in your file, never on a server. The file itself is the invitation: anyone who opens a copy joins. Offline edits merge back precisely — our own CRDT, character-level text merging included.
A blind relay The optional sync relay (server/sync-worker/) stores ciphertext and learns nothing. Read the source; it's about one file.
Charts, built in Bar / line / pie / scatter drawn by our own dependency-free engine, live during presentations: tooltips, zoom, and data that morphs when a bar chart becomes a pie.
Designed for AI The document is plain JSON in the file, so agents edit .bento.html files in place and chatbots round-trip the JSON (window.bento.loadDoc). See docs/agents.md.
Signed self-updates Releases are ECDSA-signed and offered in-app. Updating writes a new file — the old one stays as your rollback. No server ever touches your documents.
Everything else Speaker view, comments, layouts, hidden interactive states, hover reveals, motion paths, PDF export, page sizes, 8 UI languages — in a ~560 KB shell.

Use it with AI

Because the document is plain JSON living in one plaintext block near the top of the file, any assistant that can read and write a file can edit your deck — no plugin, no API. Two ways in:

It works fully offline with local open-weight models — point Ollama, llama.cpp, or LM Studio at the deck and nothing leaves your machine. The agent guide is a single page you can drop into any model's context: bento.page/agents.md (also in this repo at docs/agents.md).

Architecture in one paragraph

slides/src/model.ts defines the JSON document model; one renderer (render.ts) draws it for the editor canvas, thumbnails, and present mode (Reveal.js drives navigation; morphs are computed from the model, not the DOM). Animation is an in-house engine (anim.ts), charts are in-house (charts.ts), collaboration is an in-house CRDT (sync/crdt.ts — pure data, fuzz-tested by scripts/test-sync.ts across hundreds of thousands of convergence checks). The shell compresses to ~560 KB with the document block left as plaintext so old files and outside tools can always splice it. The deep dive: docs/architecture.md.

Security model, honestly

Build from source

Node 20+ and npm are all you need — the app is a single-page build with no backend to stand up.

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 runs the CRDT convergence rig. Releases are cut locally so the signing key never leaves the maintainer's machine — see docs/RELEASING.md.

Where to read more

Contributions welcome — start with CONTRIBUTING.md. Found a security issue? See SECURITY.md.

Community

Planning a substantial contribution? Check the pinned What's in flight issue and the open PRs first, and say what you're planning before you build it — see CONTRIBUTING.md.

Roadmap

bento/slides is the first app — a PowerPoint alternative, shipping now. bento/spaces (notes), bento/dash (sheets & tables) and bento/vault follow, each as its own self-contained .bento.html distributable. The current release lives on bento.page and reaches every existing file through the signed update channel.

License

Bento is open source under the MIT License — all software here is MIT, © 2026 The Bento authors. Bundled runtime components (reveal.js, Moveable, Selecto) are MIT; the embedded typefaces (Fraunces, Instrument Sans) are OFL; gallery imagery is public-domain (see scripts/gallery-photos/SOURCES.md). Each component keeps its own license.

bento (nyblnet/bento)

Searching Database…

5.5K ·GitHub
这是什么?Bento 是一款类似 PowerPoint 的演示应用,完整封装在一个 HTML 文件中。演示文稿、编辑器、查看器和演讲者模式都打包在一起,因此在浏览器中打开该文件就等于使用了整个应用。
这是需要安装的桌面应用,还是只是一个可以打开的文件?它只是一个文件。下载单个 BentoSlides.bento.html(约 560KB),用任意现代浏览器打开,该文件本身就是编辑器;保存时会把你的演示文稿写回同一个文件中。
我该如何开始使用?可以直接访问 bento.page/slides 立即试用,那里运行着一个入门演示文稿,同时也是功能导览。也可以从模板库中选择一个设计好的模板,在浏览器中编辑并保存。无需安装,也无需账号。
打开或分享演示文稿需要安装什么吗?不需要。你发送演示文稿的对象无需安装任何东西,因为 .bento.html 文件本身就是软件。只有从源代码构建 Bento 时,才需要 Node 20+ 和 npm。
实时协作有什么局限?实时协作期间的撤销基于快照,因此撤销操作可能会还原协作者对同一属性的并发编辑。编辑功能主要为桌面端设计,不过演示文稿在手机上仍可正常查看和播放。
我的数据究竟去了哪里?你的文档数据以纯文本、可读的 JSON 形式直接保存在文件内部。开启离线模式后,会强制阻止更新和协作,确保所有内容都只保存在本地。即使是可选的同步中继服务器,也只能看到加密后的密文,看不到你的内容。
什么是“morph 演示”?具有相同 id 的元素会在幻灯片之间自动产生动画效果,位置、大小、颜色,甚至渐变都会平滑过渡。因此复制并重新排列幻灯片,就等于为切换效果做好了设计。
AI 助手能编辑 Bento 演示文稿吗?可以。演示文稿的文档模型是文件中一个代码块内的纯 JSON,所以 Claude Code、Cursor 或 Aider 等智能体可以直接在文件系统中编辑它。任何聊天机器人也能通过复制 JSON、修改后再粘贴回来的方式处理。Claude Code 还能从项目的插件市场获得打包好的 bento-slides 技能。
图表是用 Chart.js 之类的库制作的吗?不是。柱状图、折线图、饼图和散点图由 Bento 自带的、无依赖的图表引擎绘制。在演示过程中,图表保持可交互,支持工具提示、缩放,以及图表类型之间的变形过渡。
为什么要创建一种新的文件格式,而不直接使用 PowerPoint?目标是打造一种比任何云服务都更持久的文档。2026 年保存的演示文稿,到 2036 年仍应能打开。因此字体、图片、图表和编辑器都整合在一个纯文本、可读的文件中,而不是被锁在账号或二进制格式之后。
Creator
nyblnet
Size
52.7 MB
Stars
5.5K
Age
3mo
Commits · 90 Days