Skip to content

Build custom Slack runtimes

1 min read

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 bot to deploying it across Slack, Teams, and more.

Read the guide