Tour Kit Docs — React Onboarding Library
Documentation for userTourKit — install, configure, and build accessible product tours, hints, and onboarding flows in React with shadcn/ui and TypeScript-strict types.
userTourKit is a source-available headless React library for building product tours, onboarding checklists, hints, announcements, and in-app messaging. It ships three packages — a framework-agnostic core under 23KB gzipped, a React component layer under 12KB, and a hints/hotspot layer under 6.5KB — all under BUSL-1.1 (free in development, licence key in production). WCAG 2.1 AA accessibility, TypeScript-strict types, and Lighthouse 100 scores come built in. The optional Pro tier adds adoption tracking, analytics, announcements, checklists, media, scheduling, and AI chat as a one-time purchase.
These docs are written for React developers integrating onboarding into a Next.js, Remix, or plain-CRA app, especially teams already on shadcn/ui, Radix, or Base UI. If you're evaluating whether tours are the right pattern at all — versus checklists, in-app messaging, or empty-state guidance — start with the complete React product tour guide and the user onboarding handbook. Otherwise, jump straight to installation below.
Why userTourKit?
Headless First
All logic in hooks. Build your own UI or use our pre-styled components.
Accessible
WCAG 2.1 AA compliant. Focus management, keyboard nav, screen reader support.
TypeScript
Full type safety with comprehensive type definitions.
Tiny Bundle
Core is under 23KB gzipped. Tree-shakeable exports.
Packages
| Package | Description | Size |
|---|---|---|
@tour-kit/core | Headless hooks & logic | < 23KB |
@tour-kit/react | Pre-styled React components | < 12KB |
@tour-kit/hints | Persistent hints/hotspots | < 5KB |
Quick Start
pnpm add @tour-kit/reactimport { Tour, TourStep, useTour } from '@tour-kit/react';
function App() {
const { start } = useTour('onboarding');
return (
<Tour id="onboarding">
<TourStep
target="#welcome"
title="Welcome!"
content="Let's take a quick tour."
placement="bottom"
/>
<button onClick={() => start()}>Start Tour</button>
<div id="welcome">Welcome Section</div>
</Tour>
);
}Next Steps
Migrating from another tour library?
Drop-in codemods to rewrite an existing codebase to Tour Kit in one command:
- Migrate from react-joyride —
<Joyride>JSX +useJoyride()hook. - Migrate from shepherd.js —
new Shepherd.Tour({...}).addStep(...).start(). - Migrate from driver.js —
driver({...}).drive()config calls.
Going further
- Guides — accessibility, persistence, router integration, i18n, segmentation, animations, theme variations, and more.
- Use cases — full onboarding patterns assembled from the primitives above.
- Build with LLMs — drop the per-package context files into ChatGPT, Claude, or Cursor for accurate code generation.
Ship onboarding, not config.
npm i @tour-kit/core is free while you build. Every package works unlicensed in development, a one-time licence from $9.99 removes the production watermark when you ship.
Free in development, no signup, no credit card. Pay once, only when you ship.