Driver.js vs Shepherd.js vs Intro.js: 2026 comparison
The three framework-agnostic tour libraries that every comparison lists. They look similar in a demo, but they differ sharply on the thing that matters most for a commercial product: two of the three are AGPL-licensed and sell commercial licenses.
Last checked: October 10, 2026 — versions, licenses and downloads from the npm registry.
For a commercial product with no license budget, Driver.js is the default: MIT, dependency-free, actively maintained. Shepherd.js is the most configurable of the three and Intro.js the most batteries-included, but both are AGPL-3.0 and require a paid commercial license for revenue-generating use — inexpensive, one-time, and still a procurement step you should know about before you ship.
- Driver.js 1.9.0 — MIT. Free for commercial use.
- Shepherd.js 15.3.0 — AGPL-3.0 or a commercial license ($50 or $300, lifetime, per shepherdjs.dev/pricing).
- Intro.js 8.6.0 — AGPL-3.0 or a commercial license ($9.99, $49.99 or $299.99, lifetime, per introjs.com).
- All three are framework-agnostic and actively maintained in 2026; none handles multi-page tours for you.
Most "best product tour library" articles were written when all three of these were permissively licensed, and many still describe Shepherd.js as MIT. That stopped being true: on npm, shepherd.js 13.0.3 (August 2024) is the last version published as MIT, and every release since 14.0.1 (October 2024) is AGPL-3.0. Intro.js has been AGPL since 2017 and has long sold commercial licenses.
So the pairwise questions people actually search — "driver js vs shepherd js", "shepherd js vs intro js", "driver js vs intro js" — have a licensing answer before they have a technical one. We'll cover both. This isn't legal advice: read each license file and, if your product makes money, ask whoever handles licensing for you.
Technically, the three share an approach. Each works on the rendered DOM, so each runs in React, Vue, Angular or plain HTML. They differ in how much they do for you: Driver.js is a highlighting engine, Shepherd.js is a configurable step engine with a rich event model, and Intro.js is a complete tour-and-hints kit with progress bars, bullets and a "don't show again" option built in.
The comparison table.
| Driver.jsdriver.js | Shepherd.jsshepherd.js | Intro.jsintro.js | |
|---|---|---|---|
| License | MIT | AGPL-3.0 + paid commercial | AGPL-3.0 + paid commercial |
| Current version | 1.9.0 (Oct 3, 2026) | 15.3.0 (Aug 24, 2026) | 8.6.0 (Sep 21, 2026) |
| Framework support | Any — vanilla TypeScript, no framework bindings needed | Any; official React, Angular and Vue wrappers (also AGPL) | Any; community wrappers (intro.js-react is MIT, but wraps AGPL code) |
| Size & approach | ~5 kB gzip per its README; zero dependencies | 15.3 kB gzip incl. 2 dependencies (bundlephobia) | 19.2 kB gzip, zero dependencies (bundlephobia) |
| Multi-page / routes | Not built in; official docs pattern saves the step, then resumes with drive(index). waitForElement since 1.8 | Not built in; beforeShowPromise and waitForElement help across async renders | Not built in; persist progress and restart on the next page yourself |
| Accessibility | Keyboard-controllable; closeBtnLabel sets the close button's aria-label (1.9) | Arrow-key navigation, Esc to exit, per-step aria-label | Keyboard navigation option; check focus handling yourself |
| Styling | Plain CSS file, popoverClass, CSS variables, onPopoverRender hook | Minimal default CSS plus per-step classes — you do the design | CSS file, tooltipClass/highlightClass, registered themes |
| Maintenance | Very active — 1.5 through 1.9 shipped June–October 2026 | Active — 15.x through 2026 | Active — 8.4 to 8.6 shipped July–September 2026 |
| npm downloads, 90 days | 22.4M | 4.0M | 2.5M |
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.
Each one, honestly — with the code.
Driver.js — MIT, tiny, and suddenly very active
- License:
- MIT
- Version:
- driver.js 1.9.0
Driver.js highlights an element, dims the rest of the page, and pins a popover to it; a tour is an ordered list of those. Its README describes it as about 5 kB gzipped with no dependencies, and it's MIT-licensed — which, among these three, makes it the only one you can ship in a closed-source commercial product without buying anything.
It has also had the busiest year of the three: five minor releases between June and October 2026 added skipMissingElement, waitForElement, advanceOnClick, a hints module, and an accessibility pass in 1.9.0 (translatable close-button labels, keyboard behavior that follows visible buttons, restored aria attributes on highlighted elements).
What it leaves out is opinion. There's no built-in "don't show again", no step bullets, no theme gallery. You get hooks such as onNextClick, onDestroyed and onPopoverRender and you build the rest.
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();Shepherd.js — the most configurable, now AGPL
- License:
- AGPL-3.0 + paid commercial
- Version:
- shepherd.js 15.3.0
Shepherd is a step engine with a deep option set: steps attach to elements with Floating UI placement, buttons are declared per step with their own actions, beforeShowPromise can wait for async UI, showOn can skip a step conditionally, and both tours and the global Shepherd object emit events (show, hide, complete, cancel, and more). It also ships official wrappers for React, Angular and Vue.
It is deliberately unstyled — a minimal stylesheet plus per-step classes — so expect to do design work. On accessibility it offers arrow-key navigation, Esc to exit, and a per-step label for steps without a visible title.
The license is the headline. Shepherd's LICENSE.md describes dual licensing: AGPL-3.0 for open-source and non-commercial use, and a commercial license required if you build a commercial product or SaaS, if your company generates revenue (even when the project using Shepherd doesn't), or for internal tools at a for-profit company. Its pricing page lists a Business license at $50 (lifetime, up to 5 projects) and an Enterprise license at $300 (lifetime, unlimited projects). The React, Angular and Vue wrappers are AGPL too.
import Shepherd from "shepherd.js";
import "shepherd.js/dist/css/shepherd.css";
const tour = new Shepherd.Tour({
useModalOverlay: true,
defaultStepOptions: { scrollTo: true, cancelIcon: { enabled: true } },
});
tour.addStep({
id: "new-project",
title: "Create a project",
text: "Everything starts here.",
attachTo: { element: "#new-project", on: "bottom" },
buttons: [{ text: "Next", action: tour.next }],
});
tour.addStep({
id: "invite",
title: "Invite your team",
text: "Tours work better with company.",
attachTo: { element: "#invite", on: "bottom" },
buttons: [
{ text: "Back", action: tour.back, secondary: true },
{ text: "Done", action: tour.complete },
],
});
tour.start();Intro.js — the most batteries-included, AGPL for years
- License:
- AGPL-3.0 + paid commercial
- Version:
- intro.js 8.6.0
Intro.js is the oldest of the three and the most complete out of the box. Tours can be declared in HTML with data-intro and data-step attributes or in JavaScript; options include progress bars, step bullets, keyboard navigation, and a built-in "don't show again" checkbox backed by a cookie. A separate hints API adds pulsing hotspots. The current API is split into introJs.tour() and introJs.hint(); the older introJs() call is kept for backward compatibility.
Intro.js has been AGPL-3.0 on npm since version 2.5.0 in 2017, with a paid commercial license for proprietary use. Its homepage lists three lifetime tiers: Starter at $9.99 (one project), Business at $49.99 (5 projects) and Premium at $299.99 (unlimited projects). Note that intro.js-react, the popular React wrapper, is itself MIT — but it wraps AGPL code, so it doesn't change what you owe for Intro.js.
Bundlephobia measures 8.6.0 at about 19.2 kB gzipped with no dependencies — heavier than Driver.js, roughly in line with Shepherd.
import introJs from "intro.js";
import "intro.js/introjs.css";
introJs
.tour()
.setOptions({
showProgress: true,
steps: [
{ intro: "Welcome! Here's a 30-second tour." },
{ element: document.querySelector("#new-project"), intro: "Everything starts here." },
{ element: document.querySelector("#invite"), intro: "Tours work better with company." },
],
})
.start();Which should you pick?
Commercial, closed-source product, no license budget
→ Driver.js
It's the only MIT library of the three.
You need conditional steps, async waits and a rich event model
→ Shepherd.js
showOn, beforeShowPromise, waitForElement and tour events cover complex flows — budget for the commercial license.
You want progress bars, bullets and "don't show again" without writing them
→ Intro.js
Those are options, not projects — again, commercial use needs a license.
Your project is open source under an AGPL-compatible license
→ Any of the three
AGPL works for you; pick on features.
Smallest footprint on a performance-sensitive page
→ Driver.js
Zero dependencies and the smallest bundle of the three.
You already ship Shepherd or Intro.js under MIT-era versions
→ Check before upgrading
Pinned old versions keep their original license; new versions come with AGPL terms.
When a no-code tool makes more sense.
All three libraries hand you the overlay and the popover. Everything around them — targeting tours to the right users, remembering completion across devices, analytics on where people drop off, letting non-engineers edit copy — is yours to build. Teams that start with a single tour often discover they're maintaining a small onboarding platform a year later.
If that is the direction you're heading, a hosted tool can be cheaper than the engineering time. Wakeline is one such tool: a single script snippet plus an identify() call, tours built visually on the live app, a free plan with 3 flows and 1,000 monthly active users, and paid plans from $49/month. For a single, stable, engineer-owned tour, a library remains the simpler choice.
Driver.js vs Shepherd.js vs Intro.js: common questions.
Still stuck? Read the docs or talk to us.
Is Shepherd.js still MIT licensed?
No. On npm, shepherd.js 13.0.3 (August 2024) is the last version published under MIT; versions from 14.0.1 onward are AGPL-3.0. The project's license file says a commercial license is required for commercial products, revenue-generating companies and internal tools at for-profit companies.
Is Intro.js free?
Intro.js is free under AGPL-3.0, which suits open-source and non-commercial projects. For commercial use it sells lifetime licenses; its homepage lists $9.99 for one project, $49.99 for five and $299.99 for unlimited projects.
Which is lighter: Driver.js, Shepherd.js or Intro.js?
Driver.js. Its README describes it as about 5 kB gzipped with no dependencies. Bundlephobia measures Shepherd.js 15.3.0 at about 15.3 kB and Intro.js 8.6.0 at about 19.2 kB gzipped.
Driver.js vs Shepherd.js: which should I use?
Driver.js if you want MIT licensing and a small, simple highlighter. Shepherd.js if you need its richer step model, such as conditional steps, async waits and an event system, and you're able to buy a commercial license for commercial use.
Do any of these libraries support multi-page tours?
Not natively. Each tour lives on one page. Driver.js documents a resumable pattern: save the next step, destroy the tour, and resume with drive(index) after navigation. The same idea works for Shepherd.js and Intro.js.
Do these work with React, Vue and Angular?
Yes. All three operate on the rendered DOM, so they work with any framework. Shepherd also ships official React, Angular and Vue wrappers, which are AGPL like the core. Intro.js has community wrappers.
Is this legal advice?
No. We summarise what each project's license file and pricing page say as of the date above. If your product generates revenue, read the licenses yourself and check with whoever handles licensing for your company.
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