Chatlio
Replaceable in one session with an AI coding agent.
A live chat widget that puts visitor conversations into a team chat channel, so support is answered from the same place the team already talks rather than in a separate inbox.
Build me a chat widget that answers into my team's chat, replacing Chatlio. The idea is that support lives where the team already is. That means a relay: a visitor types on your site, the message appears in a channel, somebody replies there, and it goes back. Everything below serves that round trip. STACK - Node 20+ with Fastify - SQLite through better-sqlite3, WAL mode - One embeddable widget under 15KB gzipped, from your own domain - One chat platform adapter to begin with - Caddy in front THE DATA MODEL - conversations: id, visitor_id, channel_ref, thread_ref, status, page_url, referrer, started_at, last_message_at, closed_at - messages: id, conversation_id, direction, author_name, body, external_id, created_at - visitors: id, visitor_hash, name, email, traits_json, first_seen_at, last_seen_at - page_views: id, visitor_id, path, title, at — the trail, which is the context that makes a reply useful - The thread reference is how a reply in the channel finds its way back. Store it on the first message and never lose it THE ROUND TRIP - A new conversation opens a thread in the channel with the visitor's page, referrer and recent trail in the first message - Every visitor message is posted into that thread - Every reply in the thread that is not from the bot goes back to the visitor. Filter on the author, and never echo your own messages, which is the loop this design invites - Idempotency by the platform's message id, so a redelivered event does not double-post - The platform's rate limits respected with backoff THE WIDGET - One script, one init call, optionally with a signed identity token from your product so a known user is not asked who they are - Delivery by polling a small endpoint with a backoff — faster while a conversation is active, slower when idle. Sockets are the obvious answer and the wrong first one - Shadow DOM so your page's styles and the widget's cannot reach each other; keyboard operable, focus trapped, Escape closes, usable at 320px - **Offline honesty**: when nobody is available it says so and takes an email address rather than pretending somebody is there. A widget that looks instant at midnight is the thing that annoys people most - History for an identified visitor, so nobody starts again on every page WHAT THE AGENT SEES - The page they are on, the referrer, the pages before it, the device and the country. That context is most of what makes a fast reply possible - Canned replies by shortcut, expanded in the channel - Commands in the thread to close, assign or tag, so nobody leaves the chat window OPERATIONS - .env: DATABASE_PATH, BASE_URL, PLATFORM_TOKEN, SIGNING_SECRET, WIDGET_JWT_SECRET, HASH_SALT, ALLOWED_ORIGINS - Migrations on boot, each once; events received by webhook with signature verification - Nightly backup off the machine, restore script - Health endpoint that posts and deletes a message in a test channel WHAT MATTERS MOST The thread reference and the echo filter. Build the round trip first and talk to yourself through it for a day — a relay that loops, or that loses which thread belongs to which visitor, is unusable immediately.
What you lose
- An integration with the chat platform that keeps working as its API changes
- A widget maintained against browser changes, loaded fast on every page
- Visitor context — the page, the referrer, the history — assembled without you writing it
- Hosting for the relay, so a conversation does not stop when your server restarts
If you would rather not build
- A webhook into a channel and a polling endpoint, which is the whole idea in two hundred lines
The escape hatch
open source · no votes, no paid placement
Chatwoot
$0Open-source support inbox with live chat and channel integrations.
chatwoot/chatwootfree · open source
Papercups
$0Open-source live chat that relays into team chat.
papercups-io/papercupsfree · open source
Why this verdict
our own opinion · changed only by a person
80/100
Verdict yes at 80: a widget, a relay and a thread reference. The adapter is the ongoing cost, and the echo filter is the bug everybody writes once.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Questions about Chatlio
answered from the record above
Is Chatlio free?
No — the plan we track is $29 a month. Standard at $29/month billed monthly for a small team, priced per agent above that.
Can you replace Chatlio by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 80 out of 100, build time one session. Read what you lose before you decide.
How much does Chatlio cost?
$29 a month on Standard — $348 a year. Recorded 14 Aug 2026.
What do you lose by replacing Chatlio?
An integration with the chat platform that keeps working as its API changes; A widget maintained against browser changes, loaded fast on every page; Visitor context — the page, the referrer, the history — assembled without you writing it; Hosting for the relay, so a conversation does not stop when your server restarts. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Chatlio?
Yes: Chatwoot, Papercups. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

