Research decisions
Record which ecosystem lessons Nuxt Tour adopts and rejects.
Research decisions
The ecosystem research is evidence, not a feature checklist. Nuxt Tour adopts capabilities only when they support its core user journey.
| Source | Adopt | Reject or defer |
|---|---|---|
| Driver.js | Small controller and explicit late-target behavior | DOM-first identity and numeric navigation |
| Shepherd | Preparation, conditional steps, scrolling, and missing-target policy | Large overlapping option surface |
| Intro.js | Promise-based navigation | Legacy method aliases and generic option setters |
| React Joyride | Composable-first control and replaceable rendering | React-specific render contracts |
| NextStep | Routes as a first-class tour concern | Direction-specific nextRoute and prevRoute |
| v-onboarding | Vue refs, slots, focus work, SVG overlay, and Nuxt integration | Component-ref controller and selector-first definitions |
| svelte-tour | Semantic registration of mounted targets | Wrapper components around application markup |
| Floating UI | Positioning, collision handling, and layout updates | Exposing its complete middleware API in normal steps |
| WAI-ARIA | Dialog semantics and modal focus behavior | Calling an interactive card a tooltip |
Driver.js is MIT-licensed and remains an implementation reference. Shepherd and Intro.js are behavior and API references only because their current licensing does not fit a permissively licensed implementation source.
Deliberate changes from the initial research proposal
The shaped v1 is smaller than the initial proposal:
- Direct element refs were removed from
TourStep.target. They register a semantic target instead. - Multiple spotlight targets and a separate scroll target were deferred.
advanceOnwas deferred. Application code can callnext()after a domain action.- Persistence helpers were deferred with persistence itself.
- Generic step metadata was deferred until a concrete consumer needs it.
- The public headless core remains private.
These deletions preserve the distinguishing parts: Nuxt discovery and typing, route-aware transitions, late semantic targets, guaranteed cleanup, accessible Vue rendering, and one composable controller.