프로젝트 소개

Bento는 문서가 곧 소프트웨어라는 정의적 아이디어를 가진 오픈소스 오피스 제품군입니다. 프레젠테이션은 자체 뷰어, 발표자, 편집기를 포함한 단일 자체 포함 HTML 파일입니다. 최신 브라우저에서 열면 편집기가 되고, 저장하면 자체 데이터 블록을 다시 작성합니다. 첫 앱인 Bento Slides는 계정이나 설치 프로그램 없이 약 560KB 파일(Bento_Slides.bento.html) 하나로 배포되는 PowerPoint 대안입니다. README에 설명된 주요 기능: - 단일 파일 이식성: 덱, 글꼴, 이미지, 차트, 애니메이션, 전체 편집기가 함께 이동합니다. 문서 데이터는 파일 상단 근처의 순수하고 읽기 쉬운 JSON 블록에 있어 외부 도구로 검사하고 편집할 수 있습니다. - 자체 저장: 저장 시 File System Access API를 통해 파일이 자체 데이터 블록을 다시 작성하며, 다운로드 폴백이 있습니다. - 모프 프레젠테이션: 같은 id를 공유하는 요소가 슬라이드 간에 위치, 크기, 색상, 그라디언트가 애니메이션됩니다. DOM이 아닌 문서 모델에서 계산됩니다. - 실시간 협업: 키가 서버가 아닌 파일에 저장되는 종단간 암호화(AES-GCM)입니다. 선택적 블라인드 동기화 릴레이는 암호문만 저장합니다. 병합은 문자 수준 텍스트 병합을 갖춘 자체 CRDT를 사용하며, 수렴 테스트 스크립트로 퍼즈 테스트됩니다. - 내장 차트: 막대, 선, 원형, 분산형 차트를 의존성 없는 엔진으로 그리며, 프레젠테이션 중 상호작용이 가능하고 차트 유형 간 데이터 모핑을 지원합니다. - AI 친화적 형식: 문서가 순수 JSON이므로 파일 기반 에이전트(Claude Code, Cursor, Aider)가 .bento.html을 제자리에서 편집할 수 있고, 챗봇은 window.bento.loadDoc을 통해 JSON을 왕복 처리할 수 있습니다. Ollama, llama.cpp 또는 LM Studio를 통한 로컬 오픈 가중치 모델로 오프라인에서 작동하는 것으로 문서화되어 있습니다. - 서명된 자체 업데이트: 릴리스는 ECDSA로 서명되어 앱 내에서 제공됩니다. 업데이트는 새 파일을 작성하며 이전 파일은 롤백용으로 남습니다. - 나열된 기타 기능: 발표자 보기, 댓글, 레이아웃, 숨겨진 상호작용 상태, 호버 공개, 모션 경로, PDF 내보내기, 페이지 크기, 8개 UI 언어. 아키텍처는 TypeScript 문서 모델(slides/src/model.ts)과 편집기 캔버스, 썸네일, 프레젠트 모드에 사용되는 단일 렌더러로 요약됩니다. Reveal.js가 내비게이션을 구동하고, 애니메이션, 차트, 협업은 자체 구성 요소입니다. 셸은 문서 블록을 평문으로 남긴 채 약 560KB로 압축됩니다. README는 보안 모델에 대해 솔직합니다. 협업 키는 클라이언트 측에서 생성되어 파일에만 존재하므로 파일 소유가 곧 멤버십이며 키 교체가 곧 해지입니다. 릴레이는 암호문, 연결 타이밍, 방 키의 해시를 봅니다. 프레즌스 이름은 증명이 아닌 주장입니다. 업데이트 확인은 정적 매니페스트를 가져와 서명, 해시, 버전 단조성을 검증합니다. 알려진 트레이드오프로는 실시간 협업 중 스냅샷 기반 실행 취소와 데스크톱 우선 편집 환경이 있으며, 휴대폰은 보기와 발표에 더 적합합니다. 소스에서 빌드하려면 Node 20+와 npm이 필요합니다. 앱은 백엔드 없는 단일 페이지 빌드입니다. 명령에는 npm run dev, npm run build:single, CRDT 수렴 테스트 스크립트가 포함됩니다. 릴리스는 서명 키가 유지관리자의 컴퓨터에 남도록 로컬에서 잘립니다. 문서는 아키텍처, 규범적 bento/slides 형식 사양, 협업 설계와 위협 모델, 에이전트 가이드를 다룹니다. 로드맵에는 향후 앱으로 bento/spaces(노트), bento/dash(시트와 테이블), bento/vault가 각각 자체 .bento.html 배포판으로 명시되어 있습니다. 모든 것은 MIT 라이선스이며, 번들 런타임 구성 요소는 MIT, 내장 서체는 OFL입니다.