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 !…