How snow-ui-rs/snow-ui works
Snow UI is a pure-Rust UI framework for building a virtual object tree and presenting it through native or web backends. Its main workflow is: define a World from elements, convert that tree into runtime objects, then launch and render it. Widgets provide layout, input, forms and clocks; shared state and message handlers support interaction and updates. The repository also contains procedural macros for composing elements and objects, plus a separate component-oriented backend. Edges follow the README or indexed source references; unsampled implementation details are not inferred.
Main entry points: object.rs Object tree · elements.rs Element types · src/lib.rs Procedural macros · src/lib.rs Launch driver
Components 25
UI composition
- World
crates/core/src/object.rs - Object tree
crates/core/src/object.rs - Element types
crates/core/src/elements.rs
Runtime and rendering
- Component backend
crates/core/src/backend.rs - Launch driver
crates/core/src/lib.rs - Async runtime
crates/core/src/runtime.rs - Web backend
crates/core/src/web.rs
Widgets
- Layout widgets
crates/core/src/widgets/board.rs - Button
crates/core/src/widgets/button.rs - Form
crates/core/src/widgets/form.rs - Switch
crates/core/src/widgets/switch.rs - Text clock
crates/core/src/widgets/text_clock.rs - Text input
crates/core/src/widgets/text_input.rs - Girl element
crates/core/src/widgets/girl.rs
State and interaction
- Shared state
crates/core/src/state.rs - Event bus
crates/core/src/event_bus.rs - Message handlers
crates/core/src/handler.rs - Server API
crates/core/src/server_api.rs
Macros and API
- Procedural macros
crates/macros/src/lib.rs - Element macro
crates/macros/src/element_macro.rs - Object macro
crates/macros/src/obj_macro.rs - List macro
crates/macros/src/list_macro.rs - IntoObject derive
crates/macros/src/derive_into_object.rs
Other components
- UI developer
- Rendered UI
Connections 35
- UI developer → World: defines
README.md - UI developer → Procedural macros: uses
README.md - World → Object tree: contains
README.md - Object tree → Element types: uses
crates/core/src/object.rs - World → Launch driver: launches
README.md - Launch driver → Object tree: builds widgets
crates/core/src/lib.rs - Launch driver → Async runtime: schedules
crates/core/src/lib.rs - Launch driver → Rendered UI: renders
crates/core/src/lib.rs - Web backend → Object tree: renders
crates/core/src/web.rs - Web backend → Async runtime: uses
crates/core/src/web.rs - Component backend → Object tree: converts
crates/core/src/backend.rs - Component backend → Shared state: updates
crates/core/src/backend.rs - Object tree → Layout widgets: builds
crates/core/src/object.rs - Object tree → Form: builds
crates/core/src/object.rs - Object tree → Switch: builds
crates/core/src/object.rs - Object tree → Text clock: builds
crates/core/src/object.rs - Object tree → Text input: builds
crates/core/src/object.rs - Element types → Layout widgets: exports
crates/core/src/elements.rs - Element types → Button: exports
crates/core/src/elements.rs - Element types → Form: exports
crates/core/src/elements.rs - Element types → Switch: exports
crates/core/src/elements.rs - Element types → Text clock: exports
crates/core/src/elements.rs - Element types → Text input: exports
crates/core/src/elements.rs - Element types → Girl element: exports
crates/core/src/elements.rs - Shared state → Element types: creates text
crates/core/src/state.rs - Event bus → Async runtime: uses
crates/core/src/event_bus.rs - Event bus → Web backend: supports
crates/core/src/event_bus.rs - Message handlers → Event bus: registers handlers
- Form → Server API: submits data
README.md - Procedural macros → Element macro: dispatches
crates/macros/src/lib.rs - Procedural macros → Object macro: dispatches
crates/macros/src/lib.rs - Procedural macros → List macro: dispatches
crates/macros/src/lib.rs - Procedural macros → IntoObject derive: derives
crates/macros/src/lib.rs - Element macro → IntoObject derive: generates conversion
crates/macros/src/element_macro.rs - Object macro → Object tree: constructs