Releases: chattermate/chattermate.chat
Release list
👥 Human handover — see who's handling every chat
Released 2026-08-17
Every conversation in the inbox looked the same, whether the AI was answering it, nobody had picked it up yet, or a colleague was already replying. Now it says which. And when a chat needs a person, you can hand it over without having to take it yourself.
Highlights
See who's handling each chat
Every row in the inbox now carries a label: AI while the bot is answering, Waiting for human once a chat has been queued for your team, or the name of whoever took it over — You, if it's yours.
The preview line used to be prefixed with the AI agent's name on every conversation, including ones a person had been handling for an hour. It now shows whoever actually sent the last message.
Hand a chat to your team
When the AI is heading the wrong way, the only way to stop it used to be taking the chat over yourself — which put it on your plate whether or not you were the right person for it.
There's now a Hand to my team button, in the chat and in the details panel. It takes the AI out of that conversation and puts it back in the queue for whoever is free. The visitor is told someone will be with them, and the row flips to Waiting for human straight away.
Turn the AI off for an agent
A new Let AI Answer setting on the agent's Instructions tab. Switch it off and that agent never answers with AI at all — every chat goes straight to your inbox for a person to reply to, from the visitor's first message.
It is not a transfer, and it doesn't behave like one. There's no "I'm connecting you to a teammate" message and no handoff form, because there was never a bot in the conversation to hand it on. The visitor gets a short acknowledgement and your team gets the usual new-chat notification.
Existing agents are unaffected — the setting is on by default, so nothing changes unless you turn it off.
A widget that doesn't pretend
Two things the chat widget was claiming without evidence.
- The typing dots appeared whenever a visitor sent a message, on the assumption a reply was on its way. If nothing was coming — the AI switched off, a person already handling the chat, a conversation waiting in the queue — they spun forever. They now appear only while a reply is genuinely being written, and stop if the connection drops.
- "Online · replies instantly" was shown at all times, including at 3am with everyone logged off, and on agents whose AI never answers. When a person has to reply, the header now follows your business hours: usually replies in a few minutes while you're open, we'll reply when we're back when you're not. While the AI is answering it still says instantly, because it is.
Business hours come from your organisation settings.
🎛️ Widget placement & JS API — plus a rebuilt Ask AI
Released 2026-08-10
Put the widget where you want it and open it from your own button, ask questions in a redesigned command palette, and give every teammate exactly the access their role says they have.
Highlights
Widget placement and a public JS API
The widget is no longer locked to a bubble in the bottom-right corner.
- Display modes: floating (left or right), a full-height sidebar drawer from either edge, or a search-bar trigger. Custom width, height, offsets and z-index.
- Your own button: hide the built-in launcher and open the chat from any element — a
triggerCSS selector or adata-chattermate-openattribute, no JavaScript required. - JS API:
ChatterMate.open(),close(),toggle(),isOpen(),showLauncher(),hideLauncher(), andon()for theready,open,closeandunreadevents. ChatterMate.open({ message })prefills the input without sending it, for "Ask about pricing"-style links.- Defaults live in a new Widget placement section under the agent's Customization tab. Anything set in the embed snippet overrides them for that page, so one agent can look different on your pricing page than in your docs.
Full reference: Widget Integration.
Ask AI, rebuilt
The Ask Anything and Aurora designs now open as a centered command palette — ⌘K to open, Esc or a click outside to dismiss — instead of a chat window in the corner. One input at the top, suggested questions while it's empty, and answers written as prose with their sources listed. It types its answer out as it arrives and sizes itself to what it's showing rather than sitting at a fixed height.
Start a new chat
A new Allow new chat setting, off by default, adds a control that ends the current conversation and starts a clean one. It's hidden while a human agent is handling the chat, and asks for confirmation before discarding what's there.
Roles that mean what they say
A Human Agent could not load any page — every navigation bounced to the subscription screen. Fixing it turned up a wider problem: ticking a permission on a role often did nothing, and hiding a menu item did not protect the page behind it.
view_agentsandview_knowledgeare enforced. They were in the role editor and checked nowhere.- All
/rolesendpoints are gated. Previously any authenticated user could grant their own rolesuper_admin. - You cannot grant a permission you do not hold yourself.
- The inbox reads new teammate and agent roster endpoints instead of admin ones, and those return no roles, permissions or agent instructions.
webhook_urlis no longer returned to non-admins — it embeds the secret that authenticates inbound email and SMS.- One route-to-permission map now drives both the router guard and the sidebar, which had drifted apart. Denials land on a real
/403page instead of the agent setup wizard.
Chat scope when adding a teammate
Two checkboxes next to the role dropdown on the user form — "all AI chats" and "all chats in the organization" — so you can set what someone sees without visiting the Roles screen first. Permissions still live on roles: an existing role with the right permissions is reused, and a new one is created only when none matches. The role the rest of the team is on is never widened.
Admins can also reset a teammate's password directly from the Human Agents list.
Mobile app fixes
- Mark all read now clears everything, not just the 50 notifications the app had loaded — the badge could get stuck above 99 with no way down.
- Notifications can be deleted, individually or all at once.
- The Android status-bar icon is a proper monochrome badge instead of a grey square.
- The Create Ticket buttons fit the mobile header instead of spilling out of it.
Fixes
- Your own avatar no longer breaks an hour into a session. It was rendered from a presigned URL cached at login, which outlived its own signature; it now resolves through a stable endpoint signed per request.
- Agents answer at the tool-call limit instead of returning "I'm sorry, I didn't quite catch that". Tools are withdrawn and the model replies from what it already retrieved, on both the streaming and non-streaming paths, and parallel tool calls no longer end a run early. The limit is configurable via
AGENT_TOOL_CALL_LIMIT. - The default guardrail is deny-only and no longer refuses genuine product questions that happen to name third-party software. The dashboard shows the actual rule, editable, instead of a prose description that had drifted from it.
- End Chat appears immediately after a human takes a conversation over, rather than after a refresh.
- Connecting HubSpot or Pipedrive resolves its URL at runtime, so self-hosted installs stop being sent to the wrong host and getting "Not authenticated".
- Widget bundle URLs are versioned and the widget HTML is
no-store— it embeds a conversation token and was cacheable, which also pinned visitors to stale builds after a release. - The socket
end_chatevent authenticated with a key the widget session doesn't carry, so it never actually closed a session — and reported success even when the close failed. - Two migrations declared the same parent, leaving two alembic heads; the backend exited before binding its port on every start. The chain is linear again.
Upgrading
Two database migrations run automatically on start. Both are additive or repair-only, so rolling the code back needs no database rollback:
add_allow_new_chat_001— addsagent_customizations.allow_new_chat, default off.repair_agent_role_seed_001— repairs starter Agent roles created by the hosted signup path with too few permissions, and orgs left with more than one default role. It matches the bad seed exactly, so a role an admin deliberately narrowed keeps its narrowing. Community installs match nothing.
No configuration changes are required. Existing embeds keep working unchanged: with no placement settings the widget renders exactly as before, and init({ position: { bottom, right } }) and setPosition() behave as they always did.
🔗 CRM lead push — plus AI guardrails and encrypted chats
Released 2026-07-31
Captured leads now flow straight into your CRM, agents stay on your business's topics instead of being used as a free general-purpose AI, and chat content is encrypted at rest.
Highlights
CRM lead push — HubSpot & Pipedrive
- Connect HubSpot or Pipedrive from Integrations with a one-click OAuth install; credentials are stored encrypted.
- Leads captured in a conversation are pushed automatically, with the AI's conversation summary attached as a readable note rather than a wall of raw text.
- A Sync to CRM action on the People drawer pushes any individual person on demand, including everything captured about them — not just their email.
- Captured company names are linked to a Pipedrive organization, so the lead lands attached to the right account.
- Syncing runs in its own worker, so a slow CRM never holds up a chat.
Guardrails for your AI agents
- Every agent now carries a platform guardrail: it answers anything about your business, and declines when someone tries to use it as a general-purpose AI — homework, puzzles, algorithm problems, essays, unrelated translation.
- The rule is editable per agent, because "off-topic" depends on the business. If yours is tutoring, coding education or copywriting, rewrite it so those requests get answered — or switch the scope rule off entirely.
- Visitor messages are treated as data, never as instructions. Chat-template payloads are blocked before they ever reach the model; subtler attempts are answered normally and recorded.
- Agents no longer disclose their own configuration, instructions or tool definitions.
- Triggers are logged so you can see whether abuse is actually happening, and catch a rule that is refusing real customers.
Encrypted chat at rest
- Chat message content is now encrypted in the database.
- Self-hosted installs will no longer start with the shipped example encryption or auth secrets — set your own. This prevents a deployment silently running on keys that are public in the repository.
"AI can make mistakes" in the widget
- A small disclosure line in the chat footer, on by default, and switchable off per agent under Chat Customization.
- It disappears the moment a human agent takes the conversation over, because from that point it isn't true.
MCP tools that actually start
- The backend image now ships Node and
uv, so stdio-based MCP servers launch instead of failing on a missing runtime. - When an MCP tool fails, the error surfaces instead of disappearing — and connection credentials are no longer written to the logs.
Reliability
- Agent runs are now bounded by a timeout (
AGENT_RUN_TIMEOUT, default 90s) and terminate cleanly when they hit the tool-call limit, instead of hanging a conversation indefinitely. Transfer-to-human runs are bounded the same way. - A model turn that produces nothing no longer leaves the widget stuck on a typing indicator.
- Groq answers are recovered when the model skips the structured-output tool.
Fixes
- Widget: replies render markdown live as they stream, instead of arriving as plain text and reformatting at the end.
- Widget: long code blocks scroll inside the message bubble instead of stretching the chat.
- Widget: the inline handoff contact form fits without scrolling and stays inside the chat area.
- Widget: a human taking over no longer ends the conversation; the header presence line stays readable on light designs.
- Inbox: links in an agent's message bubble were invisible against the bubble colour.
- Knowledge: an empty crawl now fails loudly instead of silently producing nothing, and linking or unlinking a source no longer 500s or leaves stale search filters behind.
- Help center: article images now load reliably on both S3 and local-uploads deployments, and the add / edit FAQ forms now let you set a topic.
- Self-hosted: runtime configuration is read consistently, and API URLs no longer end up with a doubled
/api/v1.
Upgrading
Nine database migrations run automatically on start. All are additive — new tables and columns for CRM connections, guardrail events and the new agent settings — so a rollback of the code needs no rollback of the database. No configuration changes are required for existing cloud workspaces.
Self-hosted: set your own ENCRYPTION_KEY and auth secrets before upgrading — the backend now refuses to start on the public example values.
Existing chat history keeps working throughout: rows that are still plaintext are read as-is, and new content is written encrypted. To encrypt what is already stored, run backend/scripts/encrypt_chat_at_rest.py once after upgrading.
🔔 Notification controls — never miss the chat that needs you
Released 2026-07-28
Notifications you can trust to reach the right person, at the right time. Agents pick exactly which chat moments are worth a ping, tap one to land straight in the conversation, and get them promptly even on a locked phone.
Highlights
Notification settings, per agent
- A new Notifications panel under user settings with three switches: a new conversation starts, a chat is transferred to your group, or a chat is assigned to you.
- Transfer and assignment alerts are on by default; the busier "every new chat" firehose is opt-in, so nobody gets buried.
- When the browser has notifications blocked, the panel says so and offers to enable them — no more toggles that quietly do nothing.
Straight to the conversation
- Tap any chat notification — in the drawer or on your phone — and it opens that exact conversation instead of a generic inbox.
Delivered when it matters
- Chat pushes now go out at high priority, so a "new chat" alert arrives promptly even while the device is idle or in battery-saver, instead of being batched.
Security
- Tightened multi-tenant access across the API: every request that loads or changes a record is now scoped to your own organization, and a few endpoints reachable without the right sign-in were locked down. Nothing to do on your side.
Fixes
- The "a chat left your queue" notice now reaches the agent it was taken from, not the new owner.
- The invite-agent and integration credential (Email / SMS) dialogs no longer close if you click outside them mid-form.
- Tidied the create / edit user form spacing.
🎫 AI Ticketing — support tickets that investigate themselves
Released 2026-07-22
A support ticket used to be somewhere to put a problem. This release makes it the thing that works on it. A ticket raised from a chat — or from an alert, before anyone has complained — gets triaged, investigated against your own logs and databases, and written up with a root cause and the evidence behind it. You decide how far the AI is allowed to go.
Highlights
Tickets that investigate themselves
- Raised from anywhere — the AI opens one mid-conversation when it can't answer from your knowledge base, an agent raises one from a chat, or a Grafana / Alertmanager webhook opens one automatically.
- Triaged on arrival — priority, severity and intent set by the AI, the title rewritten into one clear line, and near-identical reports folded into the existing ticket instead of piling up.
- A glass box, not a black box — the AI proposes hypotheses, tests each one against your tools, and marks it validated, invalidated or inconclusive with a confidence score. Every query it ran is recorded and readable.
- A root cause you can check — summary, impact, timeline, contributing factors, remediation and prevention, with citations back to the evidence that proves it.
You set the ceiling
- L1 — investigate and document only. Every customer message stays a human action.
- L2 — the AI proposes a resolution; you approve, or reject with a reason that feeds a refined investigation.
- L3 — the AI may also message the customer and close the ticket, behind confidence guards. Best for well-scoped, low-risk queues.
- ChatterMate never writes to your systems. Approving a proposal records who decided and when — the change itself is still made by your team.
Connect your logs and databases
- Observability over MCP — one-click Grafana, Elasticsearch, Sentry and CloudWatch, or any MCP server (Datadog, Splunk, New Relic, your own).
- A guardrailed SQL connector — Postgres or MySQL, directly or over an SSH tunnel for production databases behind a bastion.
- You pick what it can see — an explicit table allowlist, masked columns, and optional row-level scoping that restricts a table to the ticket customer's own rows.
It counts against your plan
- Investigations draw from your existing message quota — one message per model call, the same meter chat and FAQ generation already use.
- Triage always runs so tickets stay classified; a full investigation pauses, with a note on the ticket, when an organization is out of credits.
- Bring-your-own-key organizations pay their provider directly and are never metered.
CSAT that closes the loop
- A resolved ticket asks for a rating, and the score now lands on the ticket — previously it only attached to the conversation, so nothing could report on it.
- The workspace shows the split that matters now that L3 exists: AI-resolved versus human-resolved satisfaction.
Fixes
- Shopify product cards attach reliably instead of depending on the model to emit them.
- A closed notification drawer no longer paints a shadow over the page on mobile.
- The installed app applies your saved theme before first paint instead of flashing the wrong one.
- Investigate is disabled on a resolved ticket until it is reopened — in the UI and enforced by the API.
- Sending an RCA to a customer can no longer be double-fired by a second click.
- Super admins can approve ticket actions in the UI; the frontend check now matches what the backend already allowed.
Under the hood
- A new
ticket_investigatorcontainer runs triage, investigations and lifecycle hygiene. - SQL from the model is parsed to a syntax tree and re-rendered before it executes, rather than pattern-matched. Comments are stripped on the way through, because MySQL executes some of them.
- Investigation evidence is PII-redacted and truncated as it is recorded.
- The Shopify product cache key now has a single source of truth.
chattermate-cli0.7.0 adds aticketingcommand group — list, show, investigation, rca, investigate, settings.
Upgrade notes
- Add the
ticket_investigatorservice to your compose file — same image as the backend,command: python -m app.workers.ticket_investigator. Without it nothing processes investigations: tickets will triage and then sit. - New dependencies:
sqlglot,pymysql,sshtunnel, andparamiko>=3.4,<4— sshtunnel 0.4 still calls an API that paramiko 4 removed. - Migrations run on backend start as usual. Deployments with the enterprise module must run the enterprise migrations separately; they do not auto-run.
- Cloud: AI Ticketing is a Pro feature. Self-hosted: fully open, no gating.
- Ticketing can be switched off per agent under the agent's Integrations tab.
Security
- Point the database connector at a least-privilege, read-only user — never a superuser — granted only the tables support genuinely needs. The connector enforces SELECT-only, an allowlist, a forced row limit, a read-only transaction and a statement timeout, but the database should be locked down as well.
- Masked columns cannot be referenced anywhere, including in a
WHEREclause, so their values cannot be probed a row at a time; row-serialisation tricks that would smuggle them past name-based masking are blocked. - The row-level scope is applied to the table the query reads from, not to a condition the model writes, so a query cannot widen its own scope.
- Identifiers belonging to anyone other than the recipient are stripped from outbound customer messages, and other customers' tickets are redacted before they reach the model.
- Every query attempt is audited with its SQL and outcome. Returned rows are never stored.
📱 Mobile agent app — install ChatterMate on your phone
Released 2026-07-18
Your agents can now work from their phone. The dashboard installs to the home screen like a native app — bottom navigation, a full-screen inbox, and push notifications that open straight into the conversation. Plus one-click Messenger and Instagram connections, and WhatsApp template messages for starting conversations.
Highlights
Install ChatterMate on your phone
- Add to home screen — the agent dashboard is now an installable app (PWA) on Android, iOS and desktop. Own icon, own splash screen, no browser chrome.
- Built for one hand — bottom navigation across Inbox, People, AI Agents and Analytics, with everything else a tap away in the More sheet. Every destination from the desktop sidebar is still reachable.
- Full-screen inbox — the conversation list, chat and details stack into full screens instead of squeezing three desktop panes onto a phone. Your phone's back button walks back through them.
- Keyboard-aware composer — the message box stays above the on-screen keyboard instead of hiding behind it.
- Push notifications that go somewhere — tapping a notification opens that exact conversation. Previously a tap did nothing.
- Desktop is unchanged.
Agents can pick up AI chats
- The AI queue is visible — agents now see conversations the AI is still handling, not only the ones already assigned to them. Previously the queue was invisible, so there was nothing to take over.
- "Take over" is on the chat screen — no longer hidden behind the info panel, which was hard to reach on a phone.
- People directory — agents get read-only access to customer records. Editing still requires a manager role.
- Two new permissions,
view_unassigned_chatsandview_people, so granting queue access never exposes another agent's private conversations. Existing agent roles get both automatically on upgrade.
Messenger and Instagram, in one click
- Connect a Facebook Page or Instagram account without creating your own Meta app — sign in with Facebook and pick the account.
- Instagram without a Facebook Page — connect a professional Instagram account directly via Instagram Login.
- Real customer names on Messenger and Instagram conversations instead of opaque IDs.
WhatsApp templates and outbound messages
- Start conversations with WhatsApp's approved message templates, not just reply to inbound ones.
- Phone-number identity — customers are recognised by phone across sessions.
Fixes
- The End Chat dialog no longer promises a rating on channels that can't display one.
- Instagram's
changes[]webhook shape is now accepted. - Switching the agent behind a channel starts a fresh session instead of continuing a stale one.
- Messenger tokens that were valid are no longer rejected.
- The integrations connect modal is readable in light theme.
- Help center admin — filter toolbar, category headers and toggle switches now lay out correctly on a phone.
Under the hood
- One service worker handles both offline caching and push, replacing the separate Firebase worker. New builds now prompt agents to reload rather than activating silently under an open tab.
- Push payloads are data-only, which stops duplicate notifications and lets taps deep-link correctly.
- Push permission is requested from a button, not on page load — the old placement silently failed on iOS.
- Webhook logging records message IDs rather than raw request bodies.
Upgrade notes
- Run migrations. This release adds the two permissions above and backfills every existing role that can already view chats — no manual per-organization setup.
- One default role per organization. Installs seeded both Admin and Agent as the default, so newly invited users could land on either depending on database ordering. The migration fixes this so invites consistently land on Agent. Existing users keep whatever role they already have.
- Reverse proxy:
sw.jsandmanifest.webmanifestmust be served withno-cache. If you run a customised nginx config, add these — a long cache freezes the service worker and stops future updates from reaching installed clients. - iOS push requires iOS 16.4+ and the app added to the home screen. This is an Apple restriction.
- Existing browser sessions will unregister the old Firebase service worker automatically on first load.
Security
- The chat takeover endpoint checked a permission that does not exist and performed no organization scoping, so any signed-in user could claim an unassigned conversation in another organization by guessing its session ID. Both are fixed, with tests. Self-hosted installs should upgrade.
- One-click Meta signup on Cloud is limited to an allowlist during rollout.
ChatterMate — Help Center & FAQ Manager
Released 2026-07-13
Turn your knowledge base into a customer-facing help center: AI-drafted FAQs you review and publish, served as an SEO-friendly public site — with rich Markdown articles, one-click migration from an existing help center, and AI-powered search.
Turn your knowledge base into a customer-facing help center: AI-drafted FAQs you review and publish, served as an SEO-friendly public site — with rich Markdown articles, one-click migration from an existing help center, and AI-powered search.
Highlights
FAQ Manager (admin)
- Generate FAQs from your knowledge base — drafts grounded in your crawled sites, docs and PDFs, using your configured AI model. Review, edit and publish.
- Rich Markdown articles — answers support headings, steps, bold, links and images. Each published FAQ gets its own SEO page (
/a/slug) with structured data. - Searchable, filterable list — relevance-ranked search, filter by topic or Draft/Published, collapsible topic groups, and multi-select for bulk publish/unpublish/delete.
- Customization — logo, brand color (presets or any custom color), header links, call-to-action, and AI-search settings, with a live preview.
Import an existing help center
- Article pages (no AI) — point us at a Chatwoot / Zendesk / Intercom-style help center and we crawl every article, grouped by its real category, imported as-is with formatting and images. No AI credits used.
- Q&A page — extract the question/answer pairs from a single existing FAQ page.
- PDF — upload a product guide or manual and we generate FAQs from it.
Public help center
- A fast, SEO-friendly public site (grouped topics, per-article pages, sitemap, structured data) served at
your-slug.chattermate.helpor your own custom domain. - Ask AI — visitors get an instant answer grounded in your published FAQs and knowledge base, with your chat widget embedded for follow-ups and human handover.
- Custom domain — guided two-step setup with copyable DNS records and automatic SSL.
Under the hood
- FAQ generation is context-window aware (fewer, larger LLM calls on big-context models), deduplicates near-identical questions, and processes one job at a time so it never overloads the server.
- On cloud, generation/import counts toward your plan's message allowance (shown as an estimate before you run it); self-hosted is unlimited.
- Reliability: interrupted jobs are cleaned up automatically so the UI never gets stuck.
Notes
- The feature is available to all self-hosted installs. On ChatterMate Cloud it's part of Pro.
- The public custom-subdomain site (
*.chattermate.help) requires the wildcard-domain infrastructure to be provisioned; the admin FAQ manager and generation work immediately after deploy.
🌐 Omni-channel — WhatsApp, Telegram, Messenger, Instagram, Slack, Email, SMS & LINE
🌐 Omni-channel: meet your customers on any messaging app
ChatterMate is no longer just a website widget. Your AI agent — with full human handover, knowledge base, and lead capture — now answers customers across every major messaging channel, all landing in the same inbox.
New channels
- Telegram — connect a bot in seconds with a token from @Botfather. No approval process.
- WhatsApp, Facebook Messenger, Instagram DM — official Meta Cloud API, one connect flow, 24-hour service windows and WhatsApp template sending handled for you.
- Slack — fully rewritten onto the unified stack: encrypted tokens, threaded replies, real display names, typing indicators, and (new) human handover + knowledge base + lead capture that the old integration never had.
- Email — shared-inbox support (support@) with per-inbox outbound SMTP, message threading, and a Gmail App Password hint when auth fails.
- SMS — one channel, six providers: Twilio, Vonage, MessageBird, Plivo, Brevo, and AWS SNS. Bring your own account.
- LINE — Messaging API with typing indicators.
How it works
- Human handover reaches every channel. When an agent takes over from the dashboard, their replies now go back out on WhatsApp/Telegram/Slack/etc. — not just the widget.
- One conversation, everywhere. Every channel shares the same customer, session, agent routing, and conversations inbox, with a channel badge on each chat.
- Per-agent channel routing with themed toggles, and a channel badge in the conversations list and chat header.
Security
- All channel credentials are Fernet-encrypted at rest.
- Every inbound webhook is signature-verified before parsing (Meta
X-Hub-Signature-256, Slack v0 HMAC with replay protection, Twilio/Vonage/Plivo/MessageBird HMAC, AWS SNS certificate validation), with Redis-based event de-duplication.
Notes
- Rating requests stay web-widget only — external channels are never asked to rate.
- All adapters are open source; self-hosters bring their own platform tokens/apps.
Full changelog: v1.0.12...v1.0.13
🔓 ChatterMate is now Apache-2.0 — permissive, open-core licensing
🔓 ChatterMate core is now Apache-2.0
The ChatterMate open-source core has moved from AGPL-3.0 to the Apache License 2.0. This is the headline change in this release.
Why this matters for you
- Use it freely — anywhere. Apache-2.0 has no network-copyleft. You can self-host, modify, and build proprietary or SaaS products on ChatterMate without any source-disclosure obligation.
- Enterprise-friendly. Many organizations block AGPL software by policy. Apache-2.0 clears that barrier, so ChatterMate can now be adopted inside companies that previously couldn't touch it.
- Patent & trademark protection. Apache-2.0 includes an explicit patent grant and trademark clause — more legal certainty than a bare permissive license.
ChatterMate remains open-core: the core is Apache-2.0, while advanced/enterprise features and support continue to be offered separately.
What changed
- 📄 New
LICENSE(canonical Apache-2.0) andNOTICE; the old AGPL dual-license file has been removed. - 🧾 Every source file's license header updated to Apache-2.0 (490 files across Python, Vue, and TypeScript). TypeScript header coverage is now complete.
- 📝 README updated to reflect open-core Apache-2.0 licensing.
For contributors
- ✅ Contributions are now accepted under Apache-2.0 via a Developer Certificate of Origin (DCO) sign-off — just commit with
git commit -s. - 📚 New
CONTRIBUTING.mdand a pull-request template document the workflow. A DCO check runs automatically on every PR.
Security
- 🔒 Hardened Shopify shop-domain validation (
shopify.ts) — replaced a substring check with strict hostname validation, resolving a CodeQL alert.
Full changelog: v1.0.11...v1.1.0
⚠️ Note on the license change: existing copies remain under the license they were obtained under; this change applies going forward. Enterprise modules remain under their separate commercial terms.
✨ Premium chat designs, citations & customizable contact collection
Pick a look that matches your brand — the current style is kept as Legacy, and five new premium presets are now selectable per agent:
Glass — frosted dark glass with soft glow and rounded bubbles
Terminal — monospace developer style, square corners
Playful — light, friendly, very rounded with warm accents
Calm Mint — clean dark-teal with subtle borders
Aurora — dark ask-me-anything with a glowing orb avatar
The design picker groups Legacy vs New with live thumbnails, selecting a design seeds a matching color palette you can still customize, and every theme gets a polished finish with message entrance + "reading knowledge base" animations (honoring prefers-reduced-motion).
📎 Knowledge-base citations
A new Show citations toggle displays the knowledge sources used to answer, as chips under each reply — so visitors can see what the answer was grounded in.
📨 Customizable contact collection
Pre-chat email is now optional. Off by default — visitors can start chatting immediately. Turn on Collect email before chat to require an email first.
Capture contact at human handoff. When a chat transfers to a human (or a ticket is created because no agents are online), an inline form collects the visitor's email (toggleable) and name (optional) and saves it to the customer record so your team can follow up.
The agent no longer exposes the internal anonymous placeholder address — instead of promising to email …@noemail.com, it asks for real contact details via the form.
🟢 New brand mark
Refreshed the ChatterMate icon to the new lime three-dot mark across the favicon set, logos, the widget launcher button, and the web manifest.
🛠 Improvements & fixes
Dark themes now render correctly end-to-end: readable agent bubbles, inputs, contact forms, dividers, and overlays (no more white-on-dark).
Theme-accent input borders instead of generic gray/white.
More compact message bubbles in the embedded widget.
Aurora's avatar follows the agent's profile picture (orb only as the no-photo fallback).
Fixed form fields stealing focus back to the message box; better-aligned validation messages.
🗄 Database
Adds idempotent migrations for: new chatstyle enum values (Glass/Terminal/Playful/Calm Mint/Aurora), show_citations, collect_email, and handoff_collect_email / handoff_collect_name.
📦 Notes
Defaults: pre-chat email off; handoff email on, name on; citations on.
Enterprise (Shopify) customization gains the Collect email before chat toggle (see enterprise_frontend#4).
