Skip to main content

Does Shepherd.js work with React 19?

Shepherd.js was broken on React 19 for 13 months. See the full compatibility timeline, current status, and React-native alternatives that avoided the gap.

DomiDex
DomiDexCreator of Tour Kit
April 10, 20267 min read
Share
Does Shepherd.js work with React 19?

Does Shepherd.js work with React 19?

Shepherd.js broke on React 19 the day it shipped and stayed broken for thirteen months. The react-shepherd wrapper depended on __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher, a React internal that React 19 renamed. Hard crash: TypeError: Cannot read properties of undefined (reading 'ReactCurrentDispatcher').

Teams that upgraded between January 2025 and March 2026 had no working Shepherd tour until version 7.0.4 landed. Here's the full picture for anyone evaluating Shepherd.js on React 19 today.

npm install @tourkit/core @tourkit/react

Short answer

Shepherd.js technically works with React 19 as of react-shepherd 7.0.4, released March 11, 2026. But the fix was a peer dependency relaxation, not an architectural change. Shepherd's core is written in Svelte, and the React wrapper remains a thin layer around vanilla JavaScript. For React 19 projects, libraries built natively for React (Tour Kit at under 8KB gzipped with an MIT license, or React Joyride) avoid the wrapper indirection entirely.

The 13-month compatibility gap

Here's what happened, with dates from GitHub issue #3102:

DateEvent
January 23, 2025Issue #3102 opened: React 19 crashes Shepherd with TypeError
February 7, 2025A developer who purchased Shepherd Pro reports it doesn't work with React 19 either
July 31, 2025"This library is also preventing us from migrating React 19" (@salimkanoun)
September 10, 2025Same developer migrates away to a different library
October 30, 2025Community criticizes the lack of maintainer response
January 28, 2026Maintainer's first public response: "Are we able to support 18 and 19 if we relax the peerDep?"
March 11, 2026v7.0.4 released with the fix (PR #3339)

Thirteen months is a long time to block a React upgrade. React 19 went stable in December 2024, so this wasn't a niche early-adopter problem. Every team running Shepherd.js faced the same choice: stay on React 18, force-install with --force and hope nothing else broke, or rip out the library entirely.

Why this happened (and could happen again)

Shepherd.js is built in Svelte. The React integration is a wrapper, not a React-native implementation. That architecture means the library depends on React internals to bridge the gap between Svelte's rendering model and React's component lifecycle.

As one reviewer put it: developers "will have to leave JSX behind and work either with HTML strings or plain HTML elements" for advanced Shepherd features (Sandro Roth, Evaluating Tour Libraries). That's the DX cost of a wrapper approach.

The React 19 fix was reportedly just relaxing the peerDependencies constraint from "react": "^18.2.0" to accept React 19. That addresses the install error.

Whether the underlying internal dependency is fully resolved is harder to verify without auditing the source. React's internal APIs change between majors, so the same pattern could repeat with React 20.

Comparison: Shepherd.js vs React-native alternatives

FeatureShepherd.js 15.2.2Tour KitReact Joyride
Core languageSvelte (vanilla JS wrapper)TypeScript (React-native)TypeScript (React-native)
React 19 supportFixed March 2026 (13-month gap)Day-one supportSupported
LicenseAGPL-3.0 (commercial license required)MIT (core packages)MIT
Weekly npm downloads~130K core / ~30K wrapperNew (pre-launch)~706K
Headless modeNo (opinionated styling)Yes (headless-first)Partial
AccessibilityPartial ARIA, no focus trapWCAG 2.1 AA, focus trapBasic ARIA
Positioning engineFloating UIFloating UIFloating UI (via react-floater)
TypeScriptYesStrict modeYes

Downloads as of April 2026 via npm trends.

The AGPL license factor

Shepherd.js uses AGPL-3.0 for its core package. Any company generating revenue needs a commercial license from Ship Shape. The react-shepherd wrapper carries an MIT license, but that doesn't help because AGPL obligations cascade through dependencies. One developer on GitHub issue #3102 wrote that they "just purchased the pro version" thinking it would resolve the React 19 crash. It didn't (at the time).

Both Intro.js and Shepherd.js use AGPL. If license matters to your team, the MIT-licensed options are React Joyride, Driver.js, Reactour, and Tour Kit.

When to choose Shepherd.js anyway

Shepherd.js has genuine strengths. Its SVG-based backdrop supports highlighting multiple elements simultaneously. With 170+ releases and 100+ contributors, it's a mature project with active maintenance. The vanilla JS core means it works outside React too. Running Vue, Svelte, or plain HTML alongside React? Shepherd gives you one library across all of them.

If your project is AGPL-compatible (open source) and you don't need headless rendering or strict accessibility compliance, Shepherd.js at version 15.2.2 does work with React 19 now.

Decision framework

React 19 with zero breakage risk: Choose a React-native library. Tour Kit and React Joyride don't depend on React internals, so major version upgrades won't crash your tours. Tour Kit doesn't have a visual builder and requires React developers, so factor that into your team's capabilities.

Commercial SaaS products: Factor in the AGPL license cost. Shepherd.js requires a paid commercial license for any revenue-generating use. MIT alternatives like Tour Kit don't.

Cross-framework projects: Shepherd.js is one of the few tour libraries that works outside React. Running multiple frontend frameworks? The wrapper tradeoff might be worth it.

Accessibility requirements: Shepherd's ARIA support is still incomplete, with issue #198 about missing ARIA attributes filed in 2018. Tour Kit ships with WCAG 2.1 AA compliance and focus trapping out of the box.

Headless rendering needs: Shepherd ships opinionated CSS. Tour Kit is headless-first, so you render steps with your own components and it works with shadcn/ui, Tailwind, or any design system without CSS overrides.

What we'd recommend

We built Tour Kit, so take this with appropriate skepticism. Every claim here is verifiable on npm, GitHub, and bundlephobia.

For React 19 projects, a React-native tour library removes an entire category of risk. Shepherd's 13-month gap wasn't a fluke. It was the predictable consequence of wrapping a non-React core. React Joyride (~706K weekly downloads) is the established choice. Tour Kit is newer and has a smaller community, but ships headless, accessible, and modular from the start.

Tour Kit's core is under 8KB gzipped with zero runtime dependencies. It doesn't touch React internals. When React 20 lands, your tours won't break.

Get started at https://usertourkit.com/ or install directly:

npm install @tourkit/core @tourkit/react

Frequently asked questions

Does Shepherd.js officially support React 19?

Shepherd.js added React 19 support in react-shepherd 7.0.4, released March 11, 2026. The fix was a peer dependency relaxation via PR #3339. Before that release, Shepherd.js crashed on React 19 with a TypeError from renamed React internals. The 13-month gap left many teams stranded on React 18.

What caused the Shepherd.js React 19 crash?

The react-shepherd wrapper accessed ReactCurrentDispatcher from React's internal module. React 19 renamed this internal, triggering a TypeError at runtime. Libraries that depend on undocumented React internals rather than public APIs carry this risk on every major version upgrade.

Is Shepherd.js free for commercial use?

Shepherd.js uses the AGPL-3.0 license. Any revenue-generating company needs a commercial license from Ship Shape. The MIT license on react-shepherd doesn't help because AGPL cascades through dependencies. Tour Kit, React Joyride, and Driver.js are all MIT and free for commercial use.

What are the best Shepherd.js alternatives for React 19?

For React 19, the top alternatives are React Joyride (706K weekly downloads, MIT), Tour Kit (headless-first, under 8KB gzipped, MIT, WCAG 2.1 AA), and Driver.js (lightweight, MIT). All three are React-native and didn't need patches for React 19.

Will Shepherd.js break again with future React versions?

The risk exists because Shepherd.js is built in Svelte with a React wrapper layer, not as a native React library. Libraries that depend on React internals or bridge between rendering models are more likely to break on major React upgrades. React-native libraries like Tour Kit and React Joyride use only React's public APIs, which reduces this risk.

Ready to try userTourKit?

$ pnpm add @tour-kit/react