Library choice for the new Guided Tour Extension

Hello everyone,

This proposal is related to the discussions in the Guided Tutorial Extension Proposal #1. The idea for this post is to choose which library to use for the new Guided Tour Extension.

CC @mleduc @surli @tkrieck @ChiuchiuSorin

The Guided Tour Extension would consist of two main parts:

  • Tour - highlight UI elements and guides users through the interface (similar to the current Tour Extension)

  • Task-tracking - keep track of quest progress, completed/skipped/available tasks, allows to resume/reset tasks

This proposal is for the Tour part only. The Task-tracking part should use XWiki as a backend and a custom frontend, so we’ll see if we need a library for it in another proposal (but it may not be necessary).

For the Tour part, the current Tour Application uses bootstrap-tour, which hasn’t been updated in 5 years. Some of the alternative libraries that were looked at:

User Tour, Shepherd, Intro.js : License incompatible with XWiki (they all use AGPL-3.0)

Lusift, tourguide.js, Vue Tour, Vue Page Guide, Onborda, guida.js: Not maintained (No updates in the last year)

vue-onboarding-tour, guida.js: Few committers

That leaves us with 4 choices:

Decision Matrix

You can check out the decision matrix in the Design Page .

Name driver.js (Demo) v-onboarding (Demo) tourguide-js (Demo) vuejs-tour (Demo)
Activity First Commit: 3 Mar 2018
Last Commit: 19 Nov 2025
Last Release: 19 Nov 2025
Number of releases: 19
Last 6 months: 1 committer
Total committers: 48 (+1 bots)
GitHub Stars: 25k
Activity Chart:
First Commit: 8 Dec 2021
Last Commit: 23 Jan 2026
Last Release: 23 Jan 2026
Number of releases: 31
Last 6 months: 1 committer
Total committers: 8 (+2 bots)
GitHub Stars: 199
Activity Chart:
First Commit: 11 Nov 2022
Last Commit: 6 May 2025
Last Release: 6 May 2025
Number of releases: 12
Last 6 months: 0 committers
Total committers: 10 (+0 bots)
GitHub Stars: 724
Activity Chart:
First Commit: 7 Dec 2022
Last Commit: 30 Jan 2026
Last Release: 30 Jan 2026
Number of releases: 43
Last 6 months: 2 committers
Total committers: 6 (+1 bot)
GitHub Stars: 106
Activity Chart:
Size 83kB Unpacked Size (npm)
25.24kB - minified js & css only (21.3kB + 3.94kB)
85.6kB Unpacked Size (npm)
24.71kB - minified js & css only (22.3kB + 2.41kB)
139 kB Unpacked Size (npm)
48.76kB - minified js & css only (44.3kB + 4.46kB)
123kB Unpacked Size (npm)
?15.82kB - minified js & css only (?13.8kB + 2.02kB)
Vue compatible TypeScript Library (framework agnostic)
Could use the Vue Composition API
Vue3 native TypeScript Library (framework agnostic)
Could use the Vue Composition API
Vue3 native (Composition API)
Custom popup DOM :white_check_mark: Yes (callbacks)
:white_check_mark: Backdrop: Yes (+supports cutout for element)
:white_check_mark: Yes (Vue Slots)
:white_check_mark: Backdrop: Yes (+supports cutout for element)
:white_check_mark: Yes (property)
:white_check_mark: Backdrop: Yes (+supports cutout for element)
:white_check_mark: Yes (Vue Slots)
:white_check_mark: Backdrop: Yes
Custom Actions :white_check_mark: Yes (callbacks configurable per step)
onNextClick(), onPrevClick(), onCloseClick() can be disabled and call the API to go to next step in a custom function
:white_check_mark: Yes (callbacks)
Can remove buttons and call the API to go to next step in a custom function
:white_check_mark: Yes (callbacks)
onBeforeStepChange(), onAfterStepChange(), onFinish() can be disabled and call the API to go to next step in a custom function
:white_check_mark: Yes (callbacks)
onTourStep, onTourEnd Vue events
Keyboard Navigation :white_check_mark: Yes :cross_mark: No (can be implemented through callbacks) :white_check_mark: Yes :white_check_mark: Yes (new feature, disabled by default)
License :white_check_mark: MIT :white_check_mark: MIT :white_check_mark: MIT :white_check_mark: MIT
Notes + Large community, involved with PRs and issues
- Project seems to be picked up again after a long period of inactivity
+ Can be integrated with Vue 3 by using the composition API pattern. Some repos exist, but are not maintained: https://github.com/wobsoriano/vue-driver
Other integration examples: https://deepwiki.com/kamranahmedse/driver.js/4.3-integration-examples
- Many stale PRs
- Only 1 constant contributor. The project is developed only by 1 person, but the community seems to be actively involved in it
- Looks like an activity spike recently after a long break, might be misleading. activity frequency
- Only 1 constant contributor
- Small community
+ Performance was pretty smooth in my experience
Uses Floating-ui for tour positioning. Floating-ui is a open source, MIT licensed project. It is well maintained by multiple contributors.
- Issue with Vue integration
- Only 1 constant contributor
- Small community
- Still in alpha version
+ Can save to local storage
+ Can switch between 2 tours on the same page
- Accessibility features are disabled by default (they are a recent addition

Conclusion

All libraries offer roughly the same features (v-onboarding missing keyboard navigation), but since all libraries provide some sort of hooks/callbacks on step, any missing functionality can be implemented using them.

We would propose to go with the more popular one, driver.js, since it is more likely to be supported in the future, even if the current maintainer steps down.

What do you think?

1 Like

+1 for driver.js. Mainly due to customizability, and larger community.

1 Like

Thanks @KebabRonin

Same for vue tour and vuejs-tour, also not the same projects :slight_smile:

To highlight some other points that helped us pick a library:

  • tourguide-js has issues when integrated with Vue.
  • v-onboarding lack of native support for keyboard navigation is not a good sign of accessibility.

So +1 as well for driver.js as it seems to have a significantly larger community than vuejs-tour.

+1 to start with driver.js we discussed it and indeed it sounds like best fit to work with.

Considering the votes above, we’ll continue with the driver.js library.

1 Like