Bento
Canonical version: Bento.
Bento is a presentation tool that is a single HTML file. Not an app that exports HTML; the file is the software. Open it in a browser and you have the viewer, the presenter and the editor. Send it to someone and they need nothing at all.
"The office suite that fits in a file." MIT License, TypeScript. About 560 KB, no install, no account, no network.
How it works
Two parts inside one document. Near the top sits a plain JSON block holding your slides, which you can read, grep or point a tool at. Below it, the application itself as a base64 blob that a small shim inflates in the browser through DecompressionStream.
Save, and the file rewrites its own data block using the File System Access API, with a download fallback. There is never an app to install and never a server that sees your document.
What's in it
- Morph presenting. Elements sharing an id animate between slides: position, size, colour, even gradients. Duplicate a slide, rearrange it, and the motion designs itself
- Live collaboration, end-to-end encrypted with AES-GCM, keys living in the file rather than on a server. The file is the invitation: anyone who opens a copy joins. Offline edits merge back through a custom CRDT with character-level text merging
- A blind relay. The optional sync worker stores ciphertext and learns nothing. It's about one file of source, deliberately
- Charts, drawn by a dependency-free engine, live during presentation: tooltips, zoom, and data that morphs when a bar chart becomes a pie
- Signed self-updates. Releases are ECDSA-signed and offered in-app; updating writes a new file, so the old one is your rollback
- Speaker view, comments, layouts, hidden interactive states, hover reveals, motion paths, PDF export, 8 UI languages
- Offline mode hard-blocks updates and collaboration, and says so. Local-first that you can verify rather than trust
The agent angle, which is why it exists
The author's team had been building decks as web frontends with Claude Code, and hit the obvious wall: every small edit meant going back through the harness or hand-editing code. Bento removes that loop.
Because the document is plain JSON in one plaintext block, any assistant that can read and write a file can edit your deck. No plugin, no API. Two routes in:
- File harnesses edit the
#bento-docJSON in place: Claude Code, Cursor, Aider, anything with filesystem access. Claude Code users get a packagedbento-slidesskill via/plugin marketplace add nyblnet/bento - Chat round-trip for anything else: copy the JSON out, have the model rewrite it, paste it back
It works fully offline against local open-weight models through Ollama, llama.cpp or LM Studio. The agent guide is a single page designed to be dropped into any model's context.
Why I keep this note
The format is the API. Bento didn't build an integration; it chose a document format an agent can already manipulate, and got every agent for free. That's a much better trade than shipping an MCP server, and it's the generalisable idea here: if your data is plain and inspectable in a known location, the tooling question mostly disappears.
Single-file software is a real answer to rot. Documents used to be things you had; now they're things you rent, readable while a company keeps its servers on. A file carrying its own editor opens in ten years without anyone's permission.
Worth watching where I currently use slides at all. Not a switch, but a good idea to have in the back pocket. I might explore building an Obsidian plugin that enables the same feature set without having to rely on external tools and other formats than Markdown and YAML.
References
- bento.page — home and template gallery
- Try it live — the entire app, running on a starter deck
- nyblnet/bento — source
- Download the file — ~560 KB
- Agent guide — one page, droppable into any model's context
- Guestbook — a shared live deck, to see collaboration working
- Show HN discussion (1032 points, 2026-07-22)
Related
About Sébastien
Ready to get to the next level?
Found this valuable? Share it with someone who needs it.