The notebook for developers and DevOps, on macOS. Ledge runs code and commands straight from your Markdown: write a note, then run a fenced block in place and watch its output stream in beneath it.
Built with Electrobun: a Bun main process drives the shell over a bun:ffi PTY, and the editor is CodeMirror in a system WebView, wired to Bun over a typed RPC channel.
- Bun main process (
src/bun): the FFI PTY (pty.ts), OSC 133 marker parser (markers.ts), and the window + RPC wiring (index.ts). - View (
src/mainview): React + Tailwind + shadcn/ui chrome, with the CodeMirror editor (editor/) mounted inside it. Vite builds it todist/. - Shared (
src/shared): the typed RPC contract between the two.
bun install
bun run start # vite build, then launch the app (electrobun dev)
bun run dev:hmr # same, with a Vite dev server for hot module reload
bun run build # production buildRequires Bun and Xcode: every build compiles the PTY
trampolines against the macOS SDK (scripts/build-native.ts) and the app icon
with actool. The first electrobun dev downloads the Electrobun core
(~27 MB) and assembles a real .app under build/.
See CONTRIBUTING.md. The normative standards live in
docs/contributor/: architecture,
interactions,
locking, and
testing. The end-user manual (the same pages
the app ships as its built-in docs) lives in docs/user/.
Apache License 2.0. Copyright 2026 Dan Stevens.