---
name: onboardjs-react
description: |
Integrate OnboardJS into React projects for building user onboarding flows. Use when:
(1) Setting up OnboardJS in a React/Next.js project
(2) Creating multi-step onboarding, wizards, or guided flows
(3) Implementing conditional navigation, data persistence, or step validation
(4) Working with OnboardingProvider, useOnboarding hook, or step components
Triggers: "onboarding", "onboardjs", "wizard flow", "user onboarding", "guided tour", "multi-step form"
---
# OnboardJS React Integration
OnboardJS is a headless library for building user onboarding experiences. You control the UI; OnboardJS handles flow logic, state, persistence, and navigation.
## Before Starting
**1. Verify React project** - Check for `package.json` with React dependencies. If not a React project, inform the user.
**2. Detect package manager** - Check for lock files to determine the correct install command:
| Lock File | Package Manager | Install Command |
|-----------|-----------------|-----------------|
| `pnpm-lock.yaml` | pnpm | `pnpm add @onboardjs/core @onboardjs/react` |
| `yarn.lock` | yarn | `yarn add @onboardjs/core @onboardjs/react` |
| `bun.lockb` | bun | `bun add @onboardjs/core @onboardjs/react` |
| `package-lock.json` or none | npm | `npm install @onboardjs/core @onboardjs/react` |
**3. Detect Next.js** - Check for `next.config.js`, `next.config.mjs`, or `next` in dependencies. If Next.js, see [Next.js Setup](#nextjs-setup) section.
## Installation
```bash
# npm
npm install @onboardjs/core @onboardjs/react
# pnpm
pnpm add @onboardjs/core @onboardjs/react
# yarn
yarn add @onboardjs/core @onboardjs/react
# bun
bun add @onboardjs/core @onboardjs/react
```
## Quick Setup
### 1. Define Steps with Components
```tsx
// steps.tsx
import { OnboardingStep } from '@onboardjs/react'
import { WelcomeStep } from './components/WelcomeStep'
import { ProfileFormStep } from './components/ProfileFormStep'
import { CompleteStep } from './components/CompleteStep'
const steps: OnboardingStep[] = [
{
id: 'welcome',
component: WelcomeStep,
payload: { title: 'Welcome!', description: 'Let\'s get started' },
nextStep: 'profile'
},
{
id: 'profile',
component: ProfileFormStep,
nextStep: 'complete'
},
{
id: 'complete',
component: CompleteStep,
payload: { title: 'All done!' },
nextStep: null
}
]
```
### 2. Wrap with Provider
```tsx
import { OnboardingProvider } from '@onboardjs/react'
import { steps } from './steps'
function App() {
return (
console.log('Done!', ctx)}
>
)
}
```
### 3. Use the Hook
```tsx
import { useOnboarding } from '@onboardjs/react'
function OnboardingUI() {
const { renderStep, next, previous, state, loading } = useOnboarding()
if (loading.isHydrating) return
if (state?.isCompleted) return
return (
{renderStep()}
)
}
```
## Step Indicator / Progress
**Important:** The `state` object does NOT have a `steps` array. Use `currentStepNumber` and `totalSteps`, or calculate from step IDs.
### Option 1: Use Built-in Properties (if available)
```tsx
function OnboardingUI() {
const { state, renderStep } = useOnboarding()
return (