
Quick answer: for a proprietary product with no licence budget, Driver.js is the framework-agnostic default — MIT-licensed, no dependencies, and enough for most linear tours. Shepherd.js is the most complete framework-agnostic library and Intro.js is capable, but both are AGPL-3.0, with commercial licences sold for proprietary use. Shepherd.js was MIT until version 14 in October 2024, so a lot of older advice — including an earlier version of this page — still calls it MIT. That is the single most common surprise in this category. React Joyride and Reactour are the React-shaped options, the first heavier and more capable, the second lighter. Floating UI is not a tour library at all but is what you reach for when you are building the positioning layer yourself. Check licences first; the APIs are more alike than the terms are.
Every library on this list solves the same visible problem: put a highlighted box next to an element and step through a sequence. That is the part that demos well and the part that takes an afternoon. What decides whether a library was the right choice is everything that is not rendering — targeting, persistence, resilience when the DOM changes, content updates without a deploy, and measurement. Those are covered further down, honestly, because they are the work that arrives in month two.
| Library | Framework | Licence note | Best for |
|---|---|---|---|
| Shepherd.js | Agnostic | AGPL-3.0 since v14 (Oct 2024); commercial licence for proprietary apps | Most complete, if the licence fits |
| Driver.js | Agnostic | MIT | Default for proprietary apps, no dependencies |
| Intro.js | Agnostic | AGPL-3.0; commercial licence for proprietary apps | Capable, if the licence fits |
| React Joyride | React | MIT | React apps wanting a component API |
| Reactour | React | MIT | Lighter React option |
| Floating UI | Agnostic | MIT | Positioning only, you build the rest |
Licence terms checked September 2026 and they do change — verify on each project's own site before you ship, not after legal asks.
Shepherd.js is the most complete library here: mature, framework-agnostic, good keyboard and focus handling, and a step model that survives real applications. Its licence is the catch. Since version 14 it is AGPL-3.0, and the project states that commercial apps, websites and plugins need a commercial licence. If you are building an open-source product, or you are happy to buy that licence, it is still the strongest choice. If neither applies, it is not the default it used to be.
Driver.js is now the sensible default for proprietary products: MIT, no dependencies, a small API, and enough capability for a linear tour with highlights. If the requirement is genuinely "walk a user through four things once", it is hard to justify anything larger.
Intro.js is a good library with a licence that catches people out. It is published under AGPL-3.0 rather than MIT, and the project sells commercial licences for proprietary use. Nothing wrong with that — it is a legitimate model and the project is well maintained — but teams install it the way they install any npm package and find out later. Check first.
React Joyride and Reactour both give React apps a component-shaped API instead of an imperative one, which matters more than it sounds when tours need to react to application state. Joyride is the heavier and more capable; Reactour is lighter and quicker to reason about.
Floating UI belongs here as the honest bottom layer. It does positioning — anchoring, collision detection, flipping — and nothing else. Several of the libraries above use it or something like it internally. Reach for it when you are building a tour into your own design system and want the hard geometry solved.
Five things, in roughly the order teams hit them. Targeting: which users see this tour, once, and not again — which means a persistence store and a rule layer, not a localStorage flag, as soon as a user has two devices. Resilience: what happens when the element the step points at does not exist yet, or never renders. This is the one that produces the worst user-visible failure and it is covered in our SPA tour target recovery specification.
Content changes: every copy edit is a deploy unless you build a content store. Measurement: a library fires callbacks; turning those into an answer about whether the tour helped needs an exposure model and a definition of completion, which our completion-versus-activation report covers. And non-developer editing: if anyone outside engineering will change a tour, that is a product you are now maintaining internally.
None of that argues against libraries. For a handful of tours owned permanently by a developer, a library is clearly right and a platform is overhead. The honest split is by who edits the tours and how much you need to know about their effect — and PLG OS exists on the other side of that line, so take this framing as ours and check it against your own situation.
Which library should I start with?
Driver.js for a proprietary product, Shepherd.js if the AGPL or a commercial licence suits you, Joyride or Reactour in React. Verify the licence before the API.
Are Shepherd.js and Intro.js free?
Not for a proprietary product without a commercial licence. Both are AGPL-3.0 — check the licence field on the exact version you install, and ask counsel whether AGPL obligations apply to what you ship.
When does a library stop being enough?
When a non-developer needs to edit tours, when you need targeting across devices, or when you need to know whether the tour changed behaviour. All three are buildable; all three are more work than the tour itself.