03 / 06 · Rust · wgpu 28 · WGSL
syngui
A retained-mode GUI framework for Rust — GPU-rendered through wgpu, styled with CSS-like stylesheets, wired with reactive signals.
- Licence
- MIT OR Apache-2.0
- Platform
- Linux · Windows · macOS · Android · Web
- Packages
- Cargo
- Status
- Young, API not stable

What it is
Most Rust GUI libraries make you choose: immediate-mode simplicity (egui) or a retained tree with typed styling (iced), a custom DSL (Slint) or web tech (Tauri, Dioxus). syngui takes a different combination — real stylesheets with a cascade, SolidJS-style fine-grained reactivity, a retained widget tree, and a large set of widgets you would normally have to vendor yourself.
It is used in production by its author: synthos, syndesktop, linux-legion and ardor-mouse all run on it, so its bugs get found by real use.
Key features
- MSS stylesheets: variables and var(), type / class / compound / descendant selectors, :hover, :active, :focus, :checked, :disabled, nesting, transitions, @keyframes, inheritance, plus window-state pseudo-classes.
- Fine-grained reactivity: use_signal, use_effect, create_memo and use_context with automatic dependency tracking; subtrees rebuild granularly.
- Retained-mode architecture: immutable Widget → stateful Element, diffed via can_update(), with dirty-flag propagation.
- 110+ widgets: line / bar / pie / radar / gauge charts, a tile map, an embedded terminal (PTY + VT100), Markdown with syntax highlighting, a rope-backed code editor, an audio-clocked video player with hardware decode, a devtools inspector.
- DocumentEditor: a Notion-style block editor where Markdown is both the model and the file format, with flow or free-canvas layout, vector shapes and live embeds of your own widgets.
- 3D transforms from stylesheets, particle emitters with 15 presets and a macOS-dock-style fisheye row.
- Measured hot paths: VirtualList, keyed children, a cached cascade and rendering batched into a handful of draw calls in one pass.
- wgpu 28 (Vulkan / Metal / DX12 / GL / WebGPU) with hand-written WGSL shaders.
- Linux on X11 and Wayland (with its own drag-and-drop), Windows, macOS, Android and Android TV, WebAssembly.
Install
cargo build -p syngui
cargo test -p syngui
cargo run -p widget_gallery_mss # every widget + MSS stylingVideo playback sits behind the optional ffmpeg feature and needs FFmpeg 7+ development libraries; without it nothing links against FFmpeg. The widget gallery also builds to WebAssembly.
Requirements and limitations
- Text shaping is simple: Latin, Cyrillic and CJK render correctly, but there is no kerning, no ligatures, no GSUB/GPOS, no bidirectional text and no complex scripts (Arabic, Devanagari).
- Colour emoji are drawn without a shaper: ZWJ sequences and VS16 can render as separate glyphs.
- Accessibility (AccessKit) exists behind a non-default feature and is not continuously tested.
- No CI yet: Windows, macOS and Android builds are verified by hand.
- The API is not stable; expect breaking changes.
Screenshots
- (open full size)

Built on syngui: DocumentEditor pages and kanban boards in synthos - (open full size)

Built on syngui: the embedded terminal running btop inside synthos - (open full size)

Built on syngui: line, bar, pie and radar charts - (open full size)

Built on syngui: the live keyboard map in linux-legion
Vibe-coded with Claude Code
How it is built
The model writes the code, the tests and most of the documentation. The performance numbers were measured on my machine, and every app I have built since — synthos, syndesktop, linux-legion, ardor-mouse — runs on this framework, so its bugs get found by real use.