Overview
Platform-specific adapters for Slack, Teams, Google Chat, Discord, GitHub, and Linear.
Adapters handle webhook verification, message parsing, and API calls for each platform. Install only the adapters you need.
Feature matrix
Messaging
| Feature | Slack | Teams | Google Chat | Discord | GitHub | Linear |
|---|---|---|---|---|---|---|
| Post message | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Edit message | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Delete message | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| File uploads | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ |
| Streaming | ✅ Native | ⚠️ Post+Edit | ⚠️ Post+Edit | ⚠️ Post+Edit | ❌ | ❌ |
Rich content
| Feature | Slack | Teams | Google Chat | Discord | GitHub | Linear |
|---|---|---|---|---|---|---|
| Card format | Block Kit | Adaptive Cards | Google Chat Cards | Embeds | GFM Markdown | Markdown |
| Buttons | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Link buttons | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Select menus | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Fields | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Images in cards | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Modals | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Conversations
| Feature | Slack | Teams | Google Chat | Discord | GitHub | Linear |
|---|---|---|---|---|---|---|
| Mentions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Add reactions | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Remove reactions | ✅ | ❌ | ✅ | ✅ | ⚠️ | ⚠️ |
| Typing indicator | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ |
| DMs | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Ephemeral messages | ✅ Native | ❌ | ✅ Native | ❌ | ❌ | ❌ |
Message history
| Feature | Slack | Teams | Google Chat | Discord | GitHub | Linear |
|---|---|---|---|---|---|---|
| Fetch messages | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Fetch single message | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Fetch thread info | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Fetch channel messages | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| List threads | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Fetch channel info | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Post channel message | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
⚠️ indicates partial support — the feature works with limitations. See individual adapter pages for details.
Packages
| Platform | Package |
|---|---|
| Slack | @chat-adapter/slack |
| Microsoft Teams | @chat-adapter/teams |
| Google Chat | @chat-adapter/gchat |
| Discord | @chat-adapter/discord |
| GitHub | @chat-adapter/github |
| Linear | @chat-adapter/linear |
How adapters work
Each adapter implements a standard interface that the Chat class uses to route events and send messages. When a webhook arrives:
- The adapter verifies the request signature
- Parses the platform-specific payload into a normalized
Message - Routes to your handlers via the
Chatclass - Converts outgoing messages from markdown/AST/cards to the platform's native format
Using multiple adapters
Register multiple adapters and your event handlers work across all of them:
import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createTeamsAdapter } from "@chat-adapter/teams";
import { createGoogleChatAdapter } from "@chat-adapter/gchat";
import { createRedisState } from "@chat-adapter/state-redis";
const bot = new Chat({
userName: "mybot",
adapters: {
slack: createSlackAdapter(),
teams: createTeamsAdapter(),
gchat: createGoogleChatAdapter(),
},
state: createRedisState(),
});
// This handler fires for mentions on any platform
bot.onNewMention(async (thread) => {
await thread.subscribe();
await thread.post("Hello!");
});Each adapter auto-detects credentials from environment variables, so you only need to pass config when overriding defaults.
Each adapter creates a webhook handler accessible via bot.webhooks.slack, bot.webhooks.teams, etc.