Bezel binds Qt Widgets to Racket through a small, validated C ABI. Write your application in Racket, style it with QSS, and ship self-contained packages on Windows, macOS, and Linux.
Windows, buttons, inputs, lists, tables, trees, tabs, menus, dialogs, layouts — professional-tools UI on Qt Widgets.
Qt's CSS-like styling system on every window — make it look like your product, not like a demo.
Public widget calls from any Racket thread marshal to the GUI thread; timers marshal back automatically.
widget-grab-png renders real widgets to PNG; CI runs headlessly with Qt's offscreen backend.
libbezel, the Qt runtime, and plugins are embedded — end users install with raco pkg install, nothing else.
raco bezel package produces distributable app folders, installers, signing helpers, and silent self-update.
A stable C ABI sits under Qt Widgets; the Racket layer on top handles GUI-thread marshaling, signals, lifetime rules, and generated bindings.
| Bezel | racket/gui | Web-based shells | |
|---|---|---|---|
| UI toolkit | Qt Widgets (native) | custom-drawn widgets | HTML in a WebView |
| Styling | QSS | limited, hard to modernize | full CSS |
| App language | Racket | Racket | Rust or JS/Node |
| Native look & feel | real OS widgets | custom look | DOM widgets |
| User installation | runtime bundled, nothing extra | Racket distribution | WebView or bundled Chromium |