Install guides
The same one line, and the exact place it goes
Installing the assistant is one script tag before the closing body tag. What differs between platforms is where that file lives, which plan lets you edit it, what overwrites it later, and which second origin you forgot to allow. There is a page here for each.
The tag
<script src="https://cdn.askably.xyz/w.js" data-key="pk_live_YOUR_KEY" defer></script>Your own key replaces the placeholder. Nothing else needs installing.
The origin the page is served from has to be on the allowlist for that assistant, or nothing renders and the browser console says which origin was refused. An apex domain and its www are two different origins to a browser, so list both, along with any staging or preview host you want it to work on.
Stores
Where the checkout is somebody else's template, and the widget stops at the cart.
- ShopifyOnline Store, then Themes, then the three dots beside your live theme, Edit code, then layout/theme.liquid.
- WooCommerceA site-specific plugin or a code snippets plugin, hooking wp_footer. Not the theme editor.
- BigCommerceStorefront, then Script Manager, then Create a Script.
- Magento and Adobe CommerceContent, then Design, then Configuration. Edit the store view, open the Footer section, and use Miscellaneous HTML.
Content systems
Where a theme update is the thing most likely to remove your install.
- WordPressA code snippets plugin, or a small plugin of your own, hooking wp_footer. Not Appearance, then the theme file editor.
- GhostSettings, then Code injection, then the Site Footer box. The alternative is default.hbs in a custom theme.
- DrupalA small custom module attaching a library, an asset injection contributed module, or html.html.twig in a custom theme. Not a custom block.
- JoomlaThe Templates screen, under System in Joomla 4 and 5 and under Extensions in Joomla 3, editing index.php in a copy of your template. Or a Custom module in a footer position.
- HubSpotSettings, then Website, then Pages, then the templates tab, and the site footer HTML field. Per page footer HTML lives in a page's advanced settings.
- BloggerTheme in the left menu, then More under My theme, then Edit HTML. Paste immediately before the closing body tag.
- DiscourseAdmin, then Appearance, then Themes and components. Create a component, open Edit Code, and use the field labelled body.
- Craft CMSThe templates folder at the root of your project, in the layout that your other templates extend, immediately before the closing body tag.
Site builders
Where custom code is a plan feature, and the preview is a different origin.
- WebflowProject settings, then the Custom code section, then the field for code before the closing body tag.
- SquarespaceSettings, then Advanced, then Code Injection, then the Footer field.
- WixSettings, then Custom Code, then a new snippet applied to all pages and placed at Body end.
- FramerSite settings, then the custom code section, then the field for the end of the body tag.
- CarrdThe element list in the editor: add an Embed element, then set its type, style and placement in that element's settings.
- BubbleSettings, then the SEO and metatags tab, then the field for script and meta tags in the body.
- Google SitesInsert, then Embed, then the tab that takes embed code rather than a link.
- NotionThe custom code field of whatever service serves your Notion content on your own domain. There is no such field inside Notion itself.
Frameworks
Where you own the HTML shell, and the mistake is putting the tag in a component.
- Next.jsapp/layout.tsx in the App Router, or pages/_document.tsx in the Pages Router. Not a client component that can unmount.
- Reactindex.html at the project root for a Vite app, or public/index.html for Create React App. Immediately before the closing body tag.
- Vueindex.html at the project root, after the div the app mounts into and immediately before the closing body tag.
- Nuxtnuxt.config.ts, under app, then head, then the script array. Or a useHead call in layouts/default.vue.
- SvelteKitsrc/app.html, after the SvelteKit body placeholder and immediately before the closing body tag.
- Angularsrc/index.html, after the app root element and immediately before the closing body tag.
- AstroYour base layout, usually src/layouts/Layout.astro, immediately before the closing body tag.
- Gatsbygatsby-ssr.js at the project root, inside onRenderBody, using setPostBodyComponents.
- Laravelresources/views/layouts/app.blade.php, or whichever layout your pages name in their @extends directive, immediately before the closing body tag.
- DjangoThe base template your pages extend, usually templates/base.html, immediately before the closing body tag.
- Ruby on Railsapp/views/layouts/application.html.erb, immediately before the closing body tag.
- Hugolayouts/_default/baseof.html in your project root, or the footer partial that baseof calls, immediately before the closing body tag.
- Jekyll_layouts/default.html in your site root, or an include in _includes that the layout pulls in, immediately before the closing body tag.
- EleventyThe base layout in your includes directory, for example _includes/base.njk, immediately before the closing body tag.
- Remixapp/root.tsx, inside the Layout export, immediately before the closing body tag and after the Scripts component.
- Phoenixlib/your_app_web/components/layouts/root.html.heex, immediately before the closing body tag.
- ASP.NET CoreViews/Shared/_Layout.cshtml for controllers and views, or Pages/Shared/_Layout.cshtml for Razor Pages. Immediately before the closing body tag.
- Spring Bootsrc/main/resources/templates, in the shared template your pages decorate or include, immediately before the closing body tag.
Documentation and help centres
Where the material the assistant reads is already written, and already public.
- DocusaurusThe scripts array in docusaurus.config.js, at the top level of the exported configuration object.
- MkDocsAn overrides directory named by custom_dir under the theme key in mkdocs.yml, holding a main.html that extends the theme's base template.
- Zendesk GuideGuide admin, then Customize design, then Edit code on your live theme, then footer.hbs.
- VitePressThe head array in .vitepress/config.ts, or the .js, .mjs or .mts file of the same name, at the top level of the exported configuration.
- StarlightThe head array passed to the starlight integration in astro.config.mjs, not the top level of the Astro configuration object.
Not on the list
Anything that lets you put a line of HTML into the page will run it, so a platform without a guide here is usually still a two minute job: find the field your platform calls custom code, footer code, or code injection, paste the tag, and add the origin to the allowlist.
The only genuine blockers are hosts that strip script tags from every field they expose. Where that is the case, the guide for that platform says so instead of pretending there is a way round it.
43 platforms documented so far.