---
title: Introduction
description: A unified SDK for building chat bots across Slack, Microsoft Teams, Google Chat, Discord, Telegram, and more.
type: overview
---

Chat SDK is a TypeScript library for building chat bots that work across multiple platforms with a single codebase. Write your bot logic once and deploy it to Slack, Microsoft Teams, Google Chat, Discord, Telegram, GitHub, Linear, and WhatsApp.

## Why Chat SDK?

Building a chat bot that works across multiple platforms typically means maintaining separate codebases, learning different APIs, and handling platform-specific quirks individually. Chat SDK abstracts these differences behind a unified interface.

- **Single codebase** for all platforms
- **Type-safe** [adapters](/adapters) and event handlers with full TypeScript support
- **Event-driven** architecture with handlers for mentions, messages, reactions, button clicks, slash commands, and modals
- **Thread subscriptions** for multi-turn conversations
- **Rich UI** with JSX cards, buttons, and modals that render natively on each platform
- **AI streaming** with first-class support for streaming LLM responses
- **Serverless-ready** with distributed state via Redis and message deduplication

## How it works

Chat SDK has three core concepts:

1. **Chat** — the main entry point that coordinates [adapters](/adapters) and routes events to your handlers
2. **[Adapters](/adapters)** — platform-specific implementations that handle webhook parsing, message formatting, and API calls
3. **State** — a pluggable persistence layer for thread subscriptions and distributed locking

```typescript title="lib/bot.ts" lineNumbers
import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createRedisState } from "@chat-adapter/state-redis";

const bot = new Chat({
  userName: "mybot",
  adapters: {
    slack: createSlackAdapter(),
  },
  state: createRedisState(),
});

bot.onNewMention(async (thread) => {
  await thread.subscribe();
  await thread.post("Hello! I'm listening to this thread.");
});
```

Each adapter factory auto-detects credentials from environment variables (`SLACK_BOT_TOKEN`, `SLACK_SIGNING_SECRET`, `REDIS_URL`, etc.), so you can get started with zero config. Pass explicit values to override.

## Supported platforms

| Platform | Package | Mentions | Reactions | Cards | Modals | Streaming | DMs |
|----------|---------|----------|-----------|-------|--------|-----------|-----|
| Slack | `@chat-adapter/slack` | Yes | Yes | Yes | Yes | Native | Yes |
| Microsoft Teams | `@chat-adapter/teams` | Yes | Read-only | Yes | No | Post+Edit | Yes |
| Google Chat | `@chat-adapter/gchat` | Yes | Yes | Yes | No | Post+Edit | Yes |
| Discord | `@chat-adapter/discord` | Yes | Yes | Yes | No | Post+Edit | Yes |
| Telegram | `@chat-adapter/telegram` | Yes | Yes | Partial | No | Post+Edit | Yes |
| GitHub | `@chat-adapter/github` | Yes | Yes | No | No | No | No |
| Linear | `@chat-adapter/linear` | Yes | Yes | No | No | No | No |
| WhatsApp | `@chat-adapter/whatsapp` | N/A | Yes | Partial | No | No | Yes |

## AI coding agent support

If you use an AI coding agent like [Claude Code](https://docs.anthropic.com/en/docs/claude-code), you can teach it about Chat SDK by installing the skill:

```bash
npx skills add vercel/chat
```

This gives your agent access to Chat SDK's documentation, patterns, and best practices so it can help you build bots more effectively.

## Packages

The SDK is distributed as a set of packages you install based on your needs:

| Package | Description |
|---------|-------------|
| `chat` | Core SDK with `Chat` class, types, JSX runtime, and utilities |
| `@chat-adapter/slack` | Slack adapter |
| `@chat-adapter/teams` | Microsoft Teams adapter |
| `@chat-adapter/gchat` | Google Chat adapter |
| `@chat-adapter/discord` | Discord adapter |
| `@chat-adapter/telegram` | Telegram adapter |
| `@chat-adapter/github` | GitHub Issues adapter |
| `@chat-adapter/linear` | Linear Issues adapter |
| `@chat-adapter/whatsapp` | WhatsApp Business adapter |
| `@chat-adapter/state-redis` | Redis state adapter (production) |
| `@chat-adapter/state-ioredis` | ioredis state adapter (alternative) |
| `@chat-adapter/state-pg` | PostgreSQL state adapter (production) |
| `@chat-adapter/state-memory` | In-memory state adapter (development) |
