Guide your users through a tour of your app

Overview

Shepherd.js Logo

npm version Download count all time npm FOSSA Status npm bundle size Build Status Maintainability Test Coverage StackShare

Guide your users through a tour of your app

Browsers support

IE / Edge
Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
Edge last 2 versions last 2 versions last 2 versions

Documentation

API documentation

Demo

Demo

Contributing

We encourage contributions of all kinds. If you would like to contribute in some way, please review our guidelines for contributing.

License

MIT License

Projects Using Shepherd

Here we showcase some of the awesome libraries built using Shepherd.

JS Framework Wrappers

ember-shepherd

Ember addon for the site tour library Shepherd

angular-shepherd

An Angular wrapper for the site tour library Shepherd

react-shepherd

A React wrapper for the site tour library Shepherd

vue-shepherd

A Vue wrapper for the site tour library Shepherd

Rails gems

abraham

Rails engine that generates and tracks Shepherd tours within an application

Websites and Apps

SimplePlanner

SimplePlanner uses Shepherd to help new users get familiar with its collaborative scheduling approach. You do need to sign up via OAuth or email to see the scheduling tour. Check out the Envato Tuts+ Startup Series on its codebase which describes how Simple Planner was built.

Brokermate

Brokermate uses Shepherd to guide users through initial setup steps.

Snapsure

Snapsure uses Shepherd to help photographers learn how to set up alerts for their desired picture-perfect weather conditions.

Your Project Here

If you have a cool open-source library built on Shepherd, PR this doc.

License

FOSSA Status

Comments
  • Accessibility support

    Accessibility support

    I'm part of a team that has been looking at using Shepherd (and ember-shepherd) within one of our externally-facing Ember sites, however we've noticed that the accessibility support is fairly minimal - there are no ARIA attributes on any Shepherd elements and the semantic markup could be improved (no nav tag around the navigation buttons, for example).

    I know there was an issue #26 raised along these lines but it was closed without explanation late last year.

    I realize that this is a period of transition in terms of the stewardship of Shepherd but I was wondering if any efforts were being planned in this regard.

    enhancement a11y 
    opened by gorner 46
  • IE11 support is broken

    IE11 support is broken

    The README.md states that Shepherd still supports IE11, but the dist and demo (latest beta) give JavaScript errors. So Shepherd doesn't work with IE11 right now.

    Is there a way to fix these issues or build Shepherd with IE11 support? There are still a lot of IE11 users on our platform (> 10%).

    The lambda's are definitely breaking for IE11, see following example:

    // returns true if 'el' should be allowed to receive touchmove events
      const allowTouchMove = el => locks.some(lock => {
        if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {
          return true;
        }
    
        return false;
      });
    
    bug 
    opened by rubnig 34
  • Progress dots for steps

    Progress dots for steps

    Is a progress indicator planned? Something like a set of dots denoting each step, and clicking a dot can take you to steps back.

    Current step and total steps can currently be had as you suggested here: https://github.com/shipshapecode/shepherd/issues/427

    feature request 
    opened by IamSachin 31
  • useModalOverlay not working after few steps

    useModalOverlay not working after few steps

    There are few addStep I used, however, after step four, the overlay doesn't create an opening around my remaining target element (next step till the end).

    Untitled

    Does anyone know how to solve this problem? Please help :( Thank you in advance!

    question 
    opened by porespod 29
  • ES2015 imports not working

    ES2015 imports not working

    Hi, first of all thank you for maintaining this module. I am trying to upgrade from tether-shepard and lots of things have changed.

    I have tried both with 2-beta.14 and 2-beta.15 and get two different errors depending on the version.

    in 2-beta.14 i get an error TypeError: __WEBPACK_IMPORTED_MODULE_1_shepherd_js___default.a.Tour is not a constructor importing it like this:

    import Shepherd from 'shepherd.js';
    import Popper from 'popper.js';
    window.Popper = Popper;
    window.Shepherd = Shepherd;
    
    export function initTour() {
      return new Shepherd.Tour({
        defaults: {
          classes: 'shepherd-theme-default',
          scrollTo: true,
          showCancelLink: true,
        },
      });
    }
    

    in 2-beta.15 i get the error: TypeError: Popper is not a constructor

    In node_modules/shepherd.js/dist/js/shepherd.js:430 at this.popper = new Popper(opts.element, this.el, popperOpts);

    Any idea on what I am missing? Does Shepherd work when it is used within an es6 module?

    Some advice would be greatly appreciated!

    bug 
    opened by janusch 27
  • Buttons behind tour shouldn't be clickable?

    Buttons behind tour shouldn't be clickable?

    On the GitHub demo page, shouldn't I be disallowed from clicking on buttons outside of the tour unless I exit the tour or the tour specifically tells me to press a button?

    opened by ilanbiala 25
  • Content is blocked by

    Content is blocked by "hidden" steps

    When a tour is hidden because the target is not visible on the page (e.g. because of a media query), it is blocking/masking the content behind it. This is because it's still rendered (always in the top-left corner of the document) with just opacity: 0;.

    Is this a known problem?

    Demo

    https://codepen.io/snap/pen/yLYXQmG

    Possible fix

    .shepherd-element[data-popper-reference-hidden]:not(.shepherd-centered) {
      opacity: 0;
      pointer-events: none; /* <- added */
    }
    
    bug 
    opened by sn3p 22
  •  useModalOverlay does not play well with multiple instances on the page

    useModalOverlay does not play well with multiple instances on the page

    Reduced Test Case Fiddle

    https://jsfiddle.net/h8gwus79/

    Version: whatever version https://shipshapecode.github.io is using right now

    // never started 
    const unused = new Shepherd.Tour({
      defaultStepOptions: {
        classes: 'shadow-md bg-purple-dark',
        scrollTo: true
      },
      useModalOverlay: true
    });
    
    // we start this one
    const tour = new Shepherd.Tour({
      defaultStepOptions: {
        classes: 'shadow-md bg-purple-dark',
        scrollTo: true
      },
      useModalOverlay: true
    });
    
    tour.addStep('example', {
      title: 'Example Shepherd',
      text: 'Creating a Shepherd is easy too! Just create ...',
      attachTo: '#someImg',
      advanceOn: '.docs-link click'
    });
    
    tour.start();
    
    <img src="https://img.kizuna.austinpray.com/images/879bf634e1ea4e63928dc36c4ac3add1.jpg" id="someImg" />
    

    Current Behavior

    Active step is not highlighted

    image

    note the duplicate shepherdModalOverlayContainers

    image

    Expected Behavior

    Active step is highlighted

    image

    Comments

    1. I would expect shepherd to not touch the dom at all until tour.start()
    2. The insertion of the svg overlay should be idempotent
    bug 
    opened by austinpray 22
  • Allow highlighting multiple elements per step

    Allow highlighting multiple elements per step

    Hi,

    I want to attach a step to an element with fixed width & height, this element has a div child (a dropdown content) positioned with the "absolute" css property.

    When i configure the attachTo; element: '.parent-element'. the opac layer cover the entire screen, except my element, but the child element is not visible and covered by the opac layer.

    Do you have any solution to not cover the parent element and his child ? or a way to specify multiple highlighted elements ?

    Thanks

    feature request 
    opened by jujaysmile 21
  • overlay misbehaviour

    overlay misbehaviour

    I'm using shepherd-react and I'm getting a strange behavior with the highlighted div, only the visible part on the screen is highlighted while the other part is not, and it stills like that after scrolling

    I'm using a basic config four the tour and the steps, unfortunately I can't attach the code because it's a large react app here is a screenshot of the problem

    wontfix 
    opened by imadyaici 19
  • Add support for all Tether attachment positions

    Add support for all Tether attachment positions

    Unless I'm missing something, it seems that Shepherd only supports "top, bottom, left, right" as options within the attachTo option.

    It would be nice to add the ability to position items using "top left" or "bottom middle", etc.

    http://github.hubspot.com/tether/#attachment

    enhancement 
    opened by evitolins 19
  • Adding an example use case of shepherd to Read Me

    Adding an example use case of shepherd to Read Me

    Adding an example use case of shepherd to Read Me

    It's a plugin for an open source application called Budibase. The plugin allows you to easily create interactive walkthroughs.

    opened by JayP718 0
  • add funtion support for confirmCancel

    add funtion support for confirmCancel

    demo

    Promise function:

    // TypeScript
    {
      ...
      confirmCancel: () => {
        return new Promise<boolean>((resolve) => {
          // my dialog component
          dialog
            .open(
              "Are you sure you want to stop the tour?",
              "You can watch it again in setting paddle"
            )
            .then((res: boolean) => {
              resolve(res);
            });
        });
      },
      ...
    }
    

    https://github.com/shipshapecode/shepherd/blob/1076b0c37465cb48968b5f7159e08033cceaab20/test/unit/tour.spec.js#L295-L335 Unit tests have been passed.

    opened by taozhiyu 0
  • Uncaught ReferenceError: must call super constructor before using 'this' in derived class constructor

    Uncaught ReferenceError: must call super constructor before using 'this' in derived class constructor

    I've installed shepherd.js as a node module using npm (version 10.0.1), and I'm getting this message when attempting to create a tour:

    Uncaught ReferenceError: must call super constructor before using 'this' in derived class constructor


    My code is the following:

    import Shepherd from 'shepherd.js';

            this.tour = new Shepherd.Tour({
                useModalOverlay: false,
                defaultStepOptions: {
                    classes: 'shadow-md bg-purple-dark',
                    scrollTo: {behavior: 'smooth', block: 'center'},
                },
            });
    

    The debugger points to this line of code:

    class Tour extends Evented {
              /** ... **/
    	  constructor(options) {
    	    var this$1 = this;   // <----  This is where the exception is raised
    
    	    if (options === void 0) {
    	      options = {};
    	    }
    
    	    super(options);    // <--- complains this should have already been called?
    

    When I download and included the file from the releases page manually in my app, it doesn't raise the exception. I'm a little confused as to why it works that way but not when I use the version from npm?

    opened by skjbulcher 0
  • Direction bias when using `auto`

    Direction bias when using `auto`

    To add on to this closed issue, would it be possible to specify a direction bias for the auto property?

    Something like auto-left auto-left-end etc.

    Currently Shepherd seems to have a bias for the right side in auto mode when there is enough space for it to be anywhere.

    Screen Shot 2022-10-27 at 10 12 52 PM

    Here's the CodePen I used for the screenshot. https://codepen.io/RazeiXello/pen/ExRjyLW

    opened by RazeiXello 2
  • Disable autofocus of step content via step options

    Disable autofocus of step content via step options

    Hey there!

    I'd like to "re-discuss" #1588 - I have the same use case, in which I would like to keep an input in the highlighted app part focused, and not have the step popup take focus away. Currently, you use floating-ui to focus the step element after 300ms timeout (see here).

    I understand that this is something where you would like to figure out a general strategy around a11y. In my case, I would however rather disable this behavior entirely via some step option autoFocus = false or something like that. Would you accept a PR that introduces this ability, or you would not like to have such changes until you have a clearer position on this topic overall?

    opened by DaDom 3
Releases(v11.0.1)
Owner
Ship Shape
Ship Shape is a consultancy that specializes in using Ember and Nuxt to create progressive web applications.
Ship Shape
A better way for new feature introduction and step-by-step users guide for your website and project.

Intro.js v3 Lightweight, user-friendly onboarding tour library Where to get You can obtain your local copy of Intro.js from: 1) This github repository

usablica 21.7k Jan 2, 2023
An interactive guide for web page elements using jQuery and CSS3

pageguide.js An interactive, responsive, and smart guide for web page elements using jQuery and CSS3. Works great for dynamic pages and single-page ap

Tracelytics 912 Dec 25, 2022
Simple, flexible tours for your app

Tourist.js Tourist.js is a simple library for creating guided tours through your app. It's better suited to complex, single-page apps than websites. O

null 1.2k Dec 6, 2022
Simple overlay instructions for your apps.

Chardin.js Simple overlay instructions for your apps. Check out a demo. Or demo sequential stepping. Chardin.js is a jQuery plugin that creates a simp

Pablo Fernandez 5k Jan 5, 2023
Welcome to Space Traveler's HUB, this web app allows the user to take a fictional tour across the space.

Welcome to Space Traveler's HUB, this web app allows the user to take a fictional tour across the space. The user can choose a rocket from our catalog interface, and reserve it. Also, the user can see recent special missions and join them. Finally, the user will be able to keep track of all your rockets and mission they are subscribed to. Build with React, Redux, React-router, and Railwindcss.

Mihreteab Misganaw 3 Jan 27, 2022
Journeys is a django based community-focused website that allows users to bookmark URLs (through chrome extension) and share their journeys through timelines.

Journeys is a django based community-focused website that allows users to bookmark URLs (through chrome extension) and share their journeys through timelines. A timeline is a collection of links that share a common topic or a journey of building and learning something new. Users can create timelines, share them publicly, and explore resources.

Students' Web Committee 14 Jun 13, 2022
JS Cloudimage 360 View - A simple, interactive resource that can be used to provide a virtual tour of your product

JS Cloudimage 360 View - A simple, interactive resource that can be used to provide a virtual tour of your product

Scaleflex 1.9k Jan 7, 2023
jQuery feature tour plugin.

Joyride Joyride is an easy to configure site tour wizard for Foundation for Sites. Demo You can try out Joyride on the Demo Page. Installation To inst

zurb 1.4k Dec 8, 2022
This repo holds my work on Angular tutorial Tour of Heroes.

TourOfHeroes This project was generated with Angular CLI version 14.2.3. Development server Run ng serve for a dev server. Navigate to http://localhos

Veronica Goranova 2 Sep 21, 2022
Using a RPI 3b+ to create a PT camera accessible through Windows browser and controllable through MQTT

web-camera_PT A Web flask server converts the MJPEG stream from RPI to JPG img using opencv, then display in browser. Controls added to move Camera in

null 11 Dec 20, 2022
A better way for new feature introduction and step-by-step users guide for your website and project.

Intro.js v3 Lightweight, user-friendly onboarding tour library Where to get You can obtain your local copy of Intro.js from: 1) This github repository

usablica 21.7k Jan 2, 2023
To-Do list a web app for tracking personal progress through the day. Users can input a list of tasks and mark them as completed once they are done. Built with JavaScript and Webpack

To-do-List-Project To Do List Project Description. This project creates a simple HTML list of To Do tasks. It was built using webpack and served by a

Olawale Olapetan 7 Jul 8, 2022
A URL Shortener That Allow Users To Interact With Its API Through A Discord Bot

Shortem A URL Shortener That Allow Users To Interact With Its API Through A Discord Bot About Supports Multiple Databases Performant Uses discord.js v

Bots Studios 19 Sep 1, 2022
RANDM - a dating application that helps users find matches through randomization

RANDM - The Random Dating App RANDM is a dating application that helps users find matches through randomization. While other dating apps on the market

Jennifer Cole 9 Oct 31, 2022
This is the backend of Wherechat, which is a chat application that allows users to find and meet each other through their location on the map.

wherechat-backend About the project This is the backend of Wherechat, which is a chat application that allows users to find and meet each other throug

Isaac Ndala 5 Nov 23, 2022
A health-focused app for users to be able to track workouts and nutritional data with a social media component to inspire friendly competition among the users.

A health-focused app for users to be able to track workouts and nutritional data with a social media component to inspire friendly competition among the users.

Jon Jackson 3 Aug 26, 2022
This project is a To-do list app which users can store and edit their Todo Tasks. Users can also change the order of their todo

Project This project is about a todo app bundling using webpack Additional description about the project and its features. Built With HTML CSS Javascr

Richmond Adu-Kyere 2 Jun 17, 2022