Widget customization
Configure the assistant and search widgets by setting HTML attributes. Override text properties to localize the widget.
biel-button
The <biel-button> component adds a floating AI chat button to your site. Use <biel-bot> to render the same assistant inline; it accepts the assistant modal properties below. See Embedded mode.

Usage
<biel-button project="YOUR_PROJECT_ID" header-title="Biel.ai assistant" button-style="dark">Ask AI</biel-button>
Assistant button properties
| Property | Description |
|---|---|
| Layout | |
project | Required Type: stringThe project ID. |
button-position | Type: stringDefault value: defaultAvailable values: default, bottom-right, bottom-left, center-right, center-left, custom Controls the position of the chat button on your webpage. Use custom to position the button using CSS. |
button-style | Type: stringDefault value: defaultAvailable values: default, dark, lightDefines the visual style of the chat button. dark and light choose a launcher palette; default inherits the page styling. The modal theme is controlled separately by data-theme. |
custom-font | Type: booleanDefault value: falseWhen set to true, disables loading of the Inter font. Use this if your site already uses a different font to improve load time and maintain font consistency. |
hide-icon | Type: booleanDefault value: falseWhen set to true, the button icon hides. |
ai-icon | Type: stringDefault value: bielAvailable values: biel, bot, sparks, question-markSpecifies which AI icon to display in the button. |
hide-avatars | Type: booleanDefault value: falseWhen set to true, hides avatars in the chat interface. |
api-key | Type: stringDefault value: `` API key for authenticating requests to private projects. Required for private projects with chat_create and project_read permissions. Not required for public projects. |
api-url | Type: stringDefault value: Biel.ai API Override the base API URL for self-hosted or custom endpoints. |
The "Powered by Biel.ai" branding is controlled by your team's Remove 'Powered by Biel.ai' branding setting. An eligible plan enables that setting; you still need to activate it and click Save details. See Whitelabel.
Assistant modal properties
| Property | Description |
|---|---|
| Layout | |
disable-input | Type: booleanDefault value: falseWhen set to true, the user input field is disabled. |
disable-autofocus | Type: booleanDefault value: falseWhen set to true, opening the assistant does not focus the message input automatically. |
email | Type: stringDefault value: `` An email address or ID for conversation tracking. This ID will be associated with the chat session in your project dashboard for analytics and user tracking purposes. |
metadata | Type: stringDefault value: `` Custom metadata to attach to chat sessions. Use this to pass additional contextual information (e.g., user plan, page URL, or other identifiers) that will be associated with the conversation for analytics purposes. |
expand-modal | Type: booleanDefault value: falseWhen set to true, the chat modal opens in its expanded state by default. |
hide-close-button | Type: booleanDefault value: falseWhen set to true, the close icon hides. |
hide-expand-button | Type: booleanDefault value: falseWhen set to true, the expand button icon hides. |
hide-refresh-button | Type: booleanDefault value: falseWhen set to true, the refresh button hides. |
hide-feedback | Type: booleanDefault value: falseWhen set to true, removes the feedback options (like thumbs up/down) that users can use to rate AI responses. |
hide-sources | Type: booleanDefault value: falseWhen set to true, hides the sources section from AI responses in the chat interface. |
hide-inline-citations | Type: booleanDefault value: falseWhen set to true, removes numeric inline citations from AI answers and their numbers from source cards. The sources section remains available unless hide-sources is also set. |
hide-settings-button | Type: booleanDefault value: falseWhen set to true, hides the reasoning mode selector above the message input. Only applies if reasoning mode is enabled for your project. |
hide-connect-button | Type: booleanDefault value: falseWhen set to true, hides the Connect menu above the message input. This menu provides MCP (Model Context Protocol) connection options when MCP is enabled for the project. |
hide-tooltips | Type: booleanDefault value: falseWhen set to true, hides the tooltips that appear when hovering over header icons. |
loading-indicator | Type: stringDefault value: spinnerAvailable values: spinner, dotsShows a spinner with the current operation while the assistant is working. Use dots for the previous bouncing dots animation without visible progress text. Screen reader announcements and error recovery remain available. See Chat progress. |
loading-text | Type: stringDefault value: Loading…Loading label before the first progress update arrives. With dots, this label is announced to screen readers without appearing visually. See Chat progress. |
modal-position | Type: stringDefault value: centerAvailable values: center, top-center, top-left, top-right, center-left, center-right, bottom-left, bottom-right, sidebar-left, sidebar-rightDetermines where the chat modal appears on the screen when opened. Use sidebar-left or sidebar-right to dock the chat as a side panel. |
show-terms-modal | Type: booleanDefault value: falseWhen set to true, displays a terms and conditions modal before starting the chat. |
think-mode-enabled | Type: booleanDefault value: falseLegacy option that starts a new conversation in Think mode when reasoning mode is enabled for the project. Use default-think-mode to choose Auto, Instant, or Think. A visitor's saved choice takes precedence. See Reasoning modes. |
default-think-mode | Type: stringAvailable values: auto, fast, thinkStarting mode for a new conversation when reasoning mode is enabled for the project. A visitor's saved choice takes precedence. This property takes precedence over the legacy think-mode-enabled option. See Reasoning modes. |
keep-conversation | Type: booleanDefault value: trueWhen set to false, clears the conversation history on page navigation. By default, a conversation can be restored across page reloads for one hour after its last saved update, using browser storage. Each widget instance keeps its own conversation; use a stable HTML id when placing several widgets on a page. |
render-math | Type: booleanDefault value: trueWhen set to true, typesets supported LaTeX in AI answers with MathJax. Set to false to leave LaTeX source unchanged. |
render-diagrams | Type: booleanDefault value: trueRenders Mermaid diagrams in AI answers. Set to false to show their source code instead. |
mermaid-theme | Type: stringDefault value: defaultTheme used for rendered Mermaid diagrams. |
mathjax-url | Type: stringDefault value: https://cdn.jsdelivr.net/npm/[email protected]/es5/tex-svg.jsThe MathJax script URL. Set this to a self-hosted copy when your site's Content Security Policy blocks the default CDN. |
| MCP Integration | |
mcp-server-url | Type: stringDefault value: `` Override the MCP server URL. Use for custom or self-hosted MCP servers, or when authentication is required. Takes priority over the API-provided URL. See MCP Server. |
| Text | |
assistant-label | Type: stringDefault value: AssistantLabel text displayed above AI responses in the chat. |
close-button-text | Type: stringDefault value: CloseTooltip text for the close button in the assistant header. |
collapse-button-text | Type: stringDefault value: CollapseTooltip text for the collapse button in the assistant header. |
error-message-4-0-3 | Type: stringDefault value: Oops! The request URL or API key is invalid or not authorized for this project.403 unauthorized message. |
error-message-4-0-4 | Type: stringDefault value: Oops! We could not find the provided project ID.404 not found message. |
error-message-default | Type: stringDefault value: Oops! Please try again later.500 error message. |
expand-button-text | Type: stringDefault value: ExpandTooltip text for the expand button in the assistant header. |
footer-text | Type: stringDefault value: AI answers may be inaccurate. Verify with official sources.Footer text. |
header-title | Type: stringDefault value: Company Name AITitle text for the assistant header. |
input-placeholder-text | Type: stringDefault value: Type your messagePlaceholder text displayed in the assistant's input field. |
connect-button-text | Type: stringDefault value: ConnectTooltip text for the Connect button in the assistant header. |
mcp-url-text | Type: stringDefault value: MCP URLLabel for the MCP URL option in the connect dialog. |
mcp-url-description | Type: stringDefault value: Copy to clipboardDescription text for the MCP URL option in the connect dialog. |
mcp-claude-text | Type: stringDefault value: Claude CodeLabel for the Claude Code option in the connect dialog. |
mcp-claude-description | Type: stringDefault value: CLI commandDescription text for the Claude Code option in the connect dialog. |
mcp-codex-text | Type: stringDefault value: CodexLabel for the Codex option in the Connect menu. |
mcp-codex-description | Type: stringDefault value: Copy setup commandTooltip text for copying the Codex setup command. |
mcp-codex-copied-description | Type: stringDefault value: Command copied to clipboardConfirmation after copying the Codex setup command. |
mcp-copilot-text | Type: stringDefault value: Copilot (VS code)Label for the Copilot option in the connect dialog. |
mcp-copilot-description | Type: stringDefault value: Opens in a new tabDescription text for the Copilot option in the connect dialog. |
mcp-cursor-text | Type: stringDefault value: CursorLabel for the Cursor option in the connect dialog. |
mcp-cursor-description | Type: stringDefault value: Opens in a new tabDescription text for the Cursor option in the connect dialog. |
mcp-copied-text | Type: stringDefault value: Copied!Confirmation text shown after copying an MCP value to the clipboard. |
mcp-url-copied-description | Type: stringDefault value: URL copied to clipboardDescription text shown after copying the MCP URL. |
mcp-claude-copied-description | Type: stringDefault value: Command copied to clipboardDescription text shown after copying the Claude Code command. |
refresh-button-text | Type: stringDefault value: RefreshTooltip text for the refresh button in the assistant header. |
continue-text | Type: stringDefault value: Continue generatingLabel for continuing an answer that reached its length limit. |
incomplete-text | Type: stringDefault value: This answer could not be completed. Ask for a shorter answer or a specific section.Message shown when an answer cannot be completed. |
message-too-long-text | Type: stringDefault value: Message is too long. Use at most 10,000 characters.Validation message for an oversized question. |
send-button-text | Type: stringDefault value: SendText displayed on the send button next to the input field. |
sources-text | Type: stringDefault value: SourcesText displayed for introducing sources in messages. |
suggested-questions | Type: stringDefault value: empty A JSON array or comma-separated list of questions shown when users open the chat. For example, suggested-questions='["How do I start?", "What can I build?"]'. |
suggested-questions-title | Type: stringDefault value: Suggested questionsThe heading text that appears above the list of suggested questions in the chat interface. |
settings-button-text | Type: stringDefault value: SettingsTooltip text for the settings button (reasoning mode selector) in the assistant header. Only visible if reasoning mode is enabled for your project. |
terms-checkbox-text | Type: stringDefault value: I have read and agree to the Terms & Conditions.Text displayed next to the terms acceptance checkbox. |
terms-description | Type: stringDefault value: Please review our <a href='https://biel.ai/terms' target='_blank' rel='noopener'>Terms & Conditions</a> before proceeding.Description text shown in the terms and conditions modal. |
terms-title | Type: stringDefault value: Chatbot Terms & ConditionsTitle text for the terms and conditions modal. |
think-mode-auto-text | Type: stringDefault value: AutoLabel for the Auto reasoning mode in the settings dropdown. |
think-mode-auto-description | Type: stringDefault value: Balances speed and qualityDescription for the Auto reasoning mode. |
think-mode-fast-text | Type: stringDefault value: InstantLabel for the Instant reasoning mode in the settings dropdown. |
think-mode-fast-description | Type: stringDefault value: Prioritizes speedDescription for the Instant reasoning mode. |
think-mode-think-text | Type: stringDefault value: ThinkLabel for the Think reasoning mode in the settings dropdown. |
think-mode-think-description | Type: stringDefault value: Takes longer for better accuracyDescription for the Think reasoning mode. |
welcome-message | Type: stringDefault value: "" A custom greeting message that appears when users first open the chat. |
The escape-close, click-outside-close, and show-modal properties are available on <biel-bot> directly. The <biel-button> launcher does not expose those properties.
When using <biel-bot> directly, you can also set smooth-streaming="false" to display response chunks as they arrive instead of smoothing their appearance. Its default is true.
biel-search-button
The <biel-search-button> component adds an AI-powered search bar to your site. Use <biel-search> to render the search interface directly; it accepts the search modal and assistant modal properties below.

Usage
<biel-search-button project="YOUR_PROJECT_ID" button-style="rounded" search-placeholder="Search here...">Search</biel-search-button>
Search button properties
| Property | Description |
|---|---|
| Layout | |
project | Required Type: stringThe project ID. |
button-style | Type: stringDefault value: defaultAvailable values: default, roundedStyle of the button. |
custom-font | Type: booleanDefault value: falseWhen set to true, the Inter font will not be loaded. Useful if your site already uses a different font, enabling a quicker load time. |
hide-ctrl-k | Type: booleanDefault value: falseWhen set to true, hides the Ctrl+K hint and disables the launcher's Ctrl+K keyboard shortcut. |
hide-icon | Type: booleanDefault value: falseWhen set to true, the button icon hides. |
ai-icon | Type: stringDefault value: bielAvailable values: biel, bot, sparks, question-markSpecifies the AI icon in the assistant opened through Ask AI. The search launcher uses a search icon. |
hide-avatars | Type: booleanDefault value: falseWhen set to true, hides avatars in the chat interface. |
api-key | Type: stringDefault value: `` API key for authenticating requests to private projects. Required for private projects with chat_create, project_search, and project_read permissions. Not required for public projects. |
Search modal properties
| Property | Description |
|---|---|
| Layout | |
disable-autofocus | Type: booleanDefault value: falseWhen set to true, opening search does not focus the search input automatically. |
hide-ask-ai-button | Type: booleanDefault value: falseWhen set to true, the "Ask AI" button is hidden from the search results. |
hide-descriptions | Type: booleanDefault value: falseWhen set to true, hides descriptions in search results for a cleaner interface. |
hide-filters | Type: booleanDefault value: falseWhen set to true, hides the site filter dropdown. The dropdown appears beside the navigation hints when search filters are configured in your project settings. See Search filters. |
hide-navigation-buttons | Type: booleanDefault value: falseWhen set to true, hides navigation buttons (up and down arrows, enter, escape) in the search modal for a simplified interface. |
modal-position | Type: stringDefault value: top-centerAvailable values: center, top-center, top-left, top-right, center-left, center-right, bottom-left, bottom-right, sidebar-left, sidebar-rightPosition of the search modal. Use sidebar-left or sidebar-right to dock as a side panel. |
stacked | Type: booleanDefault value: falseWhen set to true, displays search results in a stacked layout. |
clean-titles | Type: booleanDefault value: falseWhen set to true, removes site names from page titles that follow the format "Page Title |
| Text | |
ai-result-fragment | Type: stringDefault value: "Ask AI to answer your question"Text displayed in the AI result section of the search modal. |
all-sites-text | Type: stringDefault value: All sitesLabel for the unfiltered option in the site filter dropdown. |
search-placeholder | Type: stringDefault value: "Search or ask AI..."Placeholder for the search input. |
Search assistant modal properties
Most properties that can be defined in <biel-button> for configuring the assistant modal can be set in the biel-search-button.
For details, see Assistant modal properties. Diagram options (render-diagrams and mermaid-theme) are supported by <biel-button> and <biel-bot>; the search widgets do not expose them.
Use <biel-search> directly for escape-close, click-outside-close, and show-search-modal. These properties are not exposed by the <biel-search-button> launcher.
Common customizations
Change the assistant title
By default, the assistant header displays "Company Name AI". Set the header-title property to show your own title:
<biel-button project="YOUR_PROJECT_ID" header-title="Acme AI">Ask AI</biel-button>
Change the button text
Replace the inner text of the element to change what the button says:
<biel-button project="YOUR_PROJECT_ID">Help</biel-button>
Open the chat modal from a custom element
Use <biel-bot> directly and set its show-modal property from a custom button:
<biel-bot id="my-assistant" project="YOUR_PROJECT_ID"></biel-bot>
<button onclick="document.querySelector('#my-assistant').showModal = true">Ask AI</button>
Use the equivalent show-search-modal property on <biel-search> to open search programmatically. The two launcher components open their modals when clicked; assigning these modal properties to a launcher does not open its modal.