Following my post about Rivet (native SwiftUI / WinUI 3 / GTK4 hosts), this is its sibling: Glaze (MIT, on the package catalog as glaze) is for the other trade-off — one web UI codebase, Racket for all the logic, shipped as a real desktop app.
Glaze serves your frontend from a local Racket server and displays it inside a native desktop window backed by the OS WebView: WebView2 on Windows, WKWebView on macOS, WebKitGTK on Linux. No Rust toolchain, no bundled Chromium — the Racket backend binds the system WebView through pure FFI, so binaries stay small and raco pkg install glaze is all you need.
Quick start
raco pkg install --auto glaze
raco glaze init myapp
cd myapp && racket main.rkt
A native window opens hosting your frontend. Any web stack works — plain HTML/CSS/JS, Tailwind, Svelte, React.
What's in the box
- JSON API bridge — the page calls Racket with plain
fetch("/api/...") - Capability-gated routes — default-deny permissions with path and command scopes; the frontend only gets what you grant
- Scoped plugins: filesystem, shell (bounded output + timeouts), persistent JSON stores, SQLite, HTTP client, clipboard, notifications, file/folder/message dialogs
- Global shortcuts, structured logging with SSE push, tray support
- Agent-friendly verification built in:
webview-title/webview-url/webview-capture!(screenshot) on all three backends, so a coding agent can visually verify the app it's building - GUI-first, fail fast: if the required WebView runtime is missing, startup fails with actionable install/repair guidance — Glaze never silently turns your desktop app into a browser tab
All three WebView backends run the same real-window CI end-to-end tests (open, load, capture, navigate, close).
Shipped on Glaze
- HackDigest — Hacker News with built-in translation and AI digests, desktop app (React + TypeScript frontend)
Honest gaps
- The frontend↔backend channel currently runs over loopback HTTP/SSE rather than a native WebView message transport — it works and is capability-gated, but a native transport is on the roadmap.
- Linux needs a desktop session or Xvfb (fine for CI, worth knowing).
- If you want per-platform native widgets instead of one web UI, that's Rivet's job (see the sibling thread).
Try it
Docs are installed with the package (raco docs glaze), and the README walks through the first app in about ten lines of Racket.
Current release: v0.15.0. Issues and feedback welcome — issue tracker or this thread. If you build something with it, I'd genuinely love to see it.