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

@auticlabs/bulut

v1.4.2

Published

Bulut – a lightweight AI chatbot widget for React, Next.js and Vite applications

Readme

Bulut

Bulut is an embeddable AI accessibility assistant for modern web applications.
It provides real-time voice interaction, contextual understanding of your pages, and structured tool-based navigation — all isolated inside a Shadow DOM.

Designed for production use. Built for accessibility from the ground up.


Core Capabilities

  • Real-time voice pipeline (STT → LLM → TTS with streaming)
  • Structured tool calling (navigate, click, scroll, context retrieval)
  • Floating chat interface with compact and full chat modes
  • Accessibility-first continuous conversation mode
  • Shadow DOM isolation (no CSS leakage)
  • Single bundle distribution
  • Minimal integration surface

Installation

npm install bulutbot

Quick Integration

React / Vite

import { Bulut } from "bulutbot";

export default function App() {
  return (
    <>
      <h1>My App</h1>
      <Bulut projectId="your-project-id" />
    </>
  );
}

Next.js (App Router)

The component internally uses 'use client', so it can be placed directly in layouts:

// app/layout.tsx
import { Bulut } from "bulutbot";

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="en">
      <body>
        {children}
        <Bulut projectId="your-project-id" />
      </body>
    </html>
  );
}

If conditional rendering is required:

"use client";

import { Bulut } from "bulutbot";

export function ChatWidget() {
  return (
    <Bulut
      projectId="your-project-id"
      baseColor="#0ea5e9"
      voice="alloy"
    />
  );
}

Next.js (Pages Router)

// pages/_app.tsx
import type { AppProps } from "next/app";
import { Bulut } from "bulutbot";

export default function App({ Component, pageProps }: AppProps) {
  return (
    <>
      <Component {...pageProps} />
      <Bulut projectId="your-project-id" />
    </>
  );
}

Vanilla HTML (Embed Mode)

For non-React environments:

<script type="module">
  import Bulut from "https://unpkg.com/bulutbot/dist/embed.js";

  Bulut.init({
    projectId: "your-project-id"
  });
</script>

Configuration

Component Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | projectId | string | — | Required project identifier. | | backendBaseUrl | string | "http://localhost:8000" | Backend API base URL. | | model | string | "google/gemini-3-flash-preview:nitro" | LLM identifier. | | voice | "alloy" \| "zeynep" \| "ali" | "alloy" | TTS voice selection. | | baseColor | string | "#6C03C1" | Primary accent color (hex). |


Embed API

When using the embed entry:

Bulut.init(options)

Initializes the widget.

Additional option:

  • containerId — Mount into an existing element instead of auto-creating one.
Bulut.init({
  projectId: "your-project-id",
  baseColor: "#0ea5e9"
});

Bulut.destroy()

Unmounts the widget and cleans listeners.

Bulut.isReady()

Returns boolean initialization state.


Accessibility Mode

When accessibility mode is active:

  • Voice becomes the primary interface
  • Responses become more descriptive
  • Listening auto-restarts after speech output
  • Conversation flows continuously

This mode is optimized for visually impaired users and hands-free environments.


Architecture Notes

Bulut dynamically loads a lightweight Preact-based runtime and mounts it inside a Shadow DOM container.

Implications:

  1. No global style collisions.
  2. SSR-safe via runtime import.
  3. Small bundle size.
  4. Framework-agnostic backend communication.

The assistant retrieves structured page context and executes explicit tool calls instead of relying purely on text generation.


Browser Support

ES2020+ environments:

  • Chrome 80+
  • Firefox 80+
  • Safari 14+
  • Edge 80+

Links

  • Website: https://bulut.lu
  • About: https://bulut.lu/about
  • npm: https://www.npmjs.com/package/@auticlabs/bulut
  • Backend Repository: https://github.com/gpercem/bulutbot

License

This project is licensed under the MIT License.