Knit UI
GitHub

Playground

Loading playground…

true
false
true
Playground
<Stepper
  active={1}
  size="md"
  orientation="horizontal"
  iconPosition="left"
  allowNextStepsSelect
  keepMounted={false}
  wrap
/>

Examples

Sizes

All seven sizes from xxs to xxl.

Loading example…

SizesSourceStorybook

Theme

Accent color follows Tamagui's theme prop.

Loading example…

ThemeSourceStorybook

Vertical

Vertical orientation — steps stack top to bottom with the connector on the left.

Loading example…

VerticalSourceStorybook

Shadows

Elevation shadow ladder applied to the Stepper frame via the inherited shadow prop.

Loading example…

ShadowsSourceStorybook

Controlled

Controlled stepper — the parent owns active and wires navigation buttons.

Loading example…

ControlledSourceStorybook

With Completed

Stepper.Completed is shown when active is past the last step index.

Loading example…

With CompletedSourceStorybook

Loading Step

A loading step shows a spinner inside the bubble instead of the step number.

Loading example…

Loading StepSourceStorybook

Custom Icons

Custom icons and completedIcon per step using unicode glyphs.

Loading example…

Custom IconsSourceStorybook

Keep Mounted

keepMounted preserves all step content in the DOM — useful for uncontrolled forms.

Loading example…

Keep MountedSourceStorybook

Timeline Vertical

Timeline variant — filled-dot bullets with each step's content inline (the former Timeline component), here vertical.

Loading example…

Timeline VerticalSourceStorybook

Timeline Horizontal

The timeline variant also lays out horizontally.

Loading example…

Timeline HorizontalSourceStorybook

Timeline Line Variants

Per-step lineVariant makes the connector solid, dashed, or dotted (timeline only).

Loading example…

Timeline Line VariantsSourceStorybook

Timeline Custom Bullets

Custom bullets — pass any node (icon, number, emoji) via a step's icon.

Loading example…

Timeline Custom BulletsSourceStorybook

Timeline Reverse Active

reverseActive counts completed steps from the end, so the last step completes first.

Loading example…

Timeline Reverse ActiveSourceStorybook

Styles

Per-slot styles targets individual parts — here the bubble, label and connector.

Loading example…

StylesSourceStorybook

Props

PropTypeDefaultDescription
active requirednumber1Index of the currently active step.
children requiredReactNode`Stepper.Step` / `Stepper.Completed` children.
allowNextStepsSelectboolean | undefinedtrueAllow clicking steps after the active one.
completedIconReactNode | StepFragmentComponentDefault completed icon for every step. Accepts a render fn `({ step }) => node`.
contentPaddingnumber | SpaceTokens | Animated.AnimatedNode | "safe" | null | undefined'$md'Padding around the active step's content.
disabled systemboolean | undefined
iconReactNode | StepFragmentComponentDefault icon for every step (overridable per step). Accepts a render fn `({ step }) => node`.
iconPositionStepperIconPosition | undefined
left · right
'left'Position of the step bubble relative to the label body.
iconSize"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefinedOverride the step-bubble diameter (independent of `size`).
keepMountedboolean | undefinedfalseKeep all step content mounted (hidden with display:none) to preserve state.
onStepClick((index: number) => void) | undefinedCalled with the 0-based index of a clicked, selectable step.
orientationStepperOrientation | undefined
horizontal · vertical
'horizontal'Layout axis of the step row.
progressIconReactNode | StepFragmentComponentDefault progress icon for every step. Accepts a render fn `({ step }) => node`.
radius systemstring | number | undefinedcircularBubble border radius.
reverseActiveboolean | undefinedfalseCount the active progression from the LAST step instead of the first, so the bottom/end step completes first (former Timeline `reverseActive`).
shadow system"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined
size system"xs" | "sm" | "md" | "lg" | "xl" | "xxs" | "xxl" | undefined
xxs · xs · sm · md · lg · xl · xxl
'md'Controls bubble diameter, connector thickness and font sizes.
styles systemSlotStyles<StepperStyles> | undefinedPer-slot style sugar — props spread onto every step's parts + the connector.
theme systemThemeName | null | undefined
unset · blue · red · green · yellow · pink · gray
Accent theme used for progress and completed steps.
variant systemStepperVariant | undefined
stepper · timeline
'stepper'Visual mode: numbered bubbles + content panel (stepper) or filled-dot bullets with inline content (timeline).
wrapboolean | undefinedtrueWrap the horizontal step row when it overflows.

Style slots

Every part of Stepper can be styled through the styles prop. Explicit props on the component always win over slot styles.

SlotUsage
bubblestyles={{ bubble: { … } }}
bubbleTextstyles={{ bubbleText: { … } }}
connectorstyles={{ connector: { … } }}
contentstyles={{ content: { … } }}
descriptionstyles={{ description: { … } }}
labelstyles={{ label: { … } }}
stepstyles={{ step: { … } }}
stepsstyles={{ steps: { … } }}
Accessibility & DOM props (2)
PropType
keyKey | null | undefined
refRef<TamaguiElement> | undefined

Plus 497 inherited style props from Box — the full Tamagui/React Native style surface, including token shorthands like p, mx, bg and c. See Tokens for the scales they accept, or the full list.