Log inSign up

How to build a product tour in Vue (Nuxt & Vite Guide)

A complete guide to building a product tour in Vue (Nuxt or Vite). Learn how to create tooltips, modals, onboarding flows, track user progress, and ship tours faster with Flows.

Tooltip example for a product tour in a Vue application

Vojtech VidraDecember 22, 2025

In this guide, you’ll learn how to build a product tour (also known as user onboarding flow or a product adoption guide) in your Vue application. Whether you’re using Nuxt, Vite, or another Vue setup, this tutorial will walk you through everything you need to know.

What are product tours?

A product tour is a guided in-app experience that helps users understand your product when they first sign up or when new features are introduced. Product tours commonly include:

These onboarding patterns help users learn how to use your product without needing direct human support.

An example of a product tour modal in a Vue application

Why do teams use product tours?

Product tours are used to:

As your product grows, well designed tours can significantly improve activation and engagement.

What goes into building a product tour?

Before you start building, it’s helpful to understand all the moving parts behind even a simple tour. You’ll need:

Depending on your product, you might also need:

Once you add all these requirements, building a complete solution in-house becomes surprisingly complex.

UI elements

In Vue, you have several options to create the UI for product tours. You can use dedicated packages like vue-tour, vuejs-tour, v-onboarding, shepherd.js, intro.js, or driver.js, or use the components already in your design system (e.g. Dialog or Popover from primevue).

These options can help you build the tour UI quickly, but keep in mind that they don't solve the other critical parts of real onboarding flows, like content management, user targeting, analytics, or state tracking.

Product tours in Vue vs Nuxt

If you're using Nuxt, product tours introduce a few extra considerations, such as client-only rendering and hydration timing. Tour steps that rely on DOM elements should only run after the page is fully mounted on the client.

With Flows, this complexity is handled for you, tours automatically wait for the relevant elements to exist before rendering, whether you're using Vue with Vite or Nuxt with SSR enabled.

Managing product tour content

Tour content includes text, labels, images, and links. If your product changes frequently, your tour will need updates too. To manage the content, you have two choices:

Many teams prefer letting non-engineering roles manage this content to avoid unnecessary interruptions and deployments.

Screenshot of the content management settings in Flows

User state tracking

For tours to work properly, you need at least to track if a user has seen (or completed) a tour to prevent showing it to them every time they log in. When tours span multiple screens and take more than a few steps, it’s also good to remember the user’s progress so the tour can resume if they come back or reload the page.

You might be tempted to store user state in the browser’s local storage, but for any Vue app where users sign in (especially if they may use multiple devices) the state should be stored in your database instead.

To achieve all of this in-house, you will need to create API endpoints, a new database table (or column) to store the user state, and logic to decide when each tour should appear.

Without proper state management, users may see the same tour repeatedly, lose their progress, or never see the tour at all.

Screenshot of the user state tracking in Flows

Additional requirements

Depending on your product’s complexity, you may also need:

Localization

If you support multiple languages, your onboarding needs to be multilingual, increasing the complexity of the content management you need to build.

Analytics

Your product team will likely want to track the performance of each tour. For example:

To achieve this, you will need to create an integration into your existing analytics stack or build something from scratch.

Screenshot of tour analytics in Flows

Segmentation

As you introduce more tours, targeting the right users becomes essential. For example, you might want to show tours only to users who:

And again, most of these filters will be defined by non-engineering teammates who manage the product experience, and they’ll want to control them without needing developer involvement or deployments.

Screenshot of the user properties settings in Flows

Build your product tour faster with Flows

Everything described above (UI, targeting, user state, analytics, environments, content, segmentation, and even extras) can be solved with Flows in a fraction of the time.

Plus, for UI elements, you don't need to use our built-in components (even though we think they are really good). You can bring your own Vue components directly from your design system. This gives you complete control to implement tours that meet your UI and UX requirements.

We built a fully customizable product adoption platform so you don't need to. Here’s how to use it to build your tour.

Step 1: Installation

Sign up for Flows and create an organization. Then install the NPM package and follow our quick installation guide to integrate init() into your Vue app (or view our Vue template project). Once you have that set up, return here to continue.

Step 2: Create your tour workflow

In the Flows dashboard, start building your tour by creating a workflow that will contain your tour content and logic. After creating the workflow:

  1. Add a Start block - these define how and which users enter the tour (you can customize the targeting later).
  2. Add a Tour block - this is where you define individual steps.
  3. Inside the Tour block, add two steps:
    1. Modal
    2. Tooltip

To edit each step, click them in the Steps section and fill out their properties. You can update the title, body text, buttons, and other options that control how the components look and behave. If you are a visual learner, follow the video below:

Step 3: Preview and test your tour

Once your steps are added, it’s time to test the tour. Set up a staging environment in Settings > Environments, then update the environment prop in init() to match the staging environment name.

Screenshot of the environments settings in Flows

Back in Flows, publish the workflow by clicking Publish in the top right corner and selecting stage in the environments list.

Screenshot of the publish dialog in Flows

Now, when you start your Vue app, you should see the first step of the tour (it is possible that you will need to reload the page if you already had the app running before changing the environments). If you have any issues, you can debug by looking into the browser console or by using our SDK’s debug mode.

Step 4: Publish to production

When you’re happy with the tour, deploy your Vue app with the init() integration and switch the environment prop back to production.

When that is live, you can again hit Publish in the workflow and choose the production environment this time. Since this is going into production, make sure to select the right frequency in the publish dialog (you can leave the migration option as is, this option is useful when republishing a workflow to let Flows know how to migrate the active users into the new version).


That’s it, you’ve successfully built a complete tour in Vue using Flows.

Instead of building UI, state management, targeting, analytics, environments, and content tools yourself, Flows handles all of it. So you can focus on building your product, not maintaining onboarding infrastructure.

If you’re ready to ship better onboarding, faster, try Flows.

Looking for other frameworks?

If you're building product tours in a different framework, check out our other guides:

Get started today!

Build the product adoption experiences you've always wanted.

Get started for free

No credit card required. Free forever.