ruinivist 6044f8da7c feat: Use Vite for client code splitting
Replaced Bun's client bundler with Vite to fix code splitting issues.
Extracted React and Excalidraw into their own manual chunks to prevent
the monolithic 7MB index.js from blocking rendering. FCP decreased
significantly since browsers can now cache these chunks independently.
2026-05-30 18:02:32 +00:00
2026-05-30 17:15:39 +00:00
2026-05-24 15:32:36 +00:00
2026-05-24 18:53:24 +00:00
2026-05-24 18:36:09 +00:00
2026-05-24 15:32:36 +00:00

excali-box

Private self-hosted Excalidraw with Bun, Caddy, and SQLite.

This is bare wrapper around the excalidraw packages that adds autosave and disk-persistence. No auth to keep things simple - you either run in a private network or put it behind Caddy auth or similar solutions.

GPT 5.5 generated

Pull from GHCR and run

Images are published to:

ghcr.io/ruinivist/excalidraw-box:<version>

docker pull ghcr.io/ruinivist/excalidraw-box:latest
docker run --rm -p 127.0.0.1:3000:80 -v "$PWD/excali-box-data:/data" ghcr.io/ruinivist/excalidraw-box:latest

Run locally

bun install
bun run dev

Open http://localhost:3000.

Test

bun run test
bun run typecheck

Build the image

docker build -t excali .
docker run --rm -p 127.0.0.1:3000:80 -v "$PWD/excali-box-data:/data" excali

This will make the data persistent in the excali-box-data folder in the current directory, with Caddy serving the browser build on localhost:3000