
Why the best onboarding software in 2026 is a React library
The onboarding tools market has a pricing problem. Appcues starts at $299/month. Userpilot charges $249/month with annual billing only. Pendo doesn't publish pricing, but enterprise contracts run $15,000 to $140,000 per year. Meanwhile, React libraries like Tour Kit, React Joyride, and Shepherd.js ship the same core functionality for zero dollars and a fraction of the bundle weight.
This isn't a build-vs-buy argument. It's a third option nobody talks about: use a library that already solved the hard parts, then own the code.
npm install @tourkit/core @tourkit/reactThat single command gives you tour logic, step management, highlighting, and keyboard navigation with full accessibility. No vendor dashboard. No MAU pricing. No third-party script injecting 150KB into your bundle.
The problem: SaaS onboarding tools are built for product managers, not developers
Every SaaS onboarding platform starts the same pitch: "No-code! Ship tours without engineering!" And for product managers at non-technical companies, that pitch works. But if your team already writes React, the "no-code" promise creates more problems than it solves.
SaaS tools inject third-party JavaScript that ranges from 50KB to 200KB gzipped. That script parses your DOM at runtime, figures out where your elements are, and overlays its own UI on top of yours. Your design system? Ignored. Your Tailwind tokens? Overridden by inline styles you can't control.
A React library takes the opposite approach. Tour Kit's core package ships at under 8KB gzipped with zero runtime dependencies. It doesn't fight your component tree. It is part of your component tree.
// src/components/OnboardingTour.tsx
import { TourProvider, useTour } from '@tourkit/react';
const steps = [
{
target: '#dashboard-chart',
title: 'Your analytics dashboard',
content: 'Click any data point to drill down into the details.',
},
{
target: '#export-button',
title: 'Export your data',
content: 'Download CSV or PDF reports from here.',
},
];
export function OnboardingTour({ children }: { children: React.ReactNode }) {
return (
<TourProvider steps={steps}>
{children}
</TourProvider>
);
}That's real code. Typed, rendered in your component tree, runnable in your test suite. Try getting any of that from a SaaS dashboard.
The argument: libraries won on three fronts
Two years of change made React libraries the better choice for any team with frontend developers. Economics shifted. Performance requirements tightened. And the headless UI movement proved the architecture works.
The cost gap is indefensible
As of April 2026, here's what onboarding costs:
| Tool | Type | Starting price | Annual cost (SMB) |
|---|---|---|---|
| Appcues | SaaS | $299/mo (MAU-based) | $3,588+ |
| Userpilot | SaaS | $249/mo (annual only) | $2,988+ |
| Pendo | SaaS | Not public | $15,000–$140,000+ |
| React Joyride | Library (MIT) | Free | $0 |
| Shepherd.js | Library (MIT) | Free | $0 |
| Tour Kit | Library (open core) | Free / Pro | $0 to $99 one-time |
SaaS tools use MAU-based pricing, which means your costs grow exactly when your product succeeds. Get 10x the users? Expect 3-5x the bill. Libraries don't penalize growth.
The standard build-vs-buy analysis from vendors like Whatfix estimates a custom build at $55,000 over two months with a small team. But that calculation assumes building from scratch.
Using a library like Tour Kit or React Joyride eliminates 80% of that work. You're not building tour logic or positioning engines. You're composing them.
Performance isn't optional anymore
Google's Core Web Vitals treat JavaScript payload as a ranking signal. Every kilobyte of third-party script adds to your Total Blocking Time and Interaction to Next Paint scores. According to web.dev, pages loading large JS bundles see measurably higher bounce rates on mobile.
SaaS onboarding scripts typically inject 50-200KB of JavaScript. They load asynchronously (when you're lucky), parse your DOM, create overlay elements, and attach event listeners to elements they didn't create. Your users pay this performance tax on every page load, whether they're seeing a tour or not.
| Approach | JS payload (gzipped) | Loads on every page? | Tree-shakeable? |
|---|---|---|---|
| SaaS script (typical) | 50–200KB | Yes | No |
| React Joyride | ~37KB | If imported | Partial |
| Driver.js | ~5KB | If imported | Yes |
| Tour Kit (core + react) | <12KB | If imported | Yes |
Libraries tree-shake. You import useTour and the bundler includes exactly what that hook needs. With React.lazy and Suspense, you can defer loading tour code until the user actually needs onboarding. SaaS scripts don't give you that control.
Headless UI won the architecture debate
The headless UI movement proved something important: separating logic from presentation gives developers better outcomes. Radix UI and Headless UI ship accessible primitives without prescribing styles. shadcn/ui took this further by generating components you own and modify directly.
Product tours should work the same way. Tour Kit ships tour logic as hooks and providers: step sequencing, positioning, highlight calculation, keyboard navigation, ARIA management. You bring your own components.
Nir Ben-Yair wrote about stopping UI library usage in favor of headless components. The argument applies identically to onboarding tools: "I want the behavior without the opinions."
SaaS tools can't be headless. Their business model requires controlling the UI, because that's what the visual builder edits. The moment you need your tooltip to match your design system, you're writing CSS overrides for a component tree you can't see.
The counterargument: SaaS tools have features libraries don't
Fair point. Here's what SaaS platforms genuinely do better, right now:
Visual builders. Appcues and Userpilot let product managers create tours without writing code. If your team has no frontend developers, a library won't help. That's a real limitation.
Built-in analytics dashboards. Pendo's analytics are genuinely powerful. Tour Kit requires you to wire up PostHog or Mixpanel yourself. More flexible, but more work.
Targeting and segmentation. SaaS tools have user targeting built into their platforms. With a library, you build targeting logic yourself or use feature flags from LaunchDarkly, Statsig, or similar.
Non-technical team access. A marketing team can update tour copy in Appcues without a deploy cycle. Library-based tours require a code change and deployment.
These are legitimate advantages. But they share a pattern: they solve organizational problems, not technical ones. If your team has React developers who ship regularly, every one of these "advantages" costs less to build than to integrate with a SaaS vendor.
What this means for React teams in 2026
The onboarding tools market is roughly $3.5 billion and growing. Most of that money flows to SaaS platforms solving for teams without developers. But React teams are developers. Paying $300/month for a visual builder you won't use is like buying Squarespace when you already know Next.js.
Three trends are accelerating this shift:
The EU Data Act. Effective September 2025, the EU Data Act adds portability requirements specifically targeting vendor lock-in. SaaS onboarding tools that store tour configurations and user progress in proprietary formats are now a compliance risk for EU-facing companies. Libraries store everything in your database.
AI-powered personalization. Every onboarding vendor is adding "AI features" to their platform. But their AI works with their data, in their pipeline. When you own your onboarding code, you integrate your LLM and your user behavior model. Code ownership means AI ownership.
Composable architecture. The composable SaaS movement (Bitsrc covers this well) favors modular, API-connected tools over monolithic platforms. Tour Kit's 10-package architecture follows this pattern: install @tourkit/core and @tourkit/react for basic tours, add @tourkit/analytics when you need tracking. Pay for complexity only when you need it.
What we'd do differently: the "onboarding as code" approach
We built Tour Kit, so take this section with appropriate skepticism. But the technical argument stands regardless of which library you choose.
"Onboarding as code" means treating tour definitions the way infrastructure-as-code treats server configs: version-controlled, reviewable in PRs, testable in CI, deployable through your existing pipeline.
// src/tours/dashboard-onboarding.ts
import type { TourStep } from '@tourkit/core';
export const dashboardTour: TourStep[] = [
{
id: 'welcome',
target: '#main-dashboard',
title: 'Welcome to your dashboard',
content: 'Here is where you will find your key metrics.',
},
{
id: 'filters',
target: '[data-tour="filters"]',
title: 'Filter your data',
content: 'Use these controls to narrow down what you see.',
prerequisites: ['welcome'],
},
];That tour definition is a TypeScript file. CI type-checks it. PRs review it. Vitest or Playwright test it. When something breaks, git blame tells you who changed it and why.
SaaS tours live in a vendor dashboard. No code review. No CI testing. When something breaks, you open a support ticket.
Tour Kit doesn't have a visual builder, and it requires React 18 or later. The community is smaller than React Joyride's 7,600 GitHub stars and 11,000+ dependent projects. Those are real limitations. But for teams that already write React, the tradeoffs favor code ownership by a wide margin.
The W3C's ARIA Authoring Practices Guide doesn't include a product tour pattern, which means every implementation is custom. Tour Kit ships with focus trapping, keyboard navigation, aria-describedby associations, and live region announcements. We tested against axe-core and Lighthouse to maintain a 100 accessibility score. Most SaaS tools mention accessibility as a bullet point on their pricing page without explaining what they actually implement.
FAQ
Is a React library really better than Appcues or Userpilot for onboarding?
For teams with React developers, a library like Tour Kit provides equivalent core functionality (step tours, highlights, tooltips, checklists) at a fraction of the cost. Appcues starts at $299/month while Tour Kit's core is free and ships at under 8KB gzipped. The tradeoff is losing the visual builder and built-in analytics dashboard.
What does "onboarding as code" mean?
Onboarding as code means defining tour steps, targeting rules, and onboarding flows in version-controlled TypeScript files instead of a SaaS dashboard. Tour definitions are type-checked, reviewable in pull requests, testable in CI, and deployable through your existing pipeline. It follows the same pattern as infrastructure-as-code.
Can a library replace a full onboarding platform?
A single library handles product tours, tooltips, and highlights. Tour Kit's extended packages add checklists, surveys, announcements, and analytics. You won't get a visual builder, but you get full code ownership and zero recurring costs for core functionality.
How does bundle size affect onboarding tool choice?
SaaS onboarding scripts inject 50-200KB of JavaScript on every page load, affecting Core Web Vitals scores. Tour Kit's core ships at under 8KB gzipped and tree-shakes so only imported code reaches the browser. For performance-sensitive applications, the bundle size difference directly impacts Interaction to Next Paint and Total Blocking Time.
Is Tour Kit free or paid?
Tour Kit's core packages (@tourkit/core, @tourkit/react, @tourkit/hints) are MIT-licensed and free. Extended packages like analytics and surveys require a Pro license. We're transparent about this: the best onboarding software being a library doesn't mean it has to be ours. React Joyride and Shepherd.js are solid MIT alternatives.
Related articles

How AI will change product onboarding (and what won't change)
AI will personalize onboarding timing, content, and sequencing. But trust, accessibility, and user control still require human decisions. A developer's take.
Read article
GitHub stars don't pay the bills (but they help)
A solo developer's honest look at what GitHub stars actually do for an open-source library. Real numbers on the gap between stars and revenue.
Read article
From 0 to 1000 GitHub stars: the Tour Kit playbook
How I grew a React product tour library from zero to its first 1,000 GitHub stars as a solo developer. Real tactics, real numbers, no paid ads.
Read article
How I built a 10-package React library as a solo developer
The real story behind Tour Kit: 12 packages, 31K lines of TypeScript, and 141 commits in 3.5 months. Architecture decisions, failures, and what I'd change.
Read article