Blog

Announcement

Linq is now a vendor-official adapter for Vercel's Chat SDK

June 23, 2026·2 min read
Linq is now a vendor-official adapter for Vercel's Chat SDK

Today we're announcing that Linq is an official vendor adapter for Chat SDK — Vercel's open-source TypeScript framework for building bots and agents across every major chat platform.

That means you can now build an AI agent that texts over iMessage, RCS, and SMS — using the same unified API you'd use to build a Slack bot, a Discord bot, or a Teams integration.

What is Chat SDK?

Chat SDK is a platform-agnostic, event-driven SDK for building chat bots. It abstracts away the differences between Slack, Microsoft Teams, Google Chat, Discord, WhatsApp, and more — so you write your bot logic once and it runs anywhere.

With 1.4M weekly downloads, 2.1K GitHub stars, and 15+ adapters, it's become the standard toolkit for teams building AI-native chat experiences. It's maintained by Vercel and integrates natively with AI SDK for streaming, tool calls, and structured outputs.

What the Linq adapter adds

With @linqapp/chat-sdk-adapter, your Chat SDK bot gains iMessage, RCS, and SMS as delivery channels. Linq's infrastructure handles the carrier layer — your code just sees threads, messages, and reactions like any other Chat SDK adapter.

A few things worth calling out:

Native iMessage tapbacks. Tapbacks (like, love, laugh, emphasize, question) map to normalized Chat SDK reaction events, so your bot.onReaction() handlers work exactly as they would on Slack.

Rich media support. Inbound attachments (images, audio, files) arrive as Chat SDK attachment objects. Outbound files under 10MB are sent by URL reference; larger files up to 100MB are pre-uploaded automatically.

HMAC-verified webhooks with replay protection. Every inbound webhook is verified with HMAC-SHA256 and a replay-window check before dispatch. Invalid or stale signatures return 401.

Stable thread IDs. Every Linq chat maps to a stable linq:{chatId} thread ID across webhook events and API calls, so conversations don't fragment.

How it works

Install the adapter alongside Chat SDK:

npm install @linqapp/chat-sdk-adapter chat

Wire it up in your bot:

import { Chat } from "chat";
import { createLinqAdapter } from "@linqapp/chat-sdk-adapter";

const bot = new Chat({
  userName: "mybot",
  adapters: {
    linq: createLinqAdapter({
      apiKey: process.env.LINQ_API_KEY,
      signingSecret: process.env.LINQ_WEBHOOK_SECRET,
    }),
  },
});

bot.onDirectMessage(async (thread, message) => {
  await thread.subscribe();
  await thread.post(`you said: ${message.text}`);
});

Then add a webhook route (Next.js example):

import { after } from "next/server";
import { bot } from "@/lib/bot";

export const runtime = "nodejs";

export async function POST(request: Request) {
  return bot.webhooks.linq(request, {
    waitUntil: (task) => after(() => task),
  });
}

Point a Linq webhook at your route and you're live — see the quickstart guide for full setup instructions. For local dev, the Linq CLI provisions a sandbox number instantly:

linq signup

Running a bot across iMessage, WhatsApp, and Telegram — from one codebase

Because Chat SDK is platform-agnostic, adding Linq as an adapter means your existing multi-platform bot logic just works. The example app in our repo shows a single AI agent running across Linq, Telegram, and WhatsApp from one set of handlers — no branching, no per-platform glue.

A community effort

This integration wouldn't have shipped as fast without Fardeem Munir, a developer in the Linq community who reached out on Twitter and volunteered his time to help build it. Open source at its best — thanks, Fardeem.

Get started

Your Cart
Your cart's looking a little light.Looks like your cart is empty—it's time to add your
gears and make it unforgettable.
Shop our best sellers
Digital Card
Digital Card$14.99
Hub
Hub$29.99
Badge
Badge$19.99
Mini Card
Mini Card$12.99