@sqliteai/docs-chatbot

Embeddable AI chatbot for documentation, powered by SQLite Cloud.
Quick Start
Prerequisites
Before using this chatbot, you need to:
- Index your documentation - Use the SQLite AI Search Action to create embeddings from your documentation files
- Create an edge function - Follow the setup guide to deploy the search edge function
React
npm install @sqliteai/docs-chatbot
import { DocsChatbot } from "@sqliteai/docs-chatbot";
import "@sqliteai/docs-chatbot/style.css";
function App() {
return (
<DocsChatbot
searchUrl="https://yourproject.sqlite.cloud/v2/functions/aisearch-docs"
apiKey="your-api-key"
title="Help Center"
/>
);
}
Vanilla JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<script src="https://unpkg.com/@sqliteai/docs-chatbot/dist/umd/docs-chatbot.min.js"></script>
<docs-chatbot
search-url="https://yourproject.sqlite.cloud/v2/functions/aisearch-docs"
api-key="your-api-key"
title="Help Center"
>
</docs-chatbot>
</body>
</html>
Trigger Modes
Default Trigger
Adds a floating button in the bottom-right corner that opens the chatbot when clicked.
<DocsChatbot
searchUrl="your-edge-function-url"
apiKey="your-api-key"
title="Help Center"
/>
Custom Trigger
React:
import { DocsChatbot } from "@sqliteai/docs-chatbot";
import "@sqliteai/docs-chatbot/style.css";
import { useState } from "react";
function App() {
const [open, setOpen] = useState(false);
return (
<>
{/* Your custom button anywhere in your app */}
<button onClick={() => setOpen(true)}>Help & Support</button>
{/* Chatbot with custom trigger mode */}
<DocsChatbot
searchUrl="your-edge-function-url"
apiKey="your-api-key"
title="Help Center"
trigger="custom"
open={open}
onOpenChange={setOpen}
/>
</>
);
}
Vanilla JavaScript:
<script src="https://unpkg.com/@sqliteai/docs-chatbot/dist/umd/docs-chatbot.min.js"></script>
<button id="help-btn">Help & Support</button>
<docs-chatbot
search-url="your-edge-function-url"
api-key="your-api-key"
title="Help Center"
trigger="custom"
>
</docs-chatbot>
<script>
const chatbot = document.querySelector("docs-chatbot");
const button = document.getElementById("help-btn");
button.addEventListener("click", () => {
chatbot.open = true;
});
chatbot.addEventListener("openchange", (e) => {
console.log("Chatbot open:", e.detail.open);
});
</script>
API Reference
React Component Props
searchUrl | string | Yes | Full URL of your deployed SQLite Cloud edge function (e.g., https://yourproject.sqlite.cloud/v2/functions/aisearch-docs) |
apiKey | string | Yes | SQLite Cloud API key with permissions to execute the edge function |
title | string | Yes | Title displayed in the chatbot header |
emptyState | object | No | Customizes the initial empty state of the chatbot |
emptyState.title | string | No | Main heading shown before the first message |
emptyState.description | string | No | Subtext shown below the empty state title |
trigger | "default" | "custom" | No | Trigger mode: "default" uses floating button, "custom" requires you to control open state (default: "default") |
open | boolean | Yes when trigger="custom" | Control the chatbot open state (only used with trigger="custom") |
onOpenChange | (open: boolean) => void | Yes when trigger="custom" | Callback fired when the open state changes (only used with trigger="custom") |
Web Component
Attributes
search-url | Yes | Full URL of your deployed SQLite Cloud edge function (e.g., https://yourproject.sqlite.cloud/v2/functions/aisearch-docs) |
api-key | Yes | SQLite Cloud API key with permissions to execute the edge function |
title | Yes | Title displayed in the chatbot header |
empty-state-title | No | Main heading shown before the first message |
empty-state-description | No | Subtext shown below the empty state title |
trigger | No | Trigger mode: "default" uses floating button, "custom" requires controlling open property (default: "default") |
Properties
open | boolean | Get or set the chatbot open state (property-only, no attribute) |
Events
openchange | { open: boolean } | Fired when the chatbot open state changes |
Theming
Customize the chatbot's appearance using CSS variables.
CSS Variables
--docs-chatbot-radius | Border radius |
--docs-chatbot-background | Background color |
--docs-chatbot-foreground | Text color |
--docs-chatbot-primary | Primary color |
--docs-chatbot-primary-foreground | Primary text color |
--docs-chatbot-secondary | Secondary color |
--docs-chatbot-secondary-foreground | Secondary text color |
--docs-chatbot-muted | Muted color |
--docs-chatbot-muted-foreground | Muted text color |
--docs-chatbot-accent | Accent color |
--docs-chatbot-accent-foreground | Accent text color |
--docs-chatbot-border | Border color |
--docs-chatbot-input | Input background color |
--docs-chatbot-ring | Focus ring color |
--docs-chatbot-card | Card background color |
--docs-chatbot-card-foreground | Card text color |
--docs-chatbot-popover | Popover background color |
--docs-chatbot-popover-foreground | Popover text color |
--docs-chatbot-destructive | Destructive/error color |
Examples
React:
@import "@sqliteai/docs-chatbot/style.css";
:root {
--docs-chatbot-primary: oklch(0.6 0.2 0);
--docs-chatbot-primary-foreground: oklch(1 0 0);
--docs-chatbot-border: oklch(0.85 0 0);
--docs-chatbot-radius: 8px;
}
import { DocsChatbot } from "@sqliteai/docs-chatbot";
import "./styles.css";
function App() {
return (
<DocsChatbot
searchUrl="your-edge-function-url"
apiKey="your-api-key"
title="Help Center"
/>
);
}
Vanilla JavaScript:
<style>
docs-chatbot {
--docs-chatbot-primary: oklch(0.6 0.2 0);
--docs-chatbot-primary-foreground: oklch(1 0 0);
--docs-chatbot-border: oklch(0.85 0 0);
--docs-chatbot-radius: 8px;
}
</style>
<docs-chatbot
search-url="your-edge-function-url"
api-key="your-api-key"
title="Help Center"
>
</docs-chatbot>