fret-ui 0.1.0

Mechanism-layer UI engine for Fret with tree, layout, focus, routing, and interaction contracts.
Documentation

fret-ui

fret-ui is the UI runtime contract layer for the Fret workspace.

It provides the mechanisms that higher layers build on:

  • Declarative element authoring + reconciliation (GPUI-style direction),
  • Layout + hit testing + paint orchestration (runner/host driven),
  • Cross-frame state storage and stable identity,
  • Focus/input routing surfaces and debug snapshots.

This crate is not intended to be a policy-heavy component library. Radix/shadcn-style interaction policies (dismiss, focus trap/restore, hover intent, default sizing/padding conventions, etc.) belong in the ecosystem layer (fret-ui-kit, fret-ui-shadcn) rather than here.

Module ownership map

The crate is large; treat it as a set of subsystems:

  • src/declarative/: frame-to-frame element tree building and reconciliation.
  • src/tree/: runtime tree representation, layout/paint passes, hit testing, and debug stats.
  • src/elements/: builder helpers and element runtime utilities.
  • src/element.rs: element property types (including layout/text/scroll props) and runtime-facing contracts.
  • src/layout/: layout engine glue (constraints, pass, engine).
  • src/text/: text input/editing surfaces (IME integration lives here, policy lives above).
  • src/scroll/ + src/virtual_list/: imperative scroll handles and the virtual list virtualizer.
  • src/theme/: token/config/theme snapshot plumbing (policy lives above).
  • src/overlay_placement/: placement helpers for overlay/popup positioning (arbitration policy is tracked separately in workstreams).
  • Crate-root modules: thin glue/utility pieces that have not yet been regrouped.

Public surface

Prefer importing from fret_ui’s re-exports in src/lib.rs (e.g. UiTree, UiHost, ScrollHandle, TextInputStyle). Internal modules are being regrouped as part of the bottom-up fearless refactor; relying on deep paths makes churn more likely.

Local refactor gates

  • Fastest loop: cargo nextest run -p fret-ui
  • Formatting: cargo fmt