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:
-
tourguide-js (Demo) - not to be confused with touguide.js above
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 | ||||
| Custom Actions | onNextClick(), onPrevClick(), onCloseClick() can be disabled and call the API to go to next step in a custom function |
Can remove buttons and call the API to go to next step in a custom function |
onBeforeStepChange(), onAfterStepChange(), onFinish() can be disabled and call the API to go to next step in a custom function |
onTourStep, onTourEnd Vue events |
| Keyboard Navigation | ||||
| License | ||||
| 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?



