Mantine palette, themed
A 14-hue open-color palette, sizing tokens, and semantic colors. Read every value from the theme — light / dark switching is free.
guise brings Mantine's ergonomics to gpui — a themed palette, sizing tokens, and roughly sixty composable components, GPU-rendered at native speed.
guise-ui = { git = "https://github.com/wess/guise" }
The palette — 14 open-color hues, 10 shades each, read straight from the theme.
A complete component layer, not a widget grab-bag — themed, composable, and native from the first line.
A 14-hue open-color palette, sizing tokens, and semantic colors. Read every value from the theme — light / dark switching is free.
Chainable builders that read like Mantine: .variant(), .color(), .size(), .radius().
Inputs, overlays and data views are gpui entities that own their state and emit events you take with cx.subscribe.
A Flutter-style flexbox layer plus terse row! / col! / zstack! macros for dense layout.
A lightweight React-style layer: Signal, use_state, provide / use_context, and use_form validation.
Embed a real OS web view (WKWebView / WebView2 / WebKitGTK) via wry, positioned inside normal guise layout.
Controlled widgets take a value and a handler. Stateful ones are entities you create with cx.new and subscribe to. Same mental model — native rendering underneath.
Read the component model →cx.subscribe, redraws via cx.notify// a stateful entity: owns its buffer, emits events
let name = cx.new(|cx| {
TextInput::new(cx)
.label("Name")
.placeholder("guise-app")
});
cx.subscribe(&name, |this, _input, e: &TextInputEvent, cx| {
if let TextInputEvent::Change(value) = e {
this.name = value.clone();
cx.notify();
}
})
.detach();
From buttons to a native web view — a selection of the families below.
Layout, motion and state — the parts of an app a component grab-bag leaves out.
Add the dependency and open your first window.
guise-ui = { git = "https://github.com/wess/guise" }