Install in one script tag
No plugin, no SDK, no build step. If you can edit your layout, you can install this.
1. Add the snippet
Paste this before the closing </body> tag on every page you want chat on. Your key is on the Sites screen in the dashboard.
<script>
window.LiveChat = window.LiveChat || { q: [] };
['set','setUser','open','close','toggle','on'].forEach(function (m) {
window.LiveChat[m] = window.LiveChat[m] || function () {
window.LiveChat.q.push([m, arguments]);
};
});
</script>
<script async src="https://fireaway.chat/widget.js" data-key="YOUR_KEY"></script>
The first block is a stub that defines window.LiveChat before the bundle loads, so calls made during page render are queued and replayed. Nothing throws if the script is blocked.
2. Lock it to your domains
In the dashboard, under Sites, list the origins you embed on. The widget then refuses to run anywhere else, so a key lifted from your page is useless. Include staging.
https://yourcompany.com
https://app.yourcompany.com
https://staging.yourcompany.com
Leave the list empty and the widget works on any origin, which is the sensible default until you know your domains.
3. Tell it who the visitor is
Optional, and worth it. setUser prefills the pre-chat form; it never overwrites something the visitor has typed. set attaches custom data to the conversation.
LiveChat.setUser({ name: user.name, email: user.email })
LiveChat.set({ plan: user.plan, accountUrl: adminUrlFor(user) })
Up to thirty keys, values coerced to strings and capped at 500 characters. Agents see them in the order you set them, and a value that looks like a URL renders as a link.
4. Control the widget from your page
LiveChat.open()
LiveChat.close()
LiveChat.toggle()
LiveChat.on('ready', () => {})
LiveChat.on('conversation', (c) => {})
Handy for a "Chat to us" link in your footer, or opening the panel when someone lands on a help page.
Page tracking
Automatic, including single-page navigation: pushState, replaceState, popstate and hashchange are all followed. The last thirty pages arrive on the conversation with consecutive duplicates collapsed.
Troubleshooting
The launcher does not appear
Check the browser console for a blocked request, confirm data-key matches the site, and check whether you have set allowed origins that exclude the page you are testing.
It works locally but not on staging
Almost always the origin allowlist. Add the staging origin exactly, including the scheme.
Replies are not arriving by email
Email replies are sent on our domain, with your organisation name as the sender.
Get your key
Create a workspace and the snippet is waiting on the Sites screen.
Fourteen days free, no card.