Onboarding checklist

Guide a new workspace through setup, one step at a time.

pnpm dlx shadcn@latest add @uiarc/onboarding-checklist
Live · keyboard ready

Set up Northwind

1 of 4 done

  • Priya and Jonas are waiting.

  • A one-time getting-started card with three to eight loosely ordered steps.
  • Setup steps that run async actions, like Connect GitHub, and check off when they resolve.
  • Checklists people can hide and come back to, with state persisted through callbacks.
  • Use stepper when the order is strict and steps map to screens.
  • Use multi-step-form when every step collects form input.
  • Use accordion for plain collapsible content without completion.

Installation

Add Onboarding checklist with the shadcn CLI, or copy the source by hand.

pnpm dlx shadcn@latest add @uiarc/onboarding-checklist

Adds the component and its local dependencies, and installs motion, lucide-react. First time? Add the @uiarc registry to components.json, or use the full URL:

example.tsx
import { OnboardingChecklist } from "@/components/arc/onboarding-checklist/onboarding-checklist"; export function GettingStarted() {  return (    <OnboardingChecklist      title="Set up your workspace"      defaultCompleted={savedIds}      onCompletedChange={saveIds}      steps={[        { id: "invite", title: "Invite your team", actionLabel: "Invite", onAction: openInvite },        { id: "connect", title: "Connect GitHub", description: "Sync issues and PRs.", actionLabel: "Connect", onAction: connectGithub },        { id: "profile", title: "Add a profile photo" },      ]}    />  );}

OnboardingChecklist

A getting-started card with a progress ring, expandable steps with actions, and a folding completed group.

PropTypeDefaultDescription
titleRequiredstring–Card title while steps remain.
stepsRequired{ id: string; title: string; description?: string; actionLabel?: string; onAction?: () => void | Promise<void> }[]–Steps in order. onAction resolving checks the step; throwing an Error keeps it open and shows the message.
doneTitlestring"You’re all set"Title once every step is done.
defaultCompletedstring[][]Step ids that start completed.
onCompletedChange(completed: string[]) => void–Called with completed ids in step order whenever they change.
defaultHiddenbooleanfalseStarts with the body collapsed.
onHiddenChange(hidden: boolean) => void–Called when the Hide or Show toggle is used.
classNamestring–Class on the card.
ArrowDownorArrowUp
Moves between step titles.
HomeorEnd
Jumps to the first or last step title.
EnterorSpace
Expands a step, toggles its checkbox, or runs its action.
  • Each step has a role="checkbox" button with aria-checked, and a title button with aria-expanded controlling a labelled region.
  • The ring is role="progressbar" with aria-valuetext like "3 of 5 steps done"; progress and errors are announced via role="status" and role="alert".
  • When a focused step finishes, focus moves to the next step's action; leaving rows and the hidden body are inert.
  • Checks fill from the center and draw their tick; after 720ms the finished step folds into the completed group while the ring and count roll forward.
  • Rows and panels open and close on a non-overshooting spring; the title morphs to doneTitle and a tick draws in the ring at 100%.
  • Reduced motion removes height and scale animation and keeps short fades.
  • The card is a container query context; below 380px the Hide button collapses to an icon.
  • Step titles and checkboxes keep 40px targets, and the completed group toggle is 44px tall.
  • Steps are not virtualized; the component is built for short lists.
  • Each finished step waits 720ms on a timer before folding into the completed group.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Use for a short, one-time setup of three to eight loosely ordered steps. Use stepper when the order is strict and steps map to screens.
  • Make onAction async and throw an Error with a readable message on failure. Persist onCompletedChange and onHiddenChange to restore state via the default props.

The full library index for assistants is at /llms.txt.