npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sqliteai/docs-chatbot

v0.1.3

Published

Documentation search chatbot powered by SQLite and AI

Downloads

175

Readme

@sqliteai/docs-chatbot

Status

Embeddable AI chatbot for documentation, powered by SQLite Cloud.

Quick Start

Prerequisites

Before using this chatbot, you need to:

  1. Index your documentation - Use the SQLite AI Search Action to create embeddings from your documentation files
  2. 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

Use your own button or trigger element to control when the chatbot opens. This mode is useful when you want the chatbot to integrate seamlessly with your existing UI design or place the trigger in a specific location (like a navigation bar or help menu).

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>

<!-- Your custom button -->
<button id="help-btn">Help & Support</button>

<!-- Chatbot with custom trigger mode -->
<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");

  // Open chatbot when button is clicked
  button.addEventListener("click", () => {
    chatbot.open = true;
  });

  // Listen to state changes (optional)
  chatbot.addEventListener("openchange", (e) => {
    console.log("Chatbot open:", e.detail.open);
  });
</script>

API Reference

React Component Props

| Property | Type | Required | Description | | ------------------------ | ------------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | 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

| Attribute | Required | Description | | ------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------- | | 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

| Property | Type | Description | | -------- | --------- | --------------------------------------------------------------- | | open | boolean | Get or set the chatbot open state (property-only, no attribute) |

Events

| Event | Detail | Description | | ------------ | ------------------- | ----------------------------------------- | | openchange | { open: boolean } | Fired when the chatbot open state changes |

Theming

Customize the chatbot's appearance using CSS variables.

CSS Variables

| Variable | Description | | ------------------------------------- | ------------------------ | | --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:

/* In your main CSS file, import the chatbot styles first */
@import "@sqliteai/docs-chatbot/style.css";

/* Then override the variables */
: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"; // Your CSS file with overrides

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>