UserTourKit is a free, open source customer support & success project written in MDX and released under MIT. It has 71 GitHub stars, 31 forks and 1 open issues, and was last pushed 1 months ago. On this registry it ranks #17 of 18 tracked projects in Customer Support & Success, with 5 head-to-head comparisons available. It gained 4 stars over the last 30 tracked days.

What is UserTourKit?

UserTourKit (published as Tour Kit) is a headless, TypeScript-first React library for building product tours, onboarding flows, hints, checklists, in-app announcements, and microsurveys, built for React developers who want to own onboarding code rather than rent it from a hosted platform.

What it is

Tour Kit is distributed through npm under the @tour-kit/* scope as a monorepo of 12 packages. It is headless in the strict sense: all tour logic lives in @tour-kit/core, while the UI packages are thin, swappable wrappers. The library is written in strict TypeScript with no any in the public API, and it is designed natively for shadcn/ui while remaining compatible with any component library. It requires React 18 or 19 on Node 18 or later, and every package is tree-shakeable, marked sideEffects: false, and shipped as ESM, CJS, and .d.ts files.

The problem it solves is the split between owning an onboarding experience and paying a vendor to host it. Hosted tools such as Appcues, Userpilot, and Pendo place tour authoring behind a SaaS dashboard, which means the flows, the audience rules, and the resulting user data live with the vendor. Tour Kit replaces that with a code-owned primitive: tours are declarative JSX using the Tour and TourStep components imported from @tour-kit/react, so they live in the same repository, review process, and deployment pipeline as the rest of the product. It also positions itself against client-side tour libraries such as Shepherd.js, Driver.js, Intro.js, Reactour, and React Joyride.

Key capabilities

  • Declarative product tours built from Tour and TourStep components, with focus trap, keyboard navigation, and route awareness.
  • Persistent hints implemented as beacon hotspots and tooltips that survive across sessions, which the README describes as unique in the shadcn ecosystem.
  • Onboarding checklists with task dependencies, progress tracking, persistence, and tour hand-off handled by a single provider.
  • In-app announcements in five variants — modal, slideout, banner, toast, and spotlight — with frequency rules and audience targeting.
  • Microsurveys covering NPS, CSAT, and CES, with built-in fatigue prevention and context awareness.
  • Feature adoption tracking that measures usage, computes adoption status, and triggers nudges automatically.
  • An analytics plugin interface for PostHog, Mixpanel, Amplitude, and GA4, plus a drop-in RAG chat widget for in-app help.

Who uses it and how

  • React product teams that want onboarding flows reviewed in pull requests rather than edited in a vendor dashboard.
  • Teams already on shadcn/ui, which get native styling integration while keeping the option to swap in another component library.
  • Applications needing persistent guidance rather than one-off tours, using beacon hotspots and tooltips that reappear for returning users.
  • Products measuring activation, combining checklists, adoption tracking, and NPS, CSAT, or CES microsurveys behind one provider.
  • Teams with an existing analytics stack that route tour events into PostHog, Mixpanel, Amplitude, or GA4 through the plugin interface.

Getting started

Install the free, MIT-licensed packages with pnpm add @tour-kit/core @tour-kit/react; npm install and bun add work too, and commercial packages install the same way but require a license key. Documentation and framework guides live at https://usertourkit.com/.

How it compares

Against hosted platforms such as Appcues, Userpilot, and Pendo, the difference is where the software and the data live: Tour Kit is a code-owned library rather than a SaaS subscription, so tours ship inside the application, user data stays in your infrastructure, and the free packages carry no vendor bill. That advantage is partial, because the licence is split rather than uniform — only three of the twelve packages are MIT, and the remaining nine require a commercial license key.

When to use it — and when not to

Tour Kit suits React teams comfortable operating their own front-end stack that want onboarding under their own control; the free MIT packages need no extra runtime infrastructure, though checklists, surveys, and analytics sit behind a paid license key. Teams not on React 18 or 19, or those wanting a no-code tour builder maintained entirely by a vendor, should look elsewhere. The project is also small and early — 66 stars, 31 forks, and one open issue — and the mixed MIT-plus-commercial licence means the full feature set is not free.

project readme (upstream, from github) — read inline

Tour Kit

Tour Kit — headless React onboarding library: tours, hints, checklists, and announcements rendered over a sample SaaS dashboard

npm version npm version bundle size License TypeScript WCAG 2.1 AA

Tour Kit is a headless React library for building product tours, onboarding flows, hints, checklists, in-app announcements, and microsurveys. It ships as 12 composable packages, is TypeScript-first, WCAG 2.1 AA compliant, and designed natively for shadcn/ui — but works with any component library.

Alternative to: Shepherd.js, Driver.js, Intro.js, Reactour, React Joyride, Appcues, Userpilot, Pendo — when you want a code-owned, headless, MIT-licensed primitive instead of a hosted SaaS.

  • 🌐 Website & docs:
  • 📦 npm scope: @tour-kit/*
  • 💬 Issues & discussions:

Table of contents


Why Tour Kit

Need What Tour Kit gives you
Product tours Declarative + components, focus trap, keyboard nav, route awareness
Persistent hints Beacon hotspots and tooltips that survive across sessions — unique in the shadcn ecosystem
Onboarding checklists Task dependencies, progress tracking, persistence, and tour hand-off in one provider
Announcements 5 variants (modal, slideout, banner, toast, spotlight) with frequency rules and audience targeting
Microsurveys NPS, CSAT, CES with built-in fatigue prevention and context awareness
Feature adoption Track usage, compute adoption status, and trigger nudges automatically
Analytics Plugin interface for PostHog, Mixpanel, Amplitude, GA4 — or roll your own
AI Q&A widget Drop-in RAG chat for in-app help

Design principles:

  1. Headless first — all logic lives in @tour-kit/core; UI packages are thin, swappable wrappers.
  2. Composition over configuration — small focused components compose into rich flows.
  3. Type-safe — strict TypeScript, full inference, no any in public API.
  4. Accessible by default — focus trap, ARIA live regions, keyboard nav, prefers-reduced-motion.
  5. Tree-shakeable — every package is sideEffects: false and ships ESM + CJS + .d.ts.

Packages

Tour Kit is a monorepo of 12 packages. Three are MIT-licensed and free; nine are commercial (see Licensing).

Free packages (MIT)

Package Purpose Bundle (gzip)
@tour-kit/core Framework-agnostic hooks, types, position engine, storage adapters .

Installation

# Free / open-source (MIT)
pnpm add @tour-kit/core @tour-kit/react   # styled tours
pnpm add @tour-kit/hints                  # persistent hints

# Commercial packages (require a license key)
pnpm add @tour-kit/checklists @tour-kit/announcements @tour-kit/surveys
pnpm add @tour-kit/adoption @tour-kit/analytics
pnpm add @tour-kit/media @tour-kit/scheduling @tour-kit/ai

bun add and npm install work too. Tour Kit requires React 18 or 19 and Node 18+.

Quick start

import { Tour, TourStep } from '@tour-kit/react'

export function App() {
  return (
    <Tour id="onboarding" autoStart>
      <TourStep
        id="welcome"
        target="#welcome-btn"
        title="Welcome!"
        content="Let's take a quick tour."
        placement="bottom"
      />
      <TourStep
        id="dashboard"
        target="#dashboard"
        title="Dashboard"
        content="Your data overview."
        placement="right"
      />
    </Tour>
  )
}

That's the entire API for a basic tour. No external state store, no provider boilerplate.

Headless usage

Need full control over markup? Use the headless variants — Tour Kit handles state, positioning, focus, and a11y; you handle the DOM.

import { TourCardHeadless, TourOverlayHeadless } from '@tour-kit/react'

<TourCardHeadless>
  {({ step, next, prev, close, isFirst, isLast }) => (
    <div role="dialog" aria-labelledby="tour-title">
      <h2 id="tour-title">{step.title}</h2>
      <p>{step.content}</p>
      <button onClick={prev} disabled={isFirst}>Back</button>
      <button onClick={next}>{isLast ? 'Finish' : 'Next'}</button>
      <button onClick={close} aria-label="Close tour">×</button>
    </div>
  )}
</TourCardHeadless>

Multi-tour registry

For apps with several tours triggered from different pages or buttons:

import {
  MultiTourKitProvider,
  Tour,
  TourStep,
  TourOverlay,
  TourCard,
  useTours,
} from '@tour-kit/react'

function Triggers() {
  const { start } = useTours()
  return <button onClick={() => start('billing-tour')}>Show billing tour</button>
}

export function App() {
  return (
    <MultiTourKitProvider>
      <Tour id="onboarding"><TourStep id="..." target="..." /></Tour>
      <Tour id="billing-tour"><TourStep id="..." target="..." /></Tour>
      <TourOverlay />
      <TourCard />
      <Triggers />
    </MultiTourKitProvider>
  )
}

Framework guides

  • Next.js (App Router) — useNextAppRouter() adapter handles route awareness. See apps/docs/content/docs/guides/nextjs.mdx.
  • Next.js (Pages Router) — useNextPagesRouter() adapter.
  • React Router — useReactRouter() adapter (v6 and v7).
  • Vite — works out of the box. See examples/vite-app.
  • Plain React — no router adapter needed.

Full demos: examples/.

Comparison with alternatives

Feature Tour Kit Driver.js React Joyride Intro.js Shepherd.js
Headless API ✅ ❌ Partial ❌ ❌
TypeScript-first ✅ ✅ ✅ Types only Types only
shadcn/ui native ✅ ❌ ❌ ❌ ❌
Persistent hints ✅ ❌ ❌ ❌ ❌
Checklists ✅ ❌ ❌ ❌ ❌
Announcements (5 variants) ✅ ❌ ❌ ❌ ❌
Microsurveys (NPS/CSAT/CES) ✅ ❌ ❌ ❌ ❌
Feature adoption tracking ✅ ❌ ❌ ❌ ❌
Analytics plugin system ✅ ❌ ❌ ❌ ❌
Multi-tour registry ✅ ❌ Partial ❌ Partial
WCAG 2.1 AA ✅ Partial ✅ Partial Partial
Tree-shakeable ESM ✅ ✅ Partial ❌ ✅
Free core ✅ MIT ✅ MIT ✅ MIT ✅ AGPL/Commercial ✅ MIT

Tour Kit is closer in scope to Userpilot, Pendo, or Appcues — except it's a library you embed, not a SaaS, and the core is open-source.

Use cases

  • SaaS onboarding — guide new users through setup with a tour, then drop a checklist on the dashboard.
  • Feature launches — announce new features with a modal or banner, scheduled to appear during business hours only.
  • Adoption nudges — detect users who haven't tried a key feature and show a contextual hint.
  • Help & docs — embed a RAG-powered Q&A widget that answers questions from your own docs.
  • Feedback loops — fire an NPS survey after the 3rd session, with fatigue prevention so users aren't spammed.
  • Internal tools — tours for admin dashboards where a SaaS like Pendo would be overkill.

FAQ

What is Tour Kit? Tour Kit is a TypeScript-first React library for in-app onboarding. It bundles product tours, hints, checklists, announcements, surveys, adoption tracking, and an AI Q&A widget into 12 composable packages.

Is Tour Kit free? The core experience — @tour-kit/core, @tour-kit/react, and @tour-kit/hints — is free under MIT. The other 9 packages are commercial; see Licensing.

Does Tour Kit work without shadcn/ui? Yes. The styled components use Tailwind classes that pair nicely with shadcn, but the headless variants (TourCardHeadless, TourOverlayHeadless, etc.) work with any styling system — CSS modules, Emotion, vanilla CSS, anything.

Does it work with Next.js? Yes — both App Router and Pages Router are supported via dedicated router adapters. All components include 'use client'.

How big is it? The free core (core + react + hints) is under 25 KB gzipped combined. Every package is sideEffects: false and ships ESM + CJS + TypeScript declarations.

Is it accessible? Yes. WCAG 2.1 AA compliant, with focus trap, keyboard navigation (arrow keys, Escape, Tab), aria-live announcements, and prefers-reduced-motion support.

Does Tour Kit collect data or call home? No. There is no telemetry. Analytics are opt-in via the @tour-kit/analytics plugin you configure yourself.

How does Tour Kit compare to Userpilot or Pendo? Tour Kit is a library, not a SaaS. You install it via npm, ship it with your app, and own the data. There's no per-MAU pricing — commercial packages use a one-time license model. See pricing.

Can I use it with Vite, Remix, or Astro? Yes — Tour Kit is framework-agnostic. Router adapters are provided for Next.js and React Router; everything else works through the generic useTour API.

Licensing

Tour Kit uses a dual licensing model — see NOTICE.md for the per-package breakdown.

  • MIT (free, open-source): @tour-kit/core, @tour-kit/react, @tour-kit/hints — covered by the root LICENSE.
  • Commercial (proprietary, paid): @tour-kit/adoption, @tour-kit/ai, @tour-kit/analytics, @tour-kit/announcements, @tour-kit/checklists, @tour-kit/license, @tour-kit/media, @tour-kit/scheduling, @tour-kit/surveys

Each commercial package has a LICENSE.md describing its terms. Buy a license at .

Development

This is a pnpm + Turborepo monorepo.

# Install dependencies
pnpm install

# Watch mode
pnpm dev

# Build all packages (proper dependency order)
pnpm build

# Build a single package
pnpm build --filter @tour-kit/core

# Type-check
pnpm typecheck

# Lint (Biome)
pnpm lint

# Unit tests (Vitest)
pnpm test

# E2E (Playwright)
pnpm e2e

# Bundle size benchmarks
pnpm bench

# Run example apps
pnpm example:vite
pnpm example:next

See CONTRIBUTING.md for contribution guidelines.

For AI assistants

Tour Kit publishes machine-readable documentation for LLMs and coding agents:

  • llms.txt — concise curated index (llmstxt.org spec)
  • llms-full.txt — full documentation corpus
  • Context7 — indexed for Claude Code, Cursor, Windsurf, and other MCP-compatible agents (query: use context7 with /domidex/tour-kit)
  • context7.json — repo-root config steering Context7's indexer

Built by @domidex01. Star the repo if Tour Kit saves you a sprint.

Frequently asked questions

Is UserTourKit free to use?

UserTourKit is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does UserTourKit do?

Lightweight, accessible product tours built for React developers

What is UserTourKit written in?

UserTourKit is primarily written in MDX. Its source is publicly available at https://github.com/domidex01/tour-kit, and it has 71 GitHub stars.