Latticehome

Lattice UI

Headless Roblox UI primitives for rbxts/react.

@lattice-ui · v0.8.1 · pre-1.0
Avatar · Switch · Slider · Dialog · Toast — one live scene. Toggle, drag, and send an invite.

Lattice UI provides behavior primitives for Roblox interfaces built with rbxts/react.

Use it for dialogs, popovers, menus, selects, and tabs where focus, layering, state, and dismissal need to stay predictable.

Behavior in, visuals yours.
<Dialog.Root>
<Dialog.Trigger asChild>
<textbutton Text="Invite player" />
</Dialog.Trigger>
<Dialog.Portal>
<Dialog.Overlay />
<Dialog.Content trapFocus restoreFocus>
{/* your visuals */}
</Dialog.Content>
</Dialog.Portal>
</Dialog.Root>
Headless primitives
Keep rendering and styling in the app while Lattice owns the interaction contract.
Focus and layers
Restore focus, manage stacked overlays, and keep dismissal behavior predictable.
App-owned visuals
Build dialogs, selects, menus, and guided surfaces without moving visual ownership into the primitive layer.

Components

20 primitives, one contract.

Every primitive shares the same composition model: compound parts, controlled or uncontrolled state, and asChild composition.

Guides

Learn the model once.

Pre-1.0, moving deliberately.

Packages version in lockstep. Most primitives are stable in direction; Select and Slider are feature-limited, and Popper is experimental. Read the stability tiers before depending on an API.

Package stability →