About this project

Bento is an open-source office suite whose defining idea is that the document is the software: a presentation is a single self-contained HTML file that carries its own viewer, presenter and editor. Open it in any modern browser and it is the editor; save, and it rewrites its own data block. The first app, Bento Slides, is a PowerPoint alternative distributed as one ~560 KB file (Bento_Slides.bento.html) with no account or installer. Key capabilities described in the README: - One-file portability: deck, fonts, images, charts, animations and the full editor travel together; the document data sits in a plain, readable JSON block near the top of the file, so it is inspectable and editable by outside tools. - Self-saving: the file rewrites its own data block on save via the File System Access API, with a download fallback. - Morph presenting: elements sharing an id animate between slides in position, size, color and gradients, computed from the document model rather than the DOM. - Live collaboration: end-to-end encryption (AES-GCM) with keys stored in the file, not on a server; an optional blind sync relay stores only ciphertext. Merging uses an in-house CRDT with character-level text merging, fuzz-tested by a convergence test script. - Built-in charts: bar, line, pie and scatter drawn by a dependency-free engine, interactive during presentations, with data morphing between chart types. - AI-friendly format: because the document is plain JSON, file-based agents (Claude Code, Cursor, Aider) can edit .bento.html in place, and chatbots can round-trip the JSON through window.bento.loadDoc. It is documented to work offline with local open-weight models via Ollama, llama.cpp or LM Studio. - Signed self-updates: releases are ECDSA-signed and offered in-app; updating writes a new file while the old one remains as a rollback. - Other features listed: speaker view, comments, layouts, hidden interactive states, hover reveals, motion paths, PDF export, page sizes and 8 UI languages. Architecture is summarized as a TypeScript document model (slides/src/model.ts) with a single renderer used for the editor canvas, thumbnails and present mode; Reveal.js drives navigation; animation, charts and collaboration are in-house components. The shell compresses to about 560 KB with the document block left as plaintext. The README is candid about the security model: collaboration keys are minted client-side and live only in the file, so possession of the file equals membership and key rotation is revocation; the relay sees ciphertext, connection timing and a hash of the room key; presence names are claims rather than proofs; update checks fetch a static manifest and verify signature, hash and version monotonicity. Known trade-offs include snapshot-based undo during live collaboration and a desktop-first editing experience, with phones better suited to viewing and presenting. Building from source requires Node 20+ and npm; the app is a single-page build with no backend. Commands include npm run dev, npm run build:single and a CRDT convergence test script. Releases are cut locally so the signing key stays on the maintainer's machine. Documentation covers architecture, the normative bento/slides format spec, collaboration design and threat model, and an agent guide. The roadmap names future apps: bento/spaces (notes), bento/dash (sheets and tables) and bento/vault, each as its own .bento.html distributable. Everything is MIT-licensed, with bundled runtime components under MIT and embedded typefaces under OFL.