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

quikchat

v1.1.17

Published

quikchat is a simple vanilla (no dependancies) JavaScript chat control for browsers

Readme

License NPM version CI

QuikChat

Zero-dependency JavaScript chat widget for modern web applications

QuikChat is a lightweight, highly customizable chat interface that integrates seamlessly with any web project. Built with vanilla JavaScript, it provides powerful features for LLM applications, real-time chat, and interactive messaging experiences.

🚀 Live Demo | 📚 API Reference | 🛠 Developer Guide

✨ Key Features

  • 🚫 Zero Dependencies - Pure vanilla JavaScript, no frameworks required
  • 🎨 Fully Customizable - Complete CSS theming system with multi-instance support
  • 🤖 LLM Ready - Built-in support for OpenAI, Anthropic, Ollama, and streaming responses
  • 📱 Responsive Design - Adapts to any screen size and container dimensions
  • ⚡ High Performance - Virtual scrolling for large message volumes
  • 👁 Advanced Visibility - Individual and group-based message control (v1.1.13+)
  • 🏷 Tagged Messages - Powerful tagging system for message organization (v1.1.14+)
  • 💾 Full History Control - Save, load, and restore complete chat sessions
  • 🔧 Developer Friendly - TypeScript-ready with comprehensive API

🚀 Quick Start

Get a working chat interface in under 60 seconds:

Via CDN

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="https://unpkg.com/quikchat/dist/quikchat.css">
</head>
<body>
    <div id="chat" style="width: 100%; height: 400px;"></div>
    
    <script src="https://unpkg.com/quikchat"></script>
    <script>
        const chat = new quikchat('#chat', (instance, message) => {
            // Echo user message
            instance.messageAddNew(message, 'You', 'right');
            
            // Add bot response
            setTimeout(() => {
                instance.messageAddNew('Thanks for your message!', 'Bot', 'left');
            }, 1000);
        });
        
        // Add welcome message
        chat.messageAddNew('Hello! How can I help you today?', 'Bot', 'left');
    </script>
</body>
</html>

Via NPM

npm install quikchat
import quikchat from 'quikchat';
import 'quikchat/dist/quikchat.css';

const chat = new quikchat('#chat-container', (instance, message) => {
    // Your message handling logic
    console.log('User said:', message);
});

📦 Installation Options

NPM Package

npm install quikchat

CDN (Latest Version)

<!-- CSS -->
<link rel="stylesheet" href="https://unpkg.com/quikchat/dist/quikchat.css">

<!-- JavaScript -->
<script src="https://unpkg.com/quikchat"></script>

Direct Download

Download the latest release from GitHub Releases

📖 View Full Release Notes

🔔 Enhanced Message Callbacks

Track message modifications for streaming and real-time updates:

// Track streaming content as it arrives
chat.setCallbackonMessageAppend((instance, msgId, content) => {
  console.log(`Streaming: ${content} added to message ${msgId}`);
});

// Monitor message edits
chat.setCallbackonMessageReplace((instance, msgId, newContent) => {
  console.log(`Message ${msgId} updated`);
});

// Track deletions
chat.setCallbackonMessageDelete((instance, msgId) => {
  console.log(`Message ${msgId} deleted`);
});

📚 Powerful History Management

Efficiently handle large chat histories with pagination and search:

// Paginated history retrieval
const page = chat.historyGetPage(1, 20, 'desc'); // Get newest 20 messages
console.log(page.messages);
console.log(page.pagination.hasNext); // Check if more pages exist

// Search through history
const results = chat.historySearch({ 
  text: 'error',
  userString: 'Support',
  limit: 50 
});

// Get history metadata
const info = chat.historyGetInfo();
console.log(`Total messages: ${info.totalMessages}`);
console.log(`Memory used: ${info.memoryUsage.estimatedSize} bytes`);

🎨 Theming & Customization

QuikChat includes beautiful built-in themes and supports complete customization:

// Use built-in themes
const chat = new quikchat('#chat', handler, {
    theme: 'quikchat-theme-dark' // or 'quikchat-theme-light'
});

// Switch themes dynamically
chat.changeTheme('quikchat-theme-light');

Custom Themes

Create your own themes with CSS:

.my-custom-theme {
    border: 2px solid #3b82f6;
    border-radius: 12px;
    font-family: 'SF Pro Display', sans-serif;
}

.my-custom-theme .quikchat-message-content {
    border-radius: 18px;
    padding: 12px 16px;
}

/* Apply to chat */
const chat = new quikchat('#chat', handler, {
    theme: 'my-custom-theme'
});

📖 Complete Theming Guide

🤖 LLM Integration Examples

OpenAI Integration

async function handleMessage(chat, message) {
    chat.messageAddNew(message, 'You', 'right');
    
    const response = await fetch('https://api.openai.com/v1/chat/completions', {
        method: 'POST',
        headers: {
            'Authorization': `Bearer ${API_KEY}`,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
            model: 'gpt-4',
            messages: formatChatHistory(chat.historyGetAllCopy(), message)
        })
    });
    
    const data = await response.json();
    chat.messageAddNew(data.choices[0].message.content, 'Assistant', 'left');
}

Streaming Responses

// Create message for streaming
const botMsgId = chat.messageAddNew('', 'Bot', 'left');

// Append content as it arrives
streamingAPI.onChunk(chunk => {
    chat.messageAppendContent(botMsgId, chunk);
});

🛠 Complete LLM Integration Guide

🏗 Framework Integration

React

function ChatComponent() {
    const chatRef = useRef(null);
    const instanceRef = useRef(null);
    
    useEffect(() => {
        instanceRef.current = new quikchat(chatRef.current, handleMessage);
    }, []);
    
    return <div ref={chatRef} style={{ height: '400px' }} />;
}

Vue

<template>
    <div ref="chatContainer" class="chat-container"></div>
</template>

<script>
import quikchat from 'quikchat';

export default {
    mounted() {
        this.chat = new quikchat(this.$refs.chatContainer, this.handleMessage);
    }
}
</script>

⚛️ Framework Integration Examples

📖 Documentation

| Document | Description | |-|-| | API Reference | Complete technical reference for all methods and options | | Developer Guide | Practical recipes and advanced patterns | | Examples | Working code examples and demos | | Live Demo | Interactive examples and showcase |

🌟 Examples & Demos

📂 Browse All Examples

🚀 Performance

QuikChat is built for production use:

  • Lightweight: ~25KB minified + gzipped
  • Fast: Sub-millisecond message rendering
  • Scalable: Tested with 10,000 messages rendering in 38ms with virtual scrolling
  • Memory Efficient: Only renders visible messages in viewport

📊 Virtual Scrolling Technical Details | Performance Guide

🛠 Building from Source

# Clone repository
git clone https://github.com/deftio/quikchat.git
cd quikchat

# Install dependencies
npm install

# Build for production
npm run build

# Run tests
npm test

# Start development server
npm run dev

Requirements: Node.js 14+ and npm 6+

🤝 Contributing

We welcome contributions! Here's how you can help:

  1. 🐛 Report Issues - Found a bug? Open an issue
  2. 💡 Feature Requests - Have an idea? We'd love to hear it
  3. 🔧 Code Contributions - Submit pull requests for bug fixes or new features
  4. 📖 Documentation - Help improve our guides and examples
  5. 🌟 Share Examples - Show us what you've built with QuikChat

Development Setup

git clone https://github.com/deftio/quikchat.git
cd quikchat
npm install
npm run dev

📋 Contributing Guidelines

📄 License

QuikChat is licensed under the BSD-2-Clause License.

🔗 Links