mrkeyoor.com_
Fri 16 Oct 20:35 UTC
Webevaluationupdated 16 Oct 2026

driver.js review

Driver.js adds guided tours, highlighted controls, and contextual explanations to an existing webpage. Developers choose the elements and write the instructions, helping users find the next action without sending them to a separate manual.

Verdict

Our Driver.js run passed all 441 tests, with a 13-second install and a successful 26-second build. It is an easy shortlist choice for developers who want to own their tour logic and can maintain the target selectors. Budget application work for asynchronous steps and stored checklist progress before treating onboarding as finished.

We ran it

Lab card: what happened when we ran driver.jsScreenshot of driver.js (driverjs.com)
Install✓ · 13s775 packages · 433 MB
Build✓ · 26s
Tests✓ · 21s441 passed · 0 failed of 441 (vitest)
Repo205 files~12,650 lines of source · 5.4 MB · 1 CI workflows

Answers from our run

Does driver.js build from source?

Dependencies installed in 13 seconds (775 packages), and the build succeeded in 26 seconds. We cloned commit 5f2f1b8 into a clean Debian container with 3 CPUs and no project-specific setup.

Do driver.js's tests pass?

Yes: 441 of 441 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use driver.js?

Teams expecting synchronized checklist history out of the box: the checklist guide says progress storage belongs to the application.

What are the alternatives to driver.js?

React Joyride, Intro.js. Our Driver.

Setup4/513-second repo install; browser integration needs CSS and DOM targets
Docs4/5Useful API examples; contributor paths lag the workspace layout
Community5/526,919 stars with October releases and issue fixes
Maturity4/5441 tests pass; latest release fixes concrete dialog and click defects

Who it’s for

Frontend developers who own their markup and want tours or contextual help with direct element targeting.
Teams that can coordinate tour steps with application state and maintain selectors as screens change.
Products that already have somewhere to save checklist completion and want control over that data.

Who it’s NOT for

Teams expecting synchronized checklist history out of the box: the checklist guide says progress storage belongs to the application.
Interfaces requiring several independent active guided regions: the configuration guide says starting a driver instance closes the active one.
Contributors relying on README paths without checking the tree: its root src and playground instructions do not match the current workspace layout.
Applications keeping older releases around native dialogs: release 1.10.1 specifically fixes hints and popovers in that setting, so verify the version before adoption.

Setup reality

Our sandbox installed commit 5f2f1b8 in 13 seconds, adding 775 packages and using 433 MB. The build passed in 26 seconds. Tests passed in 21 seconds: Vitest reported 441 passed and 0 failed out of 441.

Browser use needs the library, its CSS, target elements, and your tour configuration. Hints and checklists have separate imports and stylesheets. No hosted account or API credential is required for the basic integration; persisting checklist progress needs storage supplied by your application.

The checkout is a pnpm workspace monorepo. Its current packages/driver and apps/playground paths differ from the root paths in the contributor README. Start tours after their DOM targets exist and handle delayed targets explicitly. The supplied lab summary includes no vulnerability audit result.

Driver.js points at the interface you already have

A tour becomes useful when it points at the control someone needs next. Driver.js takes a page element or selector, draws attention to it, and places explanatory text beside it. You can guide a sequence or highlight a single field without turning the whole screen into a tutorial. The TypeScript library suits a developer who owns the interface and wants to decide exactly when help appears. Its MIT license permits personal and commercial use.

Our checkout contained 205 files and roughly 12,650 source lines. That includes a workspace repository around the library, so evaluating it as a contributor means more than looking at the browser-facing API. For an application team, the attraction is direct control: define the target and text, then use lifecycle hooks to coordinate the explanation with your product. The trade is that those selectors and hooks become code your team must maintain when the interface changes.

What happened when we ran it

Our run installed Driver.js commit 5f2f1b8 in 13 seconds, adding 775 packages and occupying 433 MB. The build succeeded in 26 seconds. Tests succeeded in 21 seconds, with Vitest reporting 441 passed and 0 failed out of 441. We ran the checkout on 2026-10-15 in a fresh unprivileged Debian container using lab-node:22, with 3 CPUs, 8 GB of RAM, and no secrets. Every recorded execution step completed successfully.

The checkout occupied 5.4 MB before installation. Our scan identified monorepo workspaces and 1 CI workflow file, with no Dockerfile or tests directory reported by that scan. The directory signal should not obscure the stronger execution evidence: Vitest actually ran 441 tests. No vulnerability audit result was supplied for this run, so the successful checks should not be read as a clean dependency audit. They also do not measure browser bundle size or user onboarding outcomes.

Package use is simpler than the contributor README suggests

The installation guide shows importing driver and its stylesheet, then calling highlight with an element and popover text. A CDN route is available too. Hints and checklists use separate entry points and stylesheets, so include those assets when selecting those features. Basic browser integration requires no hosted service account or API key. In an application that renders on a server, start the DOM-dependent interaction after the relevant browser elements exist.

Our 775-package installation was the repository development environment, rather than a measurement of what a visitor downloads. There is also a documentation mismatch for contributors: the README describes root-level src and playground paths, while the current tree puts the library under packages/driver and the playground under apps/playground. Follow the actual workspace structure when editing code. The successful lab build supports that checkout's viability, but it does not make those README paths correct.

Dynamic targets need an explicit waiting policy

The interactive-tour guide supplies waitForElement for a target rendered on demand and advanceOnClick for continuing when the user clicks a highlighted control. Those options handle a common problem: the next step lives inside a modal that does not exist until the current button is pressed. If waiting expires, the documented choices are a centered fallback popover or skipping the missing target. Decide which behavior makes sense before putting a tour in front of users.

The 441 passing tests do not tell you whether your selectors survive a route transition. More involved asynchronous steps can override onNextClick, do the loading work, and call moveNext afterward. That makes application state your responsibility. A forgotten advance call can strand the tour even when the library works as documented. I would check a slow data response and a target that never appears, because both are plausible states for a real product.

Checklist progress belongs to your application

The checklist guide says the component does not store progress itself. Completed item identifiers come in, and an onProgress callback sends changes out. You can save them in browser storage or your own user record. That is a good fit when your application already has an account model. It adds work if you expected a ready-made onboarding service with persistence across devices and users.

Our 433 MB development environment buys no hosted progress database. You still choose stable checklist identifiers and decide what completing an item means. The configuration documentation also allows only one active driver instance on screen: starting another closes the current one. Teams needing independent simultaneous guided regions should treat that as a design constraint. For a focused explanation of one action, the limit is easy to accept and keeps the interaction predictable.

The October release fixes native-dialog and text-click defects

The latest GitHub release was 1.10.1, published on 2026-10-15, the same date as the repository's last push. GitHub listed 26,919 stars and 9 open issues and PRs on October 16. Release notes connect the update to issue 625, where hints appeared behind native modal dialogs, and issue 626, where a text-node click could throw in a popover. Both reports are closed and the release names the fixes, so neither should be presented as an unresolved current defect.

Our 21-second passing test run makes Driver.js a credible candidate for an application-owned tour. React Joyride is worth choosing when a React component or hook API better matches your app. Intro.js offers an HTML-attribute route, with its own licensing terms to check. I would pick Driver.js for explicit element targeting and direct integration hooks. Before shipping the tour, open your actual modal and complete the intended action using only the keyboard.

Alternatives

ProjectWhat it isPick it when
React JoyrideA React tour library with component and hook APIs.pick this instead when tour state and rendering should follow React components and hooks.
Intro.jsA tour and hint library with an HTML data-attribute setup route.pick this instead when annotating existing HTML is your preferred workflow and its license fits your project.

What people are saying

  1. [velocity-scout] nilbuild/driver.js

Sources

  1. Driver.js README
  2. Browser installation guide
  3. Interactive tours
  4. Configuration reference
  5. Checklist persistence guide
  6. Driver.js 1.10.1 release
  7. Native modal dialog report
  8. Text-node click report

More web reviews

dioramas · elpis · deepseek-whale-girl · floorplan-3d · taro · PriceAI · the whole board →