Bento:把一整套 PowerPoint 塞进单个 HTML 文件(编辑+演示+数据+协作)

查看原文 HN 讨论

文章摘要

Bento 是本期 Show HN 的爆款(1000+ 分、235 条评论),作者 starfallg 把一整套幻灯片工具——编辑、演示、打印、导出、图表、动画、实时协作——全部压进了一个 HTML 文件里。

起因很具体:作者团队最近几个月越来越多地用 Web 前端技术配合 Claude Code 之类的编码工具做演示文稿,效果很漂亮,但有个共同痛点——哪怕改一个小地方,也得去手动改代码或者再跑一遍 agent。为了跳出这个循环,他做了 Bento:不需要安装、不需要云端登录,完全离线可用;默认演示文稿大约 560 KB,拿到手后运行时不再抓取任何外部资源。用浏览器打开就能编辑、演示、打印、保存;通过邮件或 AirDrop 发给别人,对方只要有浏览器就能编辑、演示甚至实时协作。你还可以把 pptx 丢给 Claude 或 ChatGPT,让它转成 Bento 幻灯片。全部代码 MIT 许可,仓库在 nyblnet/bento

作者在评论区补充了实现细节,这部分比 README 更有料。文件大致分两段:靠前的位置是一整块明文 JSON,即幻灯片数据,可以直接读、grep,或者把 agent 指过去;应用本体则是一个 base64 blob,通过一个小 shim 加载,在浏览器里用 DecompressionStream 解压——这样既压小了体积,又保证运行时零外部请求。文件回写用的是 File System Access API,把 JSON 写回同一个文件,不支持时降级为普通下载,所有更新都经过 ECDSA 签名。技术栈以 reveal.js 为底,动画用 GSAP/Flip,图表最初用 echarts,但因为体积和行为问题最后两者都自己重新实现了一遍。

作者最得意的是 CRDT 协作有多无缝:所谓「盲中继」(blind relay)是一个跑在 Cloudflare Durable Objects 上的小文件,它看到的只有客户端发来的加密数据。协作默认关闭,需要在应用里通过分享邀请文件启动会话,此时生成一组密钥;权限按用户密钥管理,可以设只读用户,也可以按用户吊销实时协作权限。文件还内置了自动更新——检查签名清单、下载、重写文件结构、以新文件重载。

HN 评论精华