Skip to content
Dashboard

Build custom Slack runtimes

Chat SDK now ships the Slack adapter's primitives as standalone imports for apps that already handle their own routing, state, or workflow execution.

Use only what you need:

  • Request verification and payload parsing (@chat-adapter/slack/webhook)

  • Markdown formatting (@chat-adapter/slack/format)

  • Fetch-based Web API calls (@chat-adapter/slack/api)

  • Block Kit conversion (@chat-adapter/slack/blocks)

Each subpath skips the full Chat runtime, so your imports stay clean.

lib/bot.ts
import { readSlackWebhook } from "@chat-adapter/slack/webhook";
import { postSlackMessage } from "@chat-adapter/slack/api";
export async function POST(request: Request) {
const payload = await readSlackWebhook(request, {
signingSecret: process.env.SLACK_SIGNING_SECRET!,
});
if (payload.kind === "app_mention") {
await postSlackMessage({
channel: payload.continuation.channelId,
markdownText: `received: ${payload.text}`,
token: process.env.SLACK_BOT_TOKEN!,
});
}
return new Response(null, { status: 200 });
}

Verifying a webhook and posting a reply with the low-level subpaths.

To get started, read the Slack primitives documentation.

The Complete Guide to Chat SDK

Learn how Chat SDK works end-to-end: from core concepts to building your first chatbot to deploying it across platforms.

Read the guide