The script-tag and Google Tag Manager paths work today. The
@puntego/react
and @puntego/embed npm packages are rolling out — if npm install returns a
404, the package has not published yet, so use the install script
in the meantime.Next.js (App Router)
Install the React wrapper and its peers:<PuntegoProvider> only
loads the guide in a client effect, it is safe to render on the server. Pass both
appId and apiUrl — apiUrl is required, since without a reachable worker URL
the runtime cannot boot.
- Standard
- With CSP nonce
Declare targets
Declared targets are the highest-priority grounding tier — the guide resolves them before falling back to DOM heuristics, which raises action success. Declare the elements that matter on each page; the hook registers on mount and unregisters on unmount.React
The same@puntego/react package works in any React 18+ app (Vite, CRA,
Remix). Wrap your app once in <PuntegoProvider> (with appId and apiUrl),
then use usePuntegoTarget and usePuntegoAction to declare targets and
actions per component. Use usePuntego() for imperative calls such as point
or sendMessage. See the SDK reference for the full surface.
Single-page apps and client-side routing
The runtime hookshistory.pushState, popstate, and hashchange, so
client-side route changes are detected automatically — there is nothing to wire
up for React Router, Vue Router, or SvelteKit navigation. The guide re-reads the
page on each route change, and an in-progress tour resumes across navigations.
For accuracy: the runtime compares the pathname, so query-only changes and
replaceState updates are deliberately not treated as navigations (many apps
sync scroll position or filters into the query string, and re-reading on every
such change would thrash). If you mount or unmount declared targets across those
transitions, call the registration hooks — use the framework hooks, or call
window.Puntego.registerTarget / unregisterTarget from your own lifecycle —
so the registry always matches what is on screen.
Google Tag Manager (no code)
If you cannot edit your site’s HTML but you have a GTM container, use the community template.1
Import the template
In GTM, open Templates → Tag Templates → New, then import the template.
Get it by downloading the Puntego Embed template,
or find Puntego Embed in the GTM Community Template Gallery.
2
Add and configure the tag
Add a Puntego Embed tag and fill in your App ID and Worker API
origin (copy both from Dashboard → Install).
3
Trigger, preview, publish
Trigger on All Pages (Initialization), then Preview and Publish.
boot.js once and publishes a window.__PUNTEGO_CONFIG__
object that the boot script reads when no data-app-id attribute is present.
The GTM and hand-pasted paths share the same runtime.
Programmatic loader
For custom integrations, the loader injects the boot script imperatively and is SSR-safe (a no-op on the server):Next steps
Install
The raw script tag and every launch attribute.
Configuration
Tune launcher mode, routes, voice, and wake behavior.
SDK reference
Imperative methods, hooks, and runtime events.
Guide Tools SDK
Build product-owned helpers and declared targets.
CSP
The full Content Security Policy for strict sites.
Domains
Allow the origins where the guide may mount.