Components

Components

Motif ships a built-in set of primitives — the same components every motif app reaches for first. They render on web and native through one import site, share the same style props, and read the same tokens.

Updated 3 days agoEdit on GitHubWeb & native

How the families split

Components are grouped by what they do, not where they sit in a layout.

  • Layout — Box, Stack, Container, Grid, and the rest of the spatial primitives. Box is the atom every other primitive composes from.
  • Typography — Text, Heading, Paragraph, plus inline atoms like Code and Kbd. Sentence-level typography lives here.
  • Forms — input controls, the Field wrapper that pairs them with a label and help text, and Fieldset for grouped inputs.
  • Media — Avatar, Icon, Image, Svg, Link. Anything that puts a visual object on the page.
  • Interactive — Pressable, Button, IconButton. The keyboard- and pointer-driven affordances.
  • Scroll — ScrollView, Sticky, VirtualList. Scrolling regions and position-tracking elements.
  • A11y — FocusScope, LiveRegion, VisuallyHidden. The accessibility-only primitives that have no visual surface of their own.
  • Control flow — Show and Hide. Declarative branching at the JSX layer.
  • Utilities — Overlay and Portal. The render-elsewhere primitives.

The same component on web and native

Every primitive on this list works on both platforms. The render path differs — Box becomes a div on web and a View on native — and a handful of components reach across the divide with different implementations (SafeArea, ScrollView, VirtualList). Their props match anyway, so cross-platform code stays portable.

On web …; on native …: pages flag the divergence where it matters in a Cross-platform notes section.

Beyond the primitives

The primitives stop at the spatial and visual layer. Behavioural components — Dialog, Menu, Combobox, the rest — live in @usemotif/headless. Headless ships in its own package because most apps want to compose their own surfaces against a behaviour contract, not inherit a styled one.