Butter gives you a native window with a webview and a direct IPC bridge between your TypeScript backend and your frontend — no bundled browser engine, no background servers. Write native C, Moxy, Rust, or Zig and call it straight from TypeScript. Powered by Bun.
on("greet", (name) => `Hello, ${name}!`)await butter.invoke("greet", "World")const math = await native("math"); math.fibonacci(20)
→ 6765, computed natively
No bundled Chromium, no Node, no Rust required. Just Bun, the OS webview, and your TypeScript.
Uses the OS webview — WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows. No bundled browser engine.
A direct bridge between host and webview over a 128KB shared-memory ring buffer. Length-prefixed frames, no pipes.
Your backend runs in Bun, your frontend in the webview — one language end to end, with typed IPC if you want it.
Drop a .c, .mxy, .rs, or .zig file into src/native/ — Butter auto-compiles it and generates typed FFI bindings.
butter compile embeds every asset and the shim into one ~60MB executable. No installer plumbing required.
butter package produces a DMG on macOS, an AppImage on Linux, and an NSIS setup.exe on Windows.
Dialogs, tray, notifications, clipboard, global shortcuts, SQLite, KV store, sidecars, auto-update, and more.
Lock down what the webview can invoke with a flat allowlist or grouped capabilities, plus a configurable CSP.
butter dev opens a native window with DevTools, recompiles native code, and reloads on file changes.
A Bun process runs your host TypeScript; a native shim owns the window and webview. They talk over shared memory — no web server, no file:// CORS.
Your backend TypeScript runs in Bun. Register handlers with on(), push events with send().
A tiny native shim opens an OS webview and serves your assets over the butter:// protocol.
Two ring buffers carry length-prefixed JSON frames between host and webview at 60 Hz.
C / Moxy / Rust / Zig sources auto-compile to a shared library and bind directly via FFI.
butter:// custom protocol, sidestepping file:// CORS.butter compile strips symbols and embeds everything into one executable.Requires Bun v1.2+. Install the CLI, scaffold a project, and run a native dev window.
# 1. install the CLI (Bun v1.2+) bun add -g butterframework # or: brew tap wess/packages && brew install butter # 2. create a new project butter init myapp cd myapp bun install # 3. develop in a native window (hot reload + DevTools) bun run dev # 4. ship a single-file binary, then a DMG / AppImage / installer bun run build butter package
Templates: vanilla (default), react, svelte, vue —
e.g. butter init myapp --template react. Verify your toolchain with butter doctor.
Open source under MIT. TypeScript on both sides, native performance where you need it, zero configuration.