03 / 07 · 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, synshell, 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.
- The syngui CLI, in the spirit of flutter build and cargo tauri: builds and runs apps for Linux x86_64 and aarch64, Android (APK) and iOS (IPA built on Linux, no Xcode), makes Arch and AUR packages (-git and -bin), and syngui doctor checks the toolchain.
Install
cargo build -p syngui
cargo run -p widget_gallery_mss # every widget + MSS styling
cargo install --path syngui-cli --profile fast-release
syngui doctor # NDK/SDK, JDK, iOS SDK, aarch64 sysroot
syngui run -d android # APK for the device, install, launch, logcat
syngui package -f aur # <name>-git and <name>-bin PKGBUILDsVideo 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
Measured, not promised
How it is tested
The performance numbers were measured on my machine, and every app I have built since — synthos, synshell, linux-legion, ardor-mouse — runs on this framework, so its bugs get found by real use.
Every number here is measured on my own hardware. github.com/VitaminDB/syngui