SEMANTIC UI FOR RUST
One language. Every interface.
Learn the model behind Glory: explicit semantics, fine-grained state, and rendering hosts you can replace.
No UI DSL
·
No virtual DOM
·
Pure Rust
Build beyond the browser.
DESIGNED TO BE UNDERSTOOD
A UI framework without the hidden machinery.
Glory keeps the application model explicit: semantic values describe the interface, Owners control lifetime, and hosts decide how those semantics become pixels.
✓
Describe interfaces with handwritten Rust builders—not a template compiler.
✓
Build once, then send typed patches instead of diffing virtual trees.
✓
Keep state and subscriptions attached to an explicit Owner lifetime.
✓
Share widgets across Web, SSR, and native rendering hosts.
✓
Inspect the same semantic model in headless tests before opening a window.
STATE TO SEMANTICS
Small pieces. Precise updates.
A Cage owns mutable state. A derived label tracks it. The button emits a semantic Activate event. No component-wide rerender is required.
counter.rs
use glory::prelude::*;
pub fn counter() -> impl Widget {
widget(|scope| {
let count = scope.cage(0_i32);
let label = count.map(|n| format!("Clicks: {n}"));
row().fill((
text().content(label),
button()
.label("Add one")
.on(activate, move |_| {
count.revise(|n| *n += 1)
}),
))
.show_in(scope)
})
}●
●
●
localhost:8796
LIVE GLORY WIDGET
A small, real counter
Built with Glory's own button, text, view, and reactive Cage.
Clicks: 0
The same Widget implementation works in a headless test, a browser host, an SSR snapshot, or a native window.
RENDERING IS A HOST DECISION
One widget tree. Multiple hosts.
Glory separates what your interface means from how a platform presents it. Choose static HTML, hydrated WebAssembly, or native Blitz rendering without rewriting the widget.
hydrate.rs
// Serialize a versioned semantic snapshot.
let snapshot = glory::ssr::snapshot(counter())?;
let html = format!("<main id=\"app\">{}</main>", snapshot.html);
// Adopt that exact HTML in the browser.
let app = glory::web::hydrate(root, counter())?;
// Keep the WebApp alive.THE HOST MATRIX
01
Web
WASM DOM rendering, input, geometry, and scrolling.
02
SSR
Static documents, snapshots, resources, and optional streaming.
03
Native
Blitz layout, desktop windows, and accessibility bridges.
LEARN THE FRAMEWORK
Understand it. Then build with it.
Follow the guides from first principles to a working cross-platform application. Each page includes concrete APIs, code, and current boundaries.
Architecture
Trace a Cage revision through derived values, semantic patches, and a rendering host.
Read the design →Custom widgets
Implement the Widget trait, compose children, handle events, and own state correctly.
Write a widget →SSR & hydration
Choose between static HTML, snapshots, resource transfer, and streaming.
Render on the server →Cross-platform
Share one widget across Web, SSR, and Blitz while respecting host capabilities.
Compare hosts →