# snow-ui-rs/snow-ui architecture

> Architecture diagram of the GitHub repository snow-ui-rs/snow-ui, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/snow-ui-rs/snow-ui
- Repository: https://github.com/snow-ui-rs/snow-ui

## Overview

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: [`crates/core/src/object.rs`](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/object.rs) (Object tree), [`crates/core/src/elements.rs`](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/elements.rs) (Element types), [`crates/macros/src/lib.rs`](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/lib.rs) (Procedural macros), [`crates/core/src/lib.rs`](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/lib.rs) (Launch driver)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_composition["UI composition"]
  node_world["World<br/>[object.rs]"]
  node_object_tree["Object tree<br/>[object.rs]"]
  node_elements["Element types<br/>[elements.rs]"]
end

subgraph group_rendering["Runtime and rendering"]
  node_backend["Component backend<br/>[backend.rs]"]
  node_launch["Launch driver<br/>[lib.rs]"]
  node_runtime["Async runtime<br/>[runtime.rs]"]
  node_web["Web backend<br/>[web.rs]"]
end

subgraph group_widgets["Widgets"]
  node_layout_widgets["Layout widgets<br/>[board.rs]"]
  node_button["Button<br/>[button.rs]"]
  node_form["Form<br/>[form.rs]"]
  node_switch["Switch<br/>[switch.rs]"]
  node_text_clock["Text clock<br/>[text_clock.rs]"]
  node_text_input["Text input<br/>[text_input.rs]"]
  node_girl["Girl element<br/>[girl.rs]"]
end

subgraph group_interaction["State and interaction"]
  node_state[("Shared state<br/>[state.rs]")]
  node_event_bus["Event bus<br/>[event_bus.rs]"]
  node_handlers["Message handlers<br/>[handler.rs]"]
  node_server_api["Server API<br/>[server_api.rs]"]
end

subgraph group_extensions["Macros and API"]
  node_macros["Procedural macros<br/>[lib.rs]"]
  node_element_macro["Element macro<br/>[element_macro.rs]"]
  node_object_macro["Object macro<br/>[obj_macro.rs]"]
  node_list_macro["List macro<br/>[list_macro.rs]"]
  node_into_object["IntoObject derive"]
end

node_developer(("UI developer"))
node_screen(("Rendered UI"))

node_developer -->|"defines"| node_world
node_developer -->|"uses"| node_macros
node_world -->|"contains"| node_object_tree
node_object_tree -->|"uses"| node_elements
node_world -->|"launches"| node_launch
node_launch -->|"builds widgets"| node_object_tree
node_launch -->|"schedules"| node_runtime
node_launch -->|"renders"| node_screen
node_web -->|"renders"| node_object_tree
node_web -->|"uses"| node_runtime
node_backend -->|"converts"| node_object_tree
node_backend -->|"updates"| node_state
node_object_tree -->|"builds"| node_layout_widgets
node_object_tree -->|"builds"| node_form
node_object_tree -->|"builds"| node_switch
node_object_tree -->|"builds"| node_text_clock
node_object_tree -->|"builds"| node_text_input
node_elements -->|"exports"| node_layout_widgets
node_elements -->|"exports"| node_button
node_elements -->|"exports"| node_form
node_elements -->|"exports"| node_switch
node_elements -->|"exports"| node_text_clock
node_elements -->|"exports"| node_text_input
node_elements -->|"exports"| node_girl
node_state -->|"creates text"| node_elements
node_event_bus -->|"uses"| node_runtime
node_event_bus -->|"supports"| node_web
node_handlers -.->|"registers handlers"| node_event_bus
node_form -.->|"submits data"| node_server_api
node_macros -->|"dispatches"| node_element_macro
node_macros -->|"dispatches"| node_object_macro
node_macros -->|"dispatches"| node_list_macro
node_macros -->|"derives"| node_into_object
node_element_macro -->|"generates conversion"| node_into_object
node_object_macro -.->|"constructs"| node_object_tree

click node_world "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/object.rs"
click node_object_tree "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/object.rs"
click node_elements "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/elements.rs"
click node_backend "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/backend.rs"
click node_launch "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/lib.rs"
click node_runtime "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/runtime.rs"
click node_web "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/web.rs"
click node_layout_widgets "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/board.rs"
click node_button "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/button.rs"
click node_form "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/form.rs"
click node_switch "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/switch.rs"
click node_text_clock "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/text_clock.rs"
click node_text_input "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/text_input.rs"
click node_girl "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/girl.rs"
click node_state "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/state.rs"
click node_event_bus "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/event_bus.rs"
click node_handlers "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/handler.rs"
click node_server_api "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/server_api.rs"
click node_macros "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/lib.rs"
click node_element_macro "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/element_macro.rs"
click node_object_macro "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/obj_macro.rs"
click node_list_macro "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/list_macro.rs"
click node_into_object "https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/derive_into_object.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_world,node_object_tree,node_elements,node_developer,node_screen toneBlue
class node_backend,node_launch,node_runtime,node_web toneAmber
class node_layout_widgets,node_button,node_form,node_switch,node_text_clock,node_text_input,node_girl toneMint
class node_state,node_event_bus,node_handlers,node_server_api toneRose
class node_macros,node_element_macro,node_object_macro,node_list_macro,node_into_object toneIndigo
```

## Components

### UI composition

- [World](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/object.rs): `crates/core/src/object.rs`
- [Object tree](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/object.rs): `crates/core/src/object.rs`
- [Element types](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/elements.rs): `crates/core/src/elements.rs`

### Runtime and rendering

- [Component backend](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/backend.rs): `crates/core/src/backend.rs`
- [Launch driver](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/lib.rs): `crates/core/src/lib.rs`
- [Async runtime](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/runtime.rs): `crates/core/src/runtime.rs`
- [Web backend](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/web.rs): `crates/core/src/web.rs`

### Widgets

- [Layout widgets](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/board.rs): `crates/core/src/widgets/board.rs`
- [Button](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/button.rs): `crates/core/src/widgets/button.rs`
- [Form](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/form.rs): `crates/core/src/widgets/form.rs`
- [Switch](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/switch.rs): `crates/core/src/widgets/switch.rs`
- [Text clock](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/text_clock.rs): `crates/core/src/widgets/text_clock.rs`
- [Text input](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/text_input.rs): `crates/core/src/widgets/text_input.rs`
- [Girl element](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/widgets/girl.rs): `crates/core/src/widgets/girl.rs`

### State and interaction

- [Shared state](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/state.rs): `crates/core/src/state.rs`
- [Event bus](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/event_bus.rs): `crates/core/src/event_bus.rs`
- [Message handlers](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/handler.rs): `crates/core/src/handler.rs`
- [Server API](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/core/src/server_api.rs): `crates/core/src/server_api.rs`

### Macros and API

- [Procedural macros](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/lib.rs): `crates/macros/src/lib.rs`
- [Element macro](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/element_macro.rs): `crates/macros/src/element_macro.rs`
- [Object macro](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/obj_macro.rs): `crates/macros/src/obj_macro.rs`
- [List macro](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/list_macro.rs): `crates/macros/src/list_macro.rs`
- [IntoObject derive](https://github.com/snow-ui-rs/snow-ui/blob/main/crates/macros/src/derive_into_object.rs): `crates/macros/src/derive_into_object.rs`

### Other components

- **UI developer**
- **Rendered UI**

## Connections

- UI developer → World: defines (evidence: `README.md`)
- UI developer → Procedural macros: uses (evidence: `README.md`)
- World → Object tree: contains (evidence: `README.md`)
- Object tree → Element types: uses (evidence: `crates/core/src/object.rs`)
- World → Launch driver: launches (evidence: `README.md`)
- Launch driver → Object tree: builds widgets (evidence: `crates/core/src/lib.rs`)
- Launch driver → Async runtime: schedules (evidence: `crates/core/src/lib.rs`)
- Launch driver → Rendered UI: renders (evidence: `crates/core/src/lib.rs`)
- Web backend → Object tree: renders (evidence: `crates/core/src/web.rs`)
- Web backend → Async runtime: uses (evidence: `crates/core/src/web.rs`)
- Component backend → Object tree: converts (evidence: `crates/core/src/backend.rs`)
- Component backend → Shared state: updates (evidence: `crates/core/src/backend.rs`)
- Object tree → Layout widgets: builds (evidence: `crates/core/src/object.rs`)
- Object tree → Form: builds (evidence: `crates/core/src/object.rs`)
- Object tree → Switch: builds (evidence: `crates/core/src/object.rs`)
- Object tree → Text clock: builds (evidence: `crates/core/src/object.rs`)
- Object tree → Text input: builds (evidence: `crates/core/src/object.rs`)
- Element types → Layout widgets: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Button: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Form: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Switch: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Text clock: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Text input: exports (evidence: `crates/core/src/elements.rs`)
- Element types → Girl element: exports (evidence: `crates/core/src/elements.rs`)
- Shared state → Element types: creates text (evidence: `crates/core/src/state.rs`)
- Event bus → Async runtime: uses (evidence: `crates/core/src/event_bus.rs`)
- Event bus → Web backend: supports (evidence: `crates/core/src/event_bus.rs`)
- Message handlers → Event bus: registers handlers
- Form → Server API: submits data (evidence: `README.md`)
- Procedural macros → Element macro: dispatches (evidence: `crates/macros/src/lib.rs`)
- Procedural macros → Object macro: dispatches (evidence: `crates/macros/src/lib.rs`)
- Procedural macros → List macro: dispatches (evidence: `crates/macros/src/lib.rs`)
- Procedural macros → IntoObject derive: derives (evidence: `crates/macros/src/lib.rs`)
- Element macro → IntoObject derive: generates conversion (evidence: `crates/macros/src/element_macro.rs`)
- Object macro → Object tree: constructs
