Build custom Slack runtimes
Mirrored from Vercel — AI for archival readability. Support the source by reading on the original site.
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.
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
Discussion (0)
Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.
Sign in →No comments yet. Sign in and be the first to say something.