Looking for the chatbot template? It's now here.

Redis

Production state adapter using the official redis package.

The recommended state adapter for production. Uses the official redis package.

Installation

Terminal
pnpm add @chat-adapter/state-redis

Usage

createRedisState() auto-detects the REDIS_URL environment variable, so you can call it with no arguments:

lib/bot.ts
import { Chat } from "chat";
import { createRedisState } from "@chat-adapter/state-redis";

const bot = new Chat({
  userName: "mybot",
  adapters: { /* ... */ },
  state: createRedisState(),
});

To provide a URL explicitly:

lib/bot.ts
const state = createRedisState({ url: "redis://localhost:6379" });

Using an existing client

If you already have a connected Redis client, pass it directly:

lib/bot.ts
import { createClient } from "redis";

const client = createClient({ url: "redis://localhost:6379" });
await client.connect();

const state = createRedisState({ client });

Key prefix

All keys are namespaced under a configurable prefix (default: "chat-sdk"):

lib/bot.ts
const state = createRedisState({
  url: process.env.REDIS_URL!,
  keyPrefix: "my-bot",
});

Configuration

OptionRequiredDescription
urlNo*Redis connection URL (auto-detected from REDIS_URL)
clientNoExisting redis client instance
keyPrefixNoPrefix for all keys (default: "chat-sdk")
loggerNoLogger instance (defaults to ConsoleLogger("info"))

*Either url, REDIS_URL env var, or client is required.

Environment variables

.env.local
REDIS_URL=redis://localhost:6379

For serverless deployments (Vercel, AWS Lambda), use a serverless-compatible Redis provider like Upstash.

Key structure

{keyPrefix}:subscriptions     - SET of subscribed thread IDs
{keyPrefix}:lock:{threadId}   - Lock key with TTL

Production recommendations

  • Use Redis 6.0+ for best performance
  • Enable Redis persistence (RDB or AOF)
  • Use Redis Cluster for high availability
  • Set appropriate memory limits

Features

  • Persistent subscriptions across restarts
  • Distributed locking across multiple instances
  • Automatic reconnection
  • Key prefix namespacing