Wakeline
← All library comparisons
library comparison

Free Intro.js and Shepherd.js alternatives (2026)

Intro.js and Shepherd.js are both free to download and both AGPL-3.0 — which, for a closed-source commercial product, means a paid license. If that's why you're here, these are the MIT-licensed alternatives worth considering, with working code and the trade-offs each one brings.

Last checked: October 10, 2026 — versions, licenses and downloads from the npm registry.

Quick verdict

Is Intro.js free? Under AGPL-3.0, yes — for open-source and non-commercial projects. For a commercial product, Intro.js and Shepherd.js both expect a paid license. The best MIT alternatives are Driver.js (any framework, zero dependencies), React Joyride (React) and NextStep (Next.js). The licenses are cheap, so if you need exactly what Intro.js or Shepherd does, buying one is a legitimate answer too.

  • Intro.js 8.6.0 — AGPL-3.0; commercial licenses $9.99 / $49.99 / $299.99 lifetime (introjs.com).
  • Shepherd.js 15.3.0 — AGPL-3.0 since 14.0.1; commercial licenses $50 / $300 lifetime (shepherdjs.dev/pricing).
  • Driver.js — MIT, any framework, the closest drop-in for most Intro.js tours.
  • React Joyride (React) and NextStep (Next.js) — MIT, framework-specific.
  • Avoid Hopscotch: Apache-2.0, but last released in 2017 and archived.

"Is Intro.js free?" has a precise answer. Intro.js is published under the GNU AGPL-3.0, and its README says a commercial license is the appropriate option for commercial applications, themes or plugins. Its homepage puts it more simply: free for open-source, personal and non-commercial sites; if you want to use it in a commercial app, website or plugin, you need a commercial license.

Shepherd.js went the same way more recently. On npm, versions up to 13.0.3 (August 2024) were MIT; from 14.0.1 (October 2024) they're AGPL-3.0. Shepherd's LICENSE.md is explicit that a commercial license is required for commercial products and SaaS, for any company that generates revenue (even if the project using Shepherd doesn't), and for internal tools at for-profit companies. The React, Angular and Vue wrappers carry the same license.

None of this is a criticism — paid licenses fund maintenance, and both are actively developed. But if you need a library you can ship in proprietary code without a purchase, you want MIT. This isn't legal advice; read the license files and check with whoever handles licensing for your company.

side by side

The comparison table.

 Driver.jsdriver.jsReact Joyridereact-joyrideNextStepnextstepjsReactour@reactour/tourIntro.jsintro.jsShepherd.jsshepherd.js
LicenseMITMITMITMITAGPL-3.0 + paid commercialAGPL-3.0 + paid commercial
Current version1.9.0 (Oct 3, 2026)3.2.0 (Jul 9, 2026)2.3.0 (Jul 20, 2026)3.8.0 (May 7, 2025)8.6.0 (Sep 21, 2026)15.3.0 (Aug 24, 2026)
Framework supportAny — vanilla TypeScript, no framework bindings neededReact 16.8–19 onlyNext.js 13+, plus React Router and Remix adapters; needs motionReact 16–19 onlyAny; community wrappers (intro.js-react is MIT, but wraps AGPL code)Any; official React, Angular and Vue wrappers (also AGPL)
Size & approach~5 kB gzip per its README; zero dependencies25.6 kB gzip incl. 10 dependencies (bundlephobia)Not measured — bundlephobia didn't return a result7.2 kB gzip incl. 3 dependencies (bundlephobia)19.2 kB gzip, zero dependencies (bundlephobia)15.3 kB gzip incl. 2 dependencies (bundlephobia)
Multi-page / routesNot built in; official docs pattern saves the step, then resumes with drive(index). waitForElement since 1.8Not built in; you navigate (controlled mode or an async before hook) and it polls for the targetBuilt in: nextRoute / prevRoute per stepNot built in; the project ships React Router sandboxes for route switchingNot built in; persist progress and restart on the next page yourselfNot built in; beforeShowPromise and waitForElement help across async renders
AccessibilityKeyboard-controllable; closeBtnLabel sets the close button's aria-label (1.9)alertdialog role, focus trap with focus restore, configurable EscArrow keys and EscFocus lock (react-aria FocusScope), Esc and arrow keysKeyboard navigation option; check focus handling yourselfArrow-key navigation, Esc to exit, per-step aria-label
StylingPlain CSS file, popoverClass, CSS variables, onPopoverRender hookoptions for colors, styles prop, or your own tooltip/beacon componentsDefault card or your own card componentProvider-level styles and swappable componentsCSS file, tooltipClass/highlightClass, registered themesMinimal default CSS plus per-step classes — you do the design
MaintenanceVery active — 1.5 through 1.9 shipped June–October 2026Active — v3 rewrite March 2026, 3.2.0 in JulyActive — 2.3.0 in July 2026Slower — last release May 2025Active — 8.4 to 8.6 shipped July–September 2026Active — 15.x through 2026
npm downloads, 90 days22.4M16.5M749k2.5M2.5M4.0M

Versions, publish dates, licenses and download counts (July 11 – October 8, 2026) from the npm registry. Sizes are bundlephobia’s min+gzip measurement of the package and its own dependencies, excluding peers such as React — or the library’s own README figure where noted.

the libraries

Each one, honestly — with the code.

Driver.js — the closest MIT replacement for Intro.js

License:
MIT
Version:
driver.js 1.9.0

Driver.js covers what most Intro.js tours actually use: an overlay, a spotlight, a popover per step, a progress indicator, keyboard control, and since 1.8 a hints module with pulsing beacons. It's framework-agnostic like Intro.js and Shepherd, so a migration is mostly translating step objects: Intro.js's { element, intro } becomes Driver.js's { element, popover: { description } }.

What you'll rebuild: Intro.js's dontShowAgain checkbox (store a flag yourself and skip drive()), and step bullets if you rely on them. What you'll gain: MIT licensing, no dependencies, and a smaller bundle (about 5 kB gzipped per its README, against about 19.2 kB for Intro.js 8.6.0 on bundlephobia).

import { driver } from "driver.js";
import "driver.js/dist/driver.css";

const tour = driver({
  showProgress: true,
  steps: [
    {
      element: "#new-project",
      popover: { title: "Create a project", description: "Everything starts here." },
    },
    {
      element: "#invite",
      popover: { title: "Invite your team", description: "Tours work better with company." },
    },
  ],
});

tour.drive();
Driver.js 1.9.0 — the shape most Intro.js tours translate into.

React Joyride — the MIT choice if you're on React

License:
MIT
Version:
react-joyride 3.2.0

If your Intro.js usage lives in a React app — perhaps through the intro.js-react wrapper, which is MIT itself but wraps AGPL Intro.js — React Joyride is the most established MIT replacement. Steps can render React components, the dialog is focus-trapped and labelled for screen readers, and v3 supports React 16.8–19. It's heavier than Driver.js (about 25.6 kB gzipped on bundlephobia) and React-only.

"use client";
import { useState } from "react";
import { Joyride, STATUS, type EventData, type Step } from "react-joyride";

const steps: Step[] = [
  { target: "#new-project", title: "Create a project", content: "Everything starts here." },
  { target: "#invite", title: "Invite your team", content: "Tours work better with company." },
];

export function OnboardingTour() {
  const [run, setRun] = useState(true); // v3: run defaults to false

  return (
    <Joyride
      steps={steps}
      run={run}
      continuous
      options={{ showProgress: true, buttons: ["back", "skip", "primary"] }}
      onEvent={(data: EventData) => {
        if (data.status === STATUS.FINISHED || data.status === STATUS.SKIPPED) setRun(false);
      }}
    />
  );
}
React Joyride 3.2.0 — note the v3 named import and explicit run.

NextStep — MIT, with multi-page tours built in

License:
MIT
Version:
nextstepjs 2.3.0

Neither Intro.js nor Shepherd navigates between pages for you. NextStep does: each step can set nextRoute / prevRoute and the library handles the transition on Next.js, or on React Router and Remix through adapters. It requires the motion animation package and is best suited to App Router projects. Onborda is a similar, MIT-licensed Next.js option with a slower release cadence.

Reactour, TourGuide JS and Hopscotch — the rest of the field

License:
MIT
Version:
@reactour/tour 3.8.0

@reactour/tour (MIT, React 16–19) is a lighter React alternative with a provider-and-hook API and focus locking; its last release was May 2025. TourGuide JS (@sjmc11/tourguidejs, MIT) is a vanilla library that reads steps from data-tg-tour attributes — close to Intro.js's data-intro style — but it's still pre-1.0 (0.0.27) and ships SCSS you compile yourself.

Hopscotch, LinkedIn's old library, still turns up in "free alternative" lists because it's Apache-2.0. Its last npm release was 0.3.1 in June 2017 and its GitHub repository is archived. Don't start anything new on it.

how to choose

Which should you pick?

Commercial product, any framework, replacing Intro.js

→ Driver.js

MIT, framework-agnostic, covers overlays, popovers, progress and hints.

Commercial React app using intro.js-react or react-shepherd

→ React Joyride

MIT, React 16.8–19, component-based steps and strong accessibility defaults.

Next.js app with tours that cross routes

→ NextStep

MIT with per-step nextRoute and prevRoute.

You rely on Shepherd's showOn / beforeShowPromise model

→ Buy the Shepherd license

Re-implementing a complex conditional tour can cost more than $50–$300 of license.

Open-source project under an AGPL-compatible license

→ Keep Intro.js or Shepherd

AGPL works for you — there's nothing to replace.

honest limits

When a no-code tool makes more sense.

A license swap fixes the license. It doesn't change who owns the tour afterwards: every copy edit is still a pull request, targeting still lives in your code, and nobody sees completion rates unless you instrument them. If the reason you were paying attention to Intro.js or Shepherd in the first place was a growing onboarding program, consider whether you want to own that code at all.

A hosted, no-code tool moves that work out of your codebase. Wakeline, for instance, runs from one script snippet plus an identify() call, lets non-engineers build tours on the live app, and has a free plan with 3 flows and 1,000 monthly active users, with paid plans from $49/month. If you just need one MIT-licensed tour, Driver.js or React Joyride will do the job with no subscription.

questions

Intro.js & Shepherd.js alternatives: common questions.

Still stuck? Read the docs or talk to us.

Is Intro.js free?

Intro.js is free under the AGPL-3.0 license, which suits open-source, personal and non-commercial projects. For use in a commercial app, website or plugin, the project sells lifetime commercial licenses. Its homepage lists $9.99 for one project, $49.99 for five and $299.99 for unlimited projects.

Is Shepherd.js free for commercial use?

No longer. Shepherd.js moved from MIT to AGPL-3.0 with version 14.0.1 in October 2024. Its license file requires a commercial license for commercial products, revenue-generating companies and internal tools at for-profit companies. The pricing page lists $50 (up to 5 projects) and $300 (unlimited), both lifetime.

What is the best free alternative to Intro.js?

Driver.js for most cases. It's MIT, framework-agnostic and dependency-free, and it covers overlays, popovers, progress and hints. On React, React Joyride is the most established MIT option, and on Next.js NextStep adds built-in multi-page tours.

What is a free alternative to Shepherd.js?

Driver.js is the closest framework-agnostic MIT option. If you used react-shepherd, React Joyride is the MIT React alternative. If you used angular-shepherd, Driver.js works in Angular without a wrapper.

Is intro.js-react MIT licensed?

The wrapper package itself is MIT, but it wraps Intro.js, which is AGPL-3.0. Using the wrapper doesn't change the license terms that apply to Intro.js.

Can I keep using an old MIT version of Shepherd.js?

The version you installed keeps the license it was published under. On npm, 13.0.3 is the last MIT release. Pinning it means giving up fixes and features released since, so treat it as a stopgap and read the license yourself.

Rather not maintain a tour library?

The free plan covers 3 flows and 1,000 monthly active users — enough to compare against the library route on your own app.

Free plan available · No credit card · No demo call