Changelog
What's changed in Chat9, most recent first.
2026-11-02 — Dashboard polish: Settings, Team, Knowledge and Unanswered
Settings: the "saved" confirmation fades in and out like other confirmations, and checkboxes and radio options line up with the rest of the form.
Team: when you are the only member, the "Just you so far" note sits right under your row.
Knowledge: web addresses in indexed pages, failed pages, quick-answer sources and the document preview are shown without "https://" and a trailing slash, and links still open the full address. Collapsible lines (glossary terms, failed pages, more questions) show an arrow. The document preview keeps long file names readable and puts Copy and Download under the title. On the Profile tab, Save and Discard follow the same order as in Settings. FAQ and Profile use the narrow form column, and the other Knowledge tabs share one consistent width.
Unanswered: the answer panel title is larger and lines up with the close button.
Who it affects: tenants using the dashboard.
What to do: nothing. See Dashboard Features for Knowledge.
2026-11-01 — Each dashboard page has its own browser tab title
Every dashboard page now sets its own tab title, named after its section in the sidebar: "Inbox — Chat9", "Knowledge — Chat9", and "Settings — Chat9" for all Settings pages. With several Chat9 tabs open, you can tell them apart at a glance. Sign-in, sign-up, password and invite pages, the docs and the blog use the same form, for example "Sign in — Chat9".
Who it affects: everyone using the dashboard, docs or blog.
What to do: nothing. See Dashboard Features for the dashboard sections.
2026-10-31 — Widget and dashboard polish fixes
Widget: while a visitor types or pastes a long message (more than five lines), the last line now stays fully visible above the edge of the field. In full screen on phones the header has more room, so its title no longer sits against the top edge.
Dashboard: in Knowledge, pressing a button inside a source row (Show details, Edit, Refresh, Delete) highlights only that button instead of the whole row, and long page addresses no longer end with a lone "/" on its own line. In Inbox, the "Answered by email" note sits in the conversation header, so it no longer cuts the top message.
Who it affects: visitors on any site with the widget, and everyone using the dashboard.
What to do: nothing. See Embedding the widget for the embed code, and Dashboard Features for Knowledge and Dashboard Features for the Inbox.
2026-10-31 — OpenAI key warning no longer moves the page
When your OpenAI key is missing, rejected or out of credits, the warning at the top of the dashboard now appears together with the page instead of a moment later, so the content below no longer jumps down while you start reading or clicking.
Who it affects: tenants whose OpenAI key needs attention.
What to do: nothing. See Connect your OpenAI API key for how to set or replace the key.
2026-10-31 — Widget: a wrong bot ID says so
If the embed code points at a bot that doesn't exist, for example after a typo or once the bot is deleted, the opened widget now says "Chat is unavailable." instead of showing an empty chat with nothing to do. The close button still works. The loader also no longer logs two "postMessage … target origin does not match" warnings in the browser console each time the bubble starts.
Who it affects: sites whose snippet has a wrong or outdated bot ID.
What to do: if you see "Chat is unavailable.", copy the embed code again. See Where to get the embed code.
2026-10-30 — Dashboard polish
The dashboard feels more responsive. Buttons and list rows react when pressed, panels and confirmation dialogs slide or fade in instead of popping, and all motion follows your system "reduce motion" setting. Selection and highlights are easier to see in the light theme, and warnings no longer look like errors. Loading placeholders now match the shape of the real lists and no longer pulse, the sidebar and top bar stay put once the page loads, and "Saved" and "Copied" notes fade out instead of vanishing.
Inbox: conversation previews show plain text instead of raw formatting symbols, the date and ticket number stay visible in narrow lists, taking a chat no longer pushes messages down, and "Answered by email" is a single line with the details on hover.
Knowledge, Team and Seats: a source that could not be loaded says "Couldn't read this page", with "Show details" for the full error. Dates stay on one line, counts use the right singular or plural ("1 page", "1 conversation"), long emails wrap cleanly, and the seats total reads as one sentence with formatted amounts.
Who it affects: everyone using the dashboard.
What to do: nothing. See Dashboard Features for the Inbox and Dashboard Features for Knowledge.
2026-10-30 — Widget: multi-line messages, clearer length limit, full screen on phones in landscape
The message box now grows to several lines, and pasted multi-line text keeps its line breaks. On phones Enter adds a new line and the Send button sends; on desktop Enter sends and Shift+Enter adds a line. The 1000-character limit is unchanged, but the widget now shows a counter near the limit and a "too long" note over it, and never discards what the visitor typed. A message that fails to send is marked "Not sent · Try again" on the message itself instead of in stacked error blocks.
Phones in landscape now open the chat full screen, like portrait. Full screen respects the notch and home indicator on sites that use viewport-fit=cover and stays above the on-screen keyboard. Scrolling inside the chat no longer scrolls the page behind it, buttons give press feedback, and motion follows the visitor's reduced-motion setting.
Who it affects: visitors on any site with the widget.
What to do: nothing, existing snippets keep working. See Embedding the widget for the embed code.
2026-10-30 — Clearer password reset and invite links, and a Page not found page
Password reset and team invite links are now checked as soon as the page opens. A link that has expired, was already used or is wrong says "This link doesn't work" (for invites, "This invite link doesn't work", with a Sign in button) before anyone types a new password. If the check itself can't run, for example because of a connection problem, the page offers to try again.
Addresses that don't exist on the site now show a "Page not found" page with a way back: the home page, or Inbox when you are signed in. Sign-in, sign-up and the other account pages also keep the logo and heading in the same place from one page to the next.
Who it affects: everyone who signs in, resets a password or accepts a team invite.
What to do: nothing.
2026-10-29 — Operator replies reach visitors when you take a chat unasked
When an operator took a conversation from Inbox → All where the visitor had not asked for a human, the reply did not appear in the open widget until the visitor reloaded the page. It now shows up within about 20 seconds while the visitor has the chat open, and within a few seconds once the visitor writes again. The visitor's messages to an operator no longer leave an empty bot bubble behind them.
Who it affects: tenants whose operators take conversations from the Inbox, and their visitors.
What to do: nothing. See Dashboard Features for the Inbox.
2026-10-21 — Doc gaps page removed
The Doc gaps page is gone. Knowledge → Unanswered replaces it: it lists the questions visitors asked that the bot could not answer, and you answer them there. Links to the old page (/gap-analyzer) now open the Unanswered tab.
Existing gap groups and unpublished drafts were not carried over.
Who it affects: tenant owners and operators.
What to do: nothing. See Dashboard Features for the Unanswered tab.
2026-10-21 — Unanswered tab in Knowledge
Knowledge has a new Unanswered tab. It lists what your visitors asked in the last 30 days that the bot could not answer or where the bot offered a human, grouped by question with the number of conversations and the last time it was asked. A question that was answered but still did not help comes back to the list marked "Answer didn't help".
Click Answer on a question to get a drafted reply, written with your OpenAI key from the questions visitors actually asked. Edit the draft yourself or ask the agent to rewrite it with your instructions, then publish it to the bot's FAQ. Only the account owner can publish; operators can save drafts. A published answer moves the question to Answered.
A question the bot should not answer can be marked Not needed, with a reason, and restored later. Use the Show filter to switch between Open, Answered and Not needed questions. The Knowledge item in the sidebar shows how many questions became open since you last opened the tab.
Who it affects: tenant owners and operators.
What to do: open Knowledge → Unanswered, then answer each question or mark it Not needed. See Dashboard Features for the Knowledge section.
2026-10-20 — FAQ suggestions from chat history removed
Chat9 no longer creates FAQ suggestions from your visitors' conversations. Suggestions of that kind that were still waiting for review have been removed. FAQ entries you already approved are not affected.
Who it affects: tenants who had pending FAQ suggestions from chat history.
What to do: nothing. See Dashboard Features for the Knowledge section.
2026-10-20 — Greeting in the right script for regional browser locales
Visitors whose browser reports a region but not a script, such as Traditional Chinese in Taiwan or Hong Kong, are now greeted in the right script. Before, they could get the greeting in Simplified Chinese.
Who it affects: visitors on any site with the widget.
What to do: nothing. See Embedding the widget.
2026-10-20 — Widget greeting restored
The opening greeting was not shown on sites that use the default embed code: the request for it was not reaching the Chat9 API through getchat9.live. It is now, and the widget greets visitors again as described in the 2026-10-17 entry below.
Who it affects: your visitors, on every site with the default embed code.
What to do: nothing. See Embedding the widget.
2026-10-17 — Widget greets a visitor once
The widget now greets a visitor once per browser, ever. A returning visitor is not greeted again, even when a new conversation starts after a week without messages. If you pass user_id or email, the greeting is tracked per identified user.
- Opening the chat bubble, or loading a page with an inline widget, no longer starts a conversation. A conversation starts with the visitor's first message, so visitors who never write no longer create empty conversations.
- The greeting is shown in
userHints.localeif you set one, otherwise in the browser language, otherwise in English. - The greeting is not saved into the conversation. In the Inbox a conversation starts with the visitor's first message, and after a page reload the visitor sees their conversation without the greeting.
- The "Couldn't start the chat" error on open is gone.
- Clearing browser storage or using a private window counts as a new browser, so the visitor is greeted again.
Who it affects: your visitors, on every site with the widget.
What to do: nothing. See Embedding the widget and the FAQ.
2026-10-17 — No handoff offer on a visitor's first message
The assistant no longer offers to forward a question to your support team on the visitor's first message in a conversation. It answers first, and offers a handoff only if the conversation continues without a resolution. A visitor who asks for a person still gets one immediately, on any message.
When a visitor asks something off-topic, the assistant now declines, says what it can help with, and asks them to rephrase — it no longer offers to forward the request to your support team.
This affects every tenant with the widget.
What to do: nothing. See FAQ → Escalation.
2026-10-17 — Quieter colour scheme control
The colour scheme control is now a small icon that opens a System / Light / Dark menu. In the dashboard it moved from the bottom of the sidebar to the top bar, next to your e-mail.
2026-10-17 — Inline widget fills its container
An inline widget (mode: "inline") now takes the height of its target element instead of a fixed 600px, so a shorter target no longer cuts off the message box. A target without a fixed height still gets 600px.
What to do: nothing. To size the widget, give the target element a fixed height. See Embedding the widget.
2026-10-17 — New widget look
The chat widget has a new look.
- The header is always dark and now carries "Powered by Chat9", so the footer is gone and the message box sits closer to the bottom.
- The send button, your visitor's messages and the launcher use the
coloryou pass toChat9Widget.start; the rest of the panel keeps its own colours. - The launcher hides while the chat is open. Close the chat with the X in the header or the Escape key, and focus returns to the launcher.
- On desktop you can resize the chat by dragging the corner of the header, or with the arrow keys once the resize handle has focus.
What to do: nothing. See Embedding the widget for the options.
2026-10-17 — Widget code block colours
Code blocks in the widget now show readable text and a correctly coloured copy button in the light theme.
2026-10-17 — Docs follow your theme
The documentation now follows the light or dark theme you chose, with the theme switch at the bottom of the sidebar. Inline code and headings are easier to read, and text lines are shorter on API pages.
What to do: nothing.
2026-10-17 — New website and blog design
The Chat9 website and blog have a new design.
- They support light and dark themes, with a theme switch in the footer.
- The home page shows a live demo of the widget next to the sign-up button, and describes setup and handoff to your team step by step.
- Blog articles open as a single column, and the blog index is a list of articles.
2026-10-17 — Settings redesign and dark mode for the dashboard
Settings:
- The four tabs (Bot, Widget, Team, Seats) are laid out as plain sections, each with its own Save button that is active only when something changed.
- Removing the OpenAI key, rotating the identity key, removing a team member and deleting the tenant now ask for confirmation in a dialog.
- The support inbox Clear button is gone: empty a field and save to unset it.
- The seat price appears once, on Seats.
- Wording: the company account is now called a tenant everywhere. "Workspace" is retired.
Dark mode: the whole dashboard follows your colour scheme. Pick System, Light or Dark with the switch at the bottom of the menu.
What to do: nothing. See Dashboard Features for where each setting lives.
2026-10-17 — Widget: new look and dark theme
The chat window and the chat button have been redesigned for every widget.
- New
themeoption: addtheme: "dark"toChat9Widget.start()for dark sites. Without it the widget stays light. - The header shows a neutral Assistant name, without an online status.
- A close button in the header, and Escape closes the chat. On phones the chat opens full screen.
- When something goes wrong, the chat says what happened in plain words and offers Try again; your visitor's message is kept.
- Source links show the site name as text instead of a site icon, so the widget no longer requests icons from Google.
- The chat button is a flat violet circle by default; the
coloroption still overrides it.
Who it affects: your visitors, on every site with the widget.
What to do: nothing. Set theme: "dark" if your site is dark. See the options in Embedding the widget.
2026-10-16 — Dark dashboard menu and top bar
The dashboard menu and top bar are dark again, in both the light and dark themes, so they stand apart from the page. In the dark theme, the page area is a little lighter than before.
What to do: nothing.
2026-10-16 — Inbox and Analytics redesign
Inbox:
- One panel layout for the list and the conversation.
- Conversations are marked Waiting or Live only.
- Bot and operator replies render formatting: lists, links and code.
- Your own replies say "You".
- "Answered by email" is shown inline in the conversation.
- If another operator takes a conversation first, you get a clear message instead of a silent failure.
- The All tab can be linked to directly with
?scope=all.
Analytics: each metric is listed with what it means, with links to Inbox and Doc gaps.
What to do: nothing. See Dashboard Features for where each section lives.
2026-10-16 — Redesigned sign-in pages
Sign in, create account, email verification, password reset and team invitation pages have been redesigned.
- They support light and dark themes, with a theme switch under the form.
- Errors are in plain words instead of technical messages.
- The password rule is shown when you create an account or choose a password, and is checked before you submit.
- An expired reset or invitation link offers Request a new link.
- There is no delay after signing in.
What to do: nothing. See Getting started for creating an account.
2026-10-16 — Knowledge and Doc gaps redesign
Knowledge has a new layout: documents and URL sources share one table, and a document's health is shown inline instead of in a hover tooltip. Deleting a file, a URL source or an indexed page now asks for confirmation and says what will be removed. Accept all on the FAQ tab asks first and states how many answers go live. Rejecting a FAQ answer asks first because the answer is deleted.
Doc gaps is easier to scan:
- The two columns are now two tabs: Visitor questions (formerly Mode B) and Docs coverage (formerly Mode A). Each tab shows how many gaps it holds.
- A Show filter (Open, Archived, All) replaces the Active and Archive view switch and the per-column filters.
- Coverage is shown as a percentage, for example "About 18% covered", instead of a raw score. The internal signal number is gone.
- Dismiss is one click with an Undo note. Gaps with a draft in progress ask for confirmation instead.
- Gaps you marked as resolved now appear under Archived, in Closed. Before, they were listed nowhere.
- Draft previews for Docs coverage open in a side panel instead of pushing the list down.
What to do: nothing. See Dashboard Features for the updated Doc gaps and Knowledge sections.
2026-10-16 — New dashboard menu
The dashboard sidebar is regrouped into fewer items.
- Install widget replaces Dashboard and Embed: your bot ID, embed snippet and options are on one page.
- Settings is one menu item with four tabs: Bot, Widget, Team and Seats. These used to be separate items.
- Doc gaps is the new name of Gap Analyzer.
- Knowledge is the new name of Knowledge Hub.
- Platform metrics is the new name of Admin (visible to platform admins only).
Notices are now ranked by urgency. An OpenAI key problem (missing, rejected or out of credits) is shown at the top of every page; for owners the button goes to Settings → Bot or to your OpenAI billing. Product announcements appear as a quiet note on Install widget.
URLs are unchanged, and /embed now redirects to the Install widget page.
What to do: nothing. See Dashboard Features for where each section lives.
2026-10-16 — One typeface across the product
The dashboard, website, sign-in pages and docs now use one typeface, Geist, instead of Arial or the browser's default serif.
Chat widget: the widget on your site now uses the visitor's system font and downloads no font file. Text may look slightly different from before.
What to do: nothing. Colours are unchanged; text may be spaced slightly differently.
See Embedding the widget for widget setup.
2026-10-16 — Clearer errors in Settings, Inbox, Seats and embed snippet
Dashboard pages now say so when data fails to load, instead of showing empty or misleading values.
Settings: if part of the page fails to load, that section shows an error with a Retry button instead of empty fields. Saving can no longer replace your stored bot instructions, support inbox email, escalation language or response level with blanks. Each settings card shows its own save errors.
Inbox: the list no longer says nobody is waiting when it failed to load, and a failed refresh keeps the current list on screen and shows a Retry button. The last-message preview shows "You:" only for your own replies and the colleague's email for replies from others.
Seats and the Dashboard embed snippet: both show an error with a Retry button instead of "$0" or an empty snippet when their data fails to load.
What to do: nothing. Owners may want to confirm their bot instructions and support inbox email in Settings.
See Dashboard features for the Settings and Inbox pages.
2026-09-29 — Widget identity verification (optional)
You can now verify that a user_id passed to the widget really belongs to the visitor.
What's new: generate a signing key in Dashboard → Widget settings → Widget identity verification (now Settings → Widget). Your server computes a user_hash from the key and the visitor's user_id, and passes it alongside user_id in userHints.
Why you might want it: without a key, user IDs are trusted as-is, so anyone who knows or guesses a visitor's ID can open their conversation. With a key, only visitors with a valid user_hash restore conversations across devices and are grouped in the Inbox; unsigned IDs only personalize the chat and keep it in the same browser.
See Embedding the Widget → Identity verification for the full setup guide.