npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

react-guided-journey

v1.1.0

Published

Headless React onboarding system — guided tours with spotlight, a progress checklist, discovery banners and a help center. Zero runtime dependencies, router-agnostic, DB-ready persistence.

Downloads

242

Readme

react-guided-journey

A complete, headless React onboarding system — not just a tooltip library.

npm CI bundle size license Sponsor

▶ Live interactive demo · Getting started · Hosting · Publishing · Sponsor

Try every feature live before you install — tours, checklist, help center, discovery tips, theming, and the persisted state (refresh to see it resume).

Ships with guided tours (spotlight + tooltips), a getting-started checklist with progress tracking, dismissible discovery banners, a help center drawer, and a welcome modal — all driven by one minimal, DB-ready state shape.

  • Zero runtime dependencies. Only React as a peer dep. The store is a tiny useSyncExternalStore implementation, no zustand/redux.
  • Router-agnostic. You pass currentPath and onNavigate — works with react-router, TanStack Router, Next.js, anything.
  • Role-agnostic. Roles are plain strings; no coupling to an auth library.
  • DB-ready persistence. The persisted state is four id-arrays that map cleanly to a single row. Default localStorage adapter; bring your own async adapter for a backend.

Why this over react-joyride / driver.js / Shepherd?

| | react-guided-journey | react-joyride | driver.js | Shepherd | |---|---|---|---|---| | Runtime deps | 0 | several | 0 | several | | Checklist + progress | ✅ built-in | ❌ | ❌ | ❌ | | Persistence (resume) | ✅ pluggable | ❌ | ❌ | ❌ | | Help center / welcome | ✅ | ❌ | ❌ | ❌ | | Navigate-then-tour | ✅ | ❌ | ❌ | ❌ | | Role-aware tours | ✅ | ❌ | ❌ | ❌ | | Tooltip placement | measure-then-show | static estimate | static | popper | | Async target waiting | ✅ MutationObserver | partial | ❌ | ❌ | | Keyboard nav + a11y | ✅ | ✅ | partial | ✅ | | Tooltip arrow/caret | ✅ | ✅ | ✅ | ✅ |

A modern alternative to react-joyride, driver.js, Shepherd.js, intro.js & Reactour

If you're comparing React onboarding / product-tour libraries, here's where react-guided-journey fits:

  • vs react-joyride — joyride is tours-only and unmaintained-ish; this adds a checklist, help center, discovery tips and persistence, with zero runtime deps.
  • vs driver.js — driver.js is a great vanilla-JS highlighter but not React-native and has no checklist or resume-state; this is built for React with a full onboarding model.
  • vs Shepherd.js / intro.js — both are tour engines; this is a complete onboarding system (tour + checklist
    • help center + tips) in one headless, themeable package.
  • vs Reactour / Onborda / NextStep — similar tour scope; this adds progress tracking, DB-ready persistence, role-aware content and a navigate-then-tour flow.

Short version: most of these are tooltip/tour libraries. This is an onboarding system — tours and a progress checklist and a help center and discovery tips, sharing one DB-ready state shape.

Install

npm install react-guided-journey
import { OnboardingProvider } from "react-guided-journey";
import "react-guided-journey/styles.css";

Quick start

One provider, near the root, inside your router. The nesting is always Router → OnboardingProvider → App. Here's a complete main.tsx:

// src/main.tsx
import { createRoot } from "react-dom/client";
import { BrowserRouter, useLocation, useNavigate } from "react-router-dom";
import { OnboardingProvider } from "react-guided-journey";
import "react-guided-journey/styles.css";
import App from "./App";
import { tours, journeys } from "./onboarding/config";

function AppProviders({ children }: { children: React.ReactNode }) {
  const { pathname } = useLocation();   // must be inside the router
  const navigate = useNavigate();
  return (
    <OnboardingProvider
      config={{ tours, journeys, currentPath: pathname, onNavigate: navigate }}
    >
      {children}
    </OnboardingProvider>
  );
}

createRoot(document.getElementById("root")!).render(
  <BrowserRouter>
    <AppProviders>
      <App />
    </AppProviders>
  </BrowserRouter>,
);

That's the whole setup — the welcome modal, checklist, help center and tours now render automatically. See the Getting started guide for roles, persistence, theming and more, or run the interactive demo locally:

cd demo
npm install
npm run dev   # http://localhost:5173

Concepts

  • Tour — an ordered list of spotlighted steps tied to a route. Set autoLaunch: true to start it the first time a user reaches its route.
  • Step{ id, target (CSS selector), title, content, placement }. Each step can set its own width, spotlightPadding, async onBeforeStep (e.g. open a menu / await a fetch before highlighting) and onAfterStep.
  • Journey — a role-specific checklist of tasks + an optional welcome modal. A task with a tourId shows a "Show me how" button; finishing that tour completes the task automatically (matched by the task's id). Tasks render in array order and can carry an icon (any React node — a component or emoji).
  • Discovery — a small dismissible "tip" banner. Floating (corner) tips render automatically from config; inline tips are placed with <DiscoveryBanner id="…" /> where you want them. Stays dismissed once closed.

How a checklist task links to a tour

You declare the link in one place — the task's tourId:

// journey
steps: [
  { id: "take-tour", title: "Take the product tour", icon: "🗺️", tourId: "product-tour" },
]

// tour
{ id: "product-tour", route: "/", title: "Product tour", steps: [/* … */] }
  • Finishing product-tour completes the take-tour task — no checklistStepId needed (it's auto-derived from tourId; set it only to override).
  • The task's "Go" button defaults to the tour's route, so you don't repeat route on the task. Set the task's own route only for a task with no tour.
  • order is optional — tasks render in array order; set it only to override.

Persisted state (DB-ready)

interface PersistedState {
  welcomeSeen: boolean;
  completedSteps: string[];        // finished checklist tasks
  seenTours: string[];             // completed OR dismissed — gates auto-launch
  dismissedDiscoveries: string[];
}

Use a custom backend instead of localStorage:

const adapter: PersistenceAdapter = {
  load: () => fetch(`/api/onboarding/${userId}`).then((r) => r.json()),
  save: (state) =>
    fetch(`/api/onboarding/${userId}`, {
      method: "PUT",
      body: JSON.stringify(state),
    }),
};

<OnboardingProvider config={{ ...config, persistence: adapter }}>

Lifecycle callbacks

callbacks: {
  onTourStart, onTourComplete, onTourSkip,
  onStepChange, onStepComplete, onChecklistComplete,
}

Theming

Override any CSS variable (--rgj-primary, --rgj-surface, --rgj-radius, …) in your own stylesheet. Or set renderDefaultUI={false} on the provider and build your own UI with the exported useOnboarding() hook + <TourRenderer />.

Sponsor

react-guided-journey is free and MIT-licensed. If it saves you time, you can support its development via GitHub Sponsors — one-time or monthly. Thank you 🙏

License

MIT © Alpesh Baraiya