Widget customization
Every widget setting explained: theme, window, launcher, header, copy, behavior, auto-open, page rules, mobile layout, and accessibility.
Last updated:
The widget's appearance and behavior are set per site in the dashboard (open Sites, then the site's widget settings). Because the widget downloads its settings each time it loads, you never need to change the embed snippet when you change them. Settings are cached briefly, so allow up to a minute for a change to reach visitors.
This page documents every setting, using the names stored in the configuration so that they match what you see in the dashboard, exports and the config response of the public API. Everything here is public: do not put secrets in any of these fields.
Theme#
| Setting | Meaning | Default |
|---|---|---|
mode | light, dark or auto (follows the visitor's system setting). | light |
primary, primary_text | Accent color (header, launcher, buttons) and the text color used on it. | #1f7a5a, #ffffff |
background, text | Window background and main text color. | #ffffff, #1b2a24 |
visitor_bubble, visitor_text | Background and text of the visitor's message bubbles. | #1f7a5a, #ffffff |
agent_bubble, agent_text | Background and text of the AI and operator bubbles. | #eef2f0, #1b2a24 |
font | system, serif, mono or rounded. These use fonts already on the visitor's device, so nothing extra is downloaded. | system |
radius | Corner rounding in pixels, 0 to 32. | 14 |
shadow | Whether the window has a drop shadow (its style is under effects). | on |
preset | The id of the premade theme you started from (empty when you built your own). See Themes and the expanded view. | empty |
When the widget is in dark mode (set to dark, or auto with a visitor whose device prefers dark), the window background, main text, and AI and operator bubble colors are replaced by a built-in dark palette; your primary and visitor bubble colors still apply, so choose ones that work on both, or set the dark colors yourself in the dark group (see advanced settings below). Colors must be six-digit hex values such as #1f7a5a; anything else is replaced by the default. Always check contrast: text on primary should have a contrast ratio of at least 4.5:1 for readability.
Window#
| Setting | Meaning | Range (default) |
|---|---|---|
position | bottom-right or bottom-left. | bottom-right |
width, height | Chat window size in pixels on desktop. | 300 to 560 (380), 380 to 900 (600) |
offset_x, offset_y | Distance from the screen edge in pixels. | 0 to 200 (20) |
z_index | Stacking order. The default is very high so the widget sits above most page content. Lower it only if it must sit beneath something. | 1 to 2147483647 (2147483000) |
Launcher#
The launcher is the round button that opens the chat.
| Setting | Meaning | Range (default) |
|---|---|---|
icon | chat, sparkle, help or custom. | chat |
image_url | An https:// image used when the icon is custom. Use a square image. | empty |
label | Optional text shown beside the icon (for example "Chat with us"), up to 40 characters. | empty |
size | Button size in pixels. | 40 to 90 (58) |
delay_ms | Wait this many milliseconds after the page loads before showing the launcher. | 0 to 60,000 (0) |
hide_on_mobile | Do not show the launcher on small screens. | off |
Header and persona#
| Setting | Meaning | Default |
|---|---|---|
title | Heading at the top of the chat (up to 60 characters). | Chat with us |
subtitle | Line below the title (up to 100). | We typically reply instantly |
show_avatar, avatar_url | Show a picture in the header. If no avatar URL is set here, the widget can use the agent's persona avatar. | on |
show_status | Show the online or offline indicator, driven by your business hours. | on |
Edit the subtitle if you do not reply instantly outside business hours. Set honest expectations.
Text and labels (copy)#
Every piece of text the widget shows can be changed, which is how you translate it or adapt the tone. Each is limited to 120 characters except the error and consent text, which allow 300.
| Setting | Default |
|---|---|
placeholder | Type your message⦠|
send_label | Send |
online_label, offline_label | Online, Offline |
welcome_bubble | (empty) A short message shown next to the launcher to invite a chat, such as "Questions about shipping?". Leave blank for none. |
welcome_bubble_delay_s | 3 (seconds before the bubble appears, 0 to 120) |
powered_by | Powered by SiteTrellis |
end_chat_label, new_chat_label | End chat, Start new chat |
error_message | Couldn't send. Please try again. |
human_joined | A teammate has joined the chat. |
transcript_label | Email me this transcript |
consent_text | (empty) A short notice such as "By chatting you agree to our privacy policy." With consent collection off it appears as a small note at the bottom of the window; with consent collection on, the visitor must accept it before they can type (an empty notice is replaced by a default one). |
consent_url, consent_link_label | (empty) An optional https link to your privacy policy shown with the consent notice, and its label (Privacy policy). |
consent_accept_label, consent_decline_label | I agree, No thanks |
exit_intent_text | Before you go: can we help with anything? (the bubble shown on phones when exit intent fires) |
The agent's own greeting and conversation starters are part of the agent, not the widget, so they are edited in the agent builder. To run the chat in several languages, set the agent's language to auto so it answers in the visitor's language; the labels above stay in the single language you set. Per-language label sets are not available in v1.
Behavior#
| Setting | Meaning | Default |
|---|---|---|
auto_open.enabled | Open the chat automatically. | off |
auto_open.delay_s | Open after this many seconds (0 to 600). | 10 |
auto_open.scroll_pct | Open after the visitor scrolls this percent of the page (0 to 100; 0 disables the scroll trigger). | 0 |
auto_open.once_per_session | Open at most once per browser session. Independently of this, the chat never opens by itself once the visitor has opened or closed it in that tab. | on |
auto_open.exit_intent | Also open when the visitor looks about to leave: the cursor leaves through the top of the page (computers) or a fast flick back up the page (touch devices; phones in full-screen mode get a small bubble instead). No history entries are added. See Auto-open, exit intent and consent. | off |
auto_open.exit_min_time_s | Do not trigger exit intent before this many seconds on the page (0 to 600). | 5 |
sound | Play a short sound for new replies. | off |
persist_session | Remember the conversation across pages and reloads, using the browser's storage. Turn off for shared kiosks. | on |
show_timestamps | Show the time under messages. | off |
enable_feedback | Show thumbs up and down on replies. | on |
show_powered_by | Show the "Powered by" line. Hiding it needs a plan with the white-label feature (Pro and above); on other plans it is always shown, and the dashboard shows an upgrade link instead of the option. | on |
mobile_fullscreen | Use the full screen for the chat on small screens. | on |
allow_end_chat | Let visitors end the chat themselves. | on |
collect_consent | Show the consent text and require agreement before chatting. The answer is remembered per browser and asked again if you change the notice. | off |
If no trigger is configured, auto_open opens the chat immediately when enabled, so always set at least a delay, a scroll depth or exit intent.
Page rules#
Page rules control which pages show the widget, without editing your website. Add URL path patterns to include (show only on matching pages; if empty, show everywhere) and exclude (never show on matching pages). The asterisk * matches any characters. Up to 30 patterns each, 200 characters per pattern.
{
"page_rules": {
"include": [],
"exclude": ["/checkout*", "/account/*", "/legal/*"]
}
}
To show different agents in different sections of the same site, use page targeting on the agents themselves: see Idle follow-ups and page targeting. Site-wide page rules and agent targeting combine: the widget must be allowed by both.
Page events#
The Page events section lets your own code trigger widget actions without writing widget code. Each rule has an event name and any of: open the chat, show a short message above the chat button, set visitor attributes (values can use {{field}} from the event data). Fire it with SiteTrellis('event', 'name', {...}). See Auto-open, exit intent and consent for the rules and limits.
Mobile and accessibility#
- Mobile. With
mobile_fullscreenon, the chat fills the screen on phones, which gives room for the keyboard. Usehide_on_mobileif the launcher covers important buttons on your mobile layout. Themobile.layoutsetting also offers a bottom sheet or a small floating window, and the optional expand button gives phones a true full-screen view that respects the notch and the on-screen keyboard. - Keyboard and screen readers. The widget is built to be keyboard operable: the launcher and controls can be reached with Tab, the window can be closed with Esc, focus moves into the chat when it opens and returns to the launcher when it closes, and new replies are announced through a live region. Test with your own assistive technology, since page context matters.
- Contrast and motion. Choose theme colors with sufficient contrast. The widget respects the visitor's reduced-motion preference where animation is used.
Advanced appearance settings#
Beyond the basics above, the widget has a structured settings document (schema 2). Every group is optional: a group you never touch keeps the look it always had, so sites saved before these settings existed render exactly as before. In the dashboard they are grouped in the Appearance tab, with search, a live preview and per-section reset. All values are validated on the server and again in the widget: colors are six-digit hex, choices come from fixed lists, numbers are clamped to a range, URLs must be https://, and nothing is ever treated as HTML.
| Group | What you can set |
|---|---|
theme.preset | The id of the premade theme you started from. It only remembers your starting point (the editor offers "Reset to theme"); the settings themselves are always stored explicitly. |
colors | Header (and a second color for a gradient), header text and bottom line, cards and menus, borders, links, input, input border, placeholder, buttons, accent, launcher, online and offline dots, unread badge, error color, page dimming. An empty value means "automatic" (derived from the brand color, as before). |
dark | The same colors for dark mode, separate from light. Empty means the built-in dark palette for window and bubbles, otherwise the light color. Used when mode is dark, or auto and the visitor's device is dark. |
type | Base size, line height, body and bold weight, header title size and weight. The font itself is theme.font: system, rounded, humanist, geometric, grotesque, serif, classic, editorial, slab, mono or typewriter (fonts already on the visitor's device). |
shape | Radius for bubbles, inputs, buttons and form cards (empty = follows the window radius), border width, and spacing density: compact, comfortable or spacious. |
effects | Shadow style (soft, crisp, lifted, glow, flat) and color, window opacity and background blur for a frosted-glass look. |
window | Desktop size, position and offsets as before, plus tablet_width, tablet_height and tablet offsets for screens between the phone breakpoint and 1024 px (empty = same as desktop). |
mobile | layout on phones (auto, fullscreen, sheet or floating), the phone breakpoint in pixels, bottom sheet height, and size and offsets of the floating window. |
launcher | Besides icon, image, label and size: shape (circle, rounded, pill, square), twelve built-in icons, badge style (count, dot, none), an attention animation (pulse, bounce, wiggle; three times unless animation_loop is on) and its own offsets. |
header | Alignment (left or center), avatar shape and size, and close button style (icon, text, chevron). |
messages | Bubble tail (corner, round, pointer), borders, maximum widths, avatars in messages, sender names, grouping of consecutive messages, timestamp format (time, time24, datetime, relative) and link style. |
composer | Input style (outlined, filled, underline), send button as icon, label or both, send icon and shape, maximum input height, and whether the box takes focus when the chat opens. The widget has no file attachments, so there is nothing to switch off. |
motion | Opening animation (pop, fade, slide, zoom, none), duration, optional closing animation, how new messages appear and the typing indicator (dots, pulse, wave, text). A visitor's "reduce motion" setting always wins. |
background | Solid, gradient or image for the message area and the header, with an overlay color and strength so text stays readable. Images must be https:// and are never fetched until a visitor loads your page. |
icons, footer | Solid or outline icons and line thickness; footer alignment and size. Add a one-line note above "Powered by" with copy.footer_note. |
expand | The expanded view: see Themes and the expanded view. |
tokens | Individual design values, for example --st-gap: 12px: see design tokens. Available on every plan. |
The extra text settings are footer_note (a line above "Powered by"), expand_label and collapse_label (the tooltip and screen reader name of the expand button), close_label (used by the text close button), side_title (the heading of the side panel in the expanded view, default "Ask about") and typing_text (the text typing indicator). Like every label they accept up to 120 characters (the footer note 160).
Check contrast as you go: the editor shows the WCAG ratio next to each text color, in light and in dark mode, and warns below 4.5:1. All premade themes pass AA in both modes.
Going further#
- Start from one of fourteen designed themes and use the larger, mobile friendly view: Themes and the expanded view.
- Fine-tune styling on Pro and above: Custom CSS and Shadow DOM.
- Open the chat from your own buttons and pass user details: Widget JavaScript API.
- Control where the widget loads: Install on any website.