Back to rankings

uixmat/onborda

TypeScriptonborda.dev

An onboarding wizard flow / product tour for Next.js animated by framer motion

framer-motionnextnextjsonboardingreactsetuptailwindcsswizardproducttourproduct-tourproduct-tours
Star Growth
Stars
1.4k
Forks
67
Weekly Growth
Issues
14
5001k
Mar 2024Dec 2024Oct 2025Jul 2026
Artifactsnpmnpm install onborda
README

Onborda - Next.js onboarding flow

Onborda is a lightweight onboarding flow that utilises framer-motion for animations and tailwindcss for styling. Fully customisable pointers (tooltips) that can easily be used with shadcn/ui for modern web applications.

Getting started

# npm
npm i onborda
# pnpm
pnpm add onborda
# yarn
yarn add onborda

Global layout.tsx

<OnbordaProvider>
  <Onborda steps={steps}>
    {children}
  </Onborda>
 </OnbordaProvider>

Components & page.tsx

Target anything in your app using the elements id attribute.

<div id="onborda-step1">Onboard Step</div>

Tailwind config

Tailwind CSS will need to scan the node module in order to include the classes used. See configuring source paths for more information about this topic.

Note _You only require this if you're not using a custom component.

const config: Config = {
  content: [
    './node_modules/onborda/dist/**/*.{js,ts,jsx,tsx}' // Add this
  ]
}

Custom Card

If you require greater control over the card design or simply wish to create a totally custom component then you can do so easily.

Prop Type Description
step Object The current Step object from your steps array, including content, title, etc.
currentStep number The index of the current step in the steps array.
totalSteps number The total number of steps in the onboarding process.
nextStep A function to advance to the next step in the onboarding process.
prevStep A function to go back to the previous step in the onboarding process.
arrow Returns an SVG object, the orientation is controlled by the steps side prop
"use client"
import type { CardComponentProps } from "onborda";

export const CustomCard = ({
  step,
  currentStep,
  totalSteps,
  nextStep,
  prevStep,
  arrow,
}: CardComponentProps) => {
  return (
    <div>
      <h1>{step.icon} {step.title}</h1>
      <h2>{currentStep} of {totalSteps}</h2>
      <p>{step.content}</p>
      <button onClick={prevStep}>Previous</button>
      <button onClick={nextStep}>Next</button>
      {arrow}
    </div>
  )
}

Steps object

Steps have changed since Onborda v1.2.3 and now fully supports multiple "tours" so you have the option to create multple product tours should you need to! The original Step format remains but with some additional content as shown in the example below!

{
  tour: "firstyour",
  steps: [
    Step
  ],
  tour: "secondtour",
  steps: [
    Step
  ]
}

Step object

Prop Type Description
icon React.ReactNode, string, null Optional. An icon or element to display alongside the step title.
title string The title of your step
content React.ReactNode The main content or body of the step.
selector string A string used to target an id that this step refers to.
side "top", "bottom", "left", "right" Optional. Determines where the tooltip should appear relative to the selector.
showControls boolean Optional. Determines whether control buttons (next, prev) should be shown if using the default card.
pointerPadding number Optional. The padding around the pointer (keyhole) highlighting the target element.
pointerRadius number Optional. The border-radius of the pointer (keyhole) highlighting the target element.
nextRoute string Optional. The route to navigate to using next/navigation when moving to the next step.
prevRoute string Optional. The route to navigate to using next/navigation when moving to the previous step.

Note Both nextRoute and prevRoute have a 500ms delay before setting the next step, a function will be added soon to control the delay in case your application loads slower than this.

Example steps

{
  tour: "firsttour",
  steps: [
    {
      icon: <>👋</>,
      title: "Tour 1, Step 1",
      content: <>First tour, first step</>,
      selector: "#tour1-step1",
      side: "top",
      showControls: true,
      pointerPadding: 10,
      pointerRadius: 10,
      nextRoute: "/foo",
      prevRoute: "/bar"
    }
    ...
  ],
  tour: "secondtour",
  steps: [
    icon: <>👋👋</>,
      title: "Second tour, Step 1",
      content: <>Second tour, first step!</>,
      selector: "#onborda-step1",
      side: "top",
      showControls: true,
      pointerPadding: 10,
      pointerRadius: 10,
      nextRoute: "/foo",
      prevRoute: "/bar"
  ]
}

Onborda Props

Property Type Description
children React.ReactNode Your website or application content.
interact boolean Optional. Controls whether the onboarding overlay should be interactive. Defaults to false.
steps Array[] An array of Step objects defining each step of the onboarding process.
showOnborda boolean Optional. Controls the visibility of the onboarding overlay, eg. if the user is a first time visitor. Defaults to false.
shadowRgb string Optional. The RGB values for the shadow color surrounding the target area. Defaults to black "0,0,0".
shadowOpacity string Optional. The opacity value for the shadow surrounding the target area. Defaults to "0.2"
customCard React.ReactNode Optional. A custom card (or tooltip) that can be used to replace the default TailwindCSS card.
cardTransition Transition Transitions between steps are of the type Transition from framer-motion, see the transition docs for more info. Example: {{ type: "spring" }}.
<Onborda
  steps={steps}
  showOnborda={true}
  shadowRgb="55,48,163"
  shadowOpacity="0.8"
  cardComponent={CustomCard}
  cardTransition={{ duration: 2, type: "tween" }}
>
  {children}
</Onborda>
Related repositories
magicuidesign/magicui

UI Library for Design Engineers. Animated components and effects you can copy and paste into your apps. Free. Open Source.

MDXMIT Licenseframer-motionnextjs
magicui.design
21.6k1.1k
nolly-studio/cult-ui

Components crafted for Design Engineers. Styled using Tailwind CSS, fully compatible with Shadcn, and easy to integrate—just copy and paste. MIT 🤌

TypeScriptnpmMIT Licensecomponentsdesign-engineering
cult-ui.com
6k324
ibelick/motion-primitives

UI kit to make beautiful, animated interfaces, faster. Customizable. Open Source.

TypeScriptnpmMIT Licenseanimatedanimation
motion-primitives.com
5.7k221
steven-tey/precedent

An opinionated collection of components, hooks, and utilities for your Next.js project.

TypeScriptnpmMIT Licenseauthjseslint
precedent.dev
5.1k497
prazzon/Flexbox-Labs

A web app for creating flexible layouts with the power of CSS Flexbox.

TypeScriptnpmMIT Licensereactvite
flexboxlabs.netlify.app
4k361
imskyleen/animate-ui

Fully animated, open-source component distribution built with React, TypeScript, Tailwind CSS, Motion, and Shadcn CLI. Browse a list of components you can install, modify, and use in your projects.

TypeScriptnpmOthercomponentsframer-motion
animate-ui.com
3.9k200
ui-layouts/uilayouts

UI Layouts isn’t just a library. It’s your complete front-end universe with components, effects, design tools, and ready-to-use blocks, everything you need to build modern interfaces, faster.

TypeScriptnpmMIT Licensecomponent-libraryframer-motion
ui-layouts.com
3.5k210
HamishMW/portfolio

My personal portfolio website built using React and three js

JavaScriptnpmMIT Licenseportfoliodeveloper
hamishw.com
3.5k723
danielpetho/fancy

TypeScriptnpmMIT Licenseanimationdesign
fancycomponents.dev
3k103
d3george/slash-admin

A Modern React Admin Template. It is based on React 19, Vite and TypeScript. It's fast !

TypeScriptnpmMIT Licenseadmin-dashboardantd
admin.slashspaces.com
3k556
motiondivision/motion-vue

Motion for Vue

TypeScriptnpmMIT Licenseframer-motionmotion
motion.dev
2.2k60
adrianhajdin/project_professional_portfolio

This is a code repository for the corresponding YouTube video. In this tutorial we are going to build and deploy a real time chat application. Covered topics: React.js, SCSS, Framer Motion, Sanity

JavaScriptnpmreactjssanity-io
jsmastery.pro
2.1k501