Guide is Kakadu’s real-time guidance tool. It gives your users contextual help right where they are, exactly when they need it. Kakadu Guide consists of a browser extension (the recorder) and a lightweight website script (the player).
The Player is a small script that you add to your website to display and run real-time guides. Player releases and downloads are available in our GitHub repository. Please get in touch with Tina if you don’t have access.
The latest version of the player is v2.1.1.
The Recorder is a browser extension that lets you create guides on your website. The latest version of the recorder is v2.1.1.
Once installed, the recorder is available in your browser’s toolbar. To start recording a guide, click the recorder button when on a website, then follow the instructions in the sidebar that appears.
The customer ID is provided to you by us. If you don’t have it, lost it, or otherwise need assistance, please get in touch with Tina at Kakadu.
To display and run real-time guides on your website, you need to install the player. When fully loaded, it is just under 200 KB of JavaScript and CSS.
To get started, install the guide.script.js script on your website:
The latest version of the player is v2.1.1.
For example:
<script type="text/javascript">
((s,o,n,i,u,l,p)=>{var g;try{const a=[],t=r=>Array.from(r),e=r=>{a.push(r)},y=p??"https://guide.kakadu.no";s[n]||(s[n]={apiUrl:y,assetUrl:l,version:u,customerId:i,queue:a,async load(){e(["load",...t(arguments)])},async prefetch(){e(["prefetch",...t(arguments)])},async start(){e(["start",...t(arguments)])},async end(){e(["end",...t(arguments)])},addListener(){e(["addListener",...t(arguments)])},removeListener(){e(["removeListener",...t(arguments)])}});const c=s[n];c.apiUrl=y,c.assetUrl=l,c.version=u,c.customerId=i;const f=`${l}/player/${u}/guide.js`;if(!o.querySelector(`script[src="${f}"]`)){const r=o.createElement("script");r.src=f,r.async=!0;const m=o.querySelectorAll("script")[0];(g=m.parentNode)==null||g.insertBefore(r,m)}}catch(a){console.error(a)}})(window,document,"kakadu","YOUR_KAKADU_GUIDE_CUSTOMER_ID","v2","https://guide.kakadu.no");
</script>Replace YOUR_KAKADU_GUIDE_CUSTOMER_ID with your customer ID.
Note: This script can be placed anywhere on your page (although within <head> is recommended), but needs to be placed on every page that should have the player.
The player guide.script.js script itself won’t do anything until manually triggered, but it will preload the guide.js script in the background:
You can start a guide manually by calling the window.kakadu.start function with the guide ID you got from the recorder.
window.kakadu.start({id: 'YOUR_KAKADU_GUIDE_ID'});Note: The guide status must be either published or listed before it can be started.
Running the start function will load additional resources (the complete player application):
Note: The player application is scoped both in terms of DOM (it runs in a Shadow DOM instance) and CSS (all selectors are prefixed), so they won’t affect your page.
You can automatically start guides when users visit a page by using guide links (veiledningslink). When a recording is completed in the recorder, you’ll get a guide ID along with a guide link that you can copy and use wherever you want.
To use guide links, the player needs to be implemented on the page.
The URL looks like this:
https://your-website.com/your-page?kakadu-start=YOUR_KAKADU_GUIDE_IDAfter starting a guide, leaving the page, and then returning to it after more than 5 minutes have passed, the guide will not reopen. There is a 5-minute time limit on guide interaction to keep it alive.
The player API is available as a global on the window.kakadu object once the guide.script.js script is initialized.
window.kakadu.startStart a guide, and open the player.
window.kakadu.start({id: 'YOUR_KAKADU_GUIDE_ID'});window.kakadu.prefetchPrefetch the player and the given guide. This does not open the player.
window.kakadu.prefetch({id: 'YOUR_KAKADU_GUIDE_ID'});window.kakadu.endEnd a guide, and close the player.
window.kakadu.end();window.kakadu.addListenerAdd event listeners to the player.
const listener = () => {
console.log('The player has started');
};
window.kakadu.addListener('start', listener);The player will emit the following events:
start: The player has started a guide.end: The player has stopped a guide.window.kakadu.removeListenerRemove event listeners from the player.
window.kakadu.removeListener('start', listener);The player can be self-hosted on your own server by downloading all the player files and placing them in a /player/{version}/ subdirectory, where {version} is the version of the player you have downloaded. You’ll find downloadable releases in our GitHub repository.
Note: To download releases, you’ll need access to our GitHub repository. For that, please get in touch with Tina.
For example, if you have downloaded the player version v2.1.1, you would place the files in a /player/v2.1.1/ subdirectory.
Then, update your player script:
<script type="text/javascript">
((s,o,n,i,u,l,p)=>{var g;try{const a=[],t=r=>Array.from(r),e=r=>{a.push(r)},y=p??"https://guide.kakadu.no";s[n]||(s[n]={apiUrl:y,assetUrl:l,version:u,customerId:i,queue:a,async load(){e(["load",...t(arguments)])},async prefetch(){e(["prefetch",...t(arguments)])},async start(){e(["start",...t(arguments)])},async end(){e(["end",...t(arguments)])},addListener(){e(["addListener",...t(arguments)])},removeListener(){e(["removeListener",...t(arguments)])}});const c=s[n];c.apiUrl=y,c.assetUrl=l,c.version=u,c.customerId=i;const f=`${l}/player/${u}/guide.js`;if(!o.querySelector(`script[src="${f}"]`)){const r=o.createElement("script");r.src=f,r.async=!0;const m=o.querySelectorAll("script")[0];(g=m.parentNode)==null||g.insertBefore(r,m)}}catch(a){console.error(a)}})(window,document,"kakadu","YOUR_KAKADU_GUIDE_CUSTOMER_ID","v2.1.1","https://your-website.com");
</script>You’ll notice that as the 6th argument in the IIFE, you can set the asset URL: the URL where you’re hosting the player files. In the example above, it is set to https://your-website.com.
Note: The 4th argument of the IIFE is your customer ID, and the 5th argument is the player version. Do not edit the 1st, 2nd, or 3rd argument.
Given that example asset URL (and version), these player files should be hosted and accessible at:
https://your-website.com/player/v2.1.1/guide.js
https://your-website.com/player/v2.1.1/guide.player.js
https://your-website.com/player/v2.1.1/guide.player.cssKeep in mind that /player/{version}/ (and the file names) will be automatically added to the end of the asset URL. To host the player files in a subfolder, add the subfolder to the asset URL, like this: https://your-website.com/your-subfolder.
Note: For self-hosting to work, it is crucial that you’ve set up the proper Access-Control headers on your server. See this article for more information.
To stop self-hosting, simply remove the asset URL argument from the player script. The asset URL is the 6th argument in the IIFE.
By default, the Help button is located in the bottom-left corner of the screen. It must be explicitly enabled in code (it is disabled by default). You can enable it by setting help.enabled to true in options, like this:
// After the Kakadu script
window.kakadu.options ??= {};
(window.kakadu.options.help ??= {}).enabled = true;Clicking the Help button opens a modal with all the guides you have set to listed. You can set this status in the recorder by updating the status when editing a guide.
If you have no guides set to listed, the Help button will not be visible, even if help.enabled is set to true.
By default, the player collects anonymous data about guide usage. You can use this data in our application dashboard to optimize your guides, and we use it to improve the player.
If you would like to stop collecting telemetry, you can do this by setting telemetry.enabled to false in options, like this:
// After the Kakadu script
window.kakadu.options ??= {};
(window.kakadu.options.telemetry ??= {}).enabled = false;When selecting elements for steps in the recorder, selector stability is important for keeping your guides reliable. Selectors are what we use to find elements on the page. Unstable selectors are those that, for example, rely on the order of elements on the page, such as nth-child and nth-of-type.
These types of selectors should be avoided, because guides may break when your website is updated. We recommend tagging elements used in steps with a data-kakadu-id attribute.
Note: The recorder will also consider selectors such as data-test-id and data-track-id stable.
We follow standard semantic versioning rules, where versions follow the format: BREAKING.FEATURE.PATCH. Both the recorder and the player are versioned and released together, but only changes to the player determine the type of version increment — all other updates (such as changes to the recorder) are treated as patches.
Your privacy is important to us. It is our policy to respect your privacy regarding any information we may collect from you across our website, and other sites we own and operate. The entirety of this website and contents is protected by the Norwegian copyright laws.
We’ll only ask for personal information when we truly need it to provide a service to you. We collect it by fair and lawful means, with your knowledge and consent. We also let you know why we’re collecting it and how it will be used.
We only retain collected information for as long as necessary to provide you with your requested service. What data we store, we’ll protect within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification.
We don’t share any personally identifying information publicly or with third-parties except when required to by law, or when absolutely necessary to provide our service.
The Recorder
The Recorder does not collect any personal information.
The Player
The Player does not collect any personal information. However, it collects anonymous quantitative data about guide usage, such as guide start, guide step, and guide completion.
You have the right to request the deletion of your personal data. To initiate this process, please send an email to hei@kakadu.no. We will verify your identity and proceed with the deletion of your data in accordance with applicable laws.
Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and practices of these sites, and cannot accept responsibility or liability for their respective privacy policies.
You are free to refuse our request for your personal information, with the understanding that we may be unable to provide you with some of your desired services.
Your continued use of our website will be regarded as acceptance of our practices around privacy and personal information. If you have any questions about how we handle user data and personal information, feel free to contact us.