Before anyone mentions intro.js. Let me add the details myself on how it is different and why I made it.<p>Intro.js is only for the introductions and didn't allow that level of extensibility. I scratched my own itch with it. This one is much more than just introductions:<p>Unlike intro.js which is only for introductions, you can use this one at any place where you want some sort of overlay for the page. For example, in the application that I am working on, I had several places where I wanted to put an overlay on top of the whole page, except a component (the way facebook does while creating posts), I couldn't do that with intro.js.<p>I wanted the hooks to manipulate the highlighted element for when it is highlighted or the highlight is removed, again couldn't do that with intro.js<p>I wanted to shift the user's focus to some component on the page in my app and then remove the overlay once it has been done, couldn't do that.<p>And on top of all that, intro.js isn't free for commercial use. Driver.js is MIT licensed, is community driven and free for both personal and commercial use.<p>PS. I originally made it using Canvas but there seemed to different behavior and lots of compatibility issues, I just ported it to HTML/CSS to make it more performant and have less compatibility issues. Details here: <a href="https://github.com/kamranahmedse/driver.js/pull/10" rel="nofollow">https://github.com/kamranahmedse/driver.js/pull/10</a>