Framework guide

Onboard for React

Install @bootstrapware/onboard, import styles, render <Onboard /> in a client boundary with user, workspaceKey, and an adapter or Hosted props. Bootstrapware does not authenticate end users.

Install

pnpm add @bootstrapware/onboard

Import @bootstrapware/onboard/styles.css once near the feature.

Path A — local

import { Onboard, createLocalAdapter, SAAS_FIRST_RUN_ITEMS } from "@bootstrapware/onboard";
import "@bootstrapware/onboard/styles.css";

<Onboard
  user={{ id: session.user.id, name: session.user.name }}
  workspaceKey={workspace.id}
  context={{ role: membership.role, plan: workspace.plan }}
  facts={{ hasBilling: billingConnected }}
  items={SAAS_FIRST_RUN_ITEMS}
  adapter={createLocalAdapter({ storageKey: "app-onboard" })}
/>

Call completeStep from your app on real actions and pass facts so the widget reconciles on mount. No keys required.

Path B — Hosted

<Onboard
  flowId="flw_..."
  publishableKey={process.env.NEXT_PUBLIC_BSW_ONBOARD_PUBLISHABLE_KEY}
  user={currentUser}
  workspaceKey={workspace.id}
  authorToken={authorTokenFromBff}
/>

Live Hosted needs Hosted ($19.99) and a BFF-minted token. Test keys work unpaid. See modes.

Path C — BYO

Pass a full OnboardAdapter and still pass flowId + publishableKey so published config loads. Progress stays on your API. Use onEvent for Slack or CRM; Bootstrapware webhooks are Hosted-only.

Pitfalls

  • Inventing user.id
  • Forgetting styles.css
  • Putting secret keys in the client
  • Sending host context through MCP
  • Omitting workspaceKey so shared steps never complete for teammates

Related: React component · Embed checklist · Next.js · Identity · Demo