Bento, the office suite that fits in a file
5,018
stars
930
commits
TypeScript
primary language
Sep 14, 2026
updated
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.
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:
| 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. |
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:
#bento-doc JSON in place:
Claude Code, Cursor, Aider, or any agent
with filesystem access. Claude Code users get a packaged bento-slides
skill (installable from this repo's plugin marketplace: /plugin marketplace add nyblnet/bento) that even downloads the latest Bento app by itself.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).
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.
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.
.bento.html file is
built, the on-disk format, and the runtime layout.bento/slides document-model
spec (every element type, slide/state/layout shape, and collab fields).slides/ is the app (source in slides/src/);
server/sync-worker/ is the blind relay; docs/ and scripts/ are the
guides and build tooling.Contributions welcome — start with CONTRIBUTING.md. Found a security issue? See SECURITY.md.
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.
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.
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.
Hacker News (1)
TypeScript
88.4%
JavaScript
4.6%
CSS
3.4%
HTML
1.8%
Bento, the office suite that fits in a file
5,018
stars
930
commits
TypeScript
primary language
Sep 14, 2026
updated
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.
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:
| 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. |
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:
#bento-doc JSON in place:
Claude Code, Cursor, Aider, or any agent
with filesystem access. Claude Code users get a packaged bento-slides
skill (installable from this repo's plugin marketplace: /plugin marketplace add nyblnet/bento) that even downloads the latest Bento app by itself.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).
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.
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.
.bento.html file is
built, the on-disk format, and the runtime layout.bento/slides document-model
spec (every element type, slide/state/layout shape, and collab fields).slides/ is the app (source in slides/src/);
server/sync-worker/ is the blind relay; docs/ and scripts/ are the
guides and build tooling.Contributions welcome — start with CONTRIBUTING.md. Found a security issue? See SECURITY.md.
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.
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.
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.
Hacker News (1)
TypeScript
88.4%
JavaScript
4.6%
CSS
3.4%
HTML
1.8%