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

@chat-adapter/state-redis

Production state adapter for Chat SDK using the official redis package.

Installation

bash
pnpm add @chat-adapter/state-redis

Usage

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

typescript
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:

typescript
const state = createRedisState({ url: "redis://localhost:6379" });

Using an existing client

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

typescript
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"):

typescript
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

bash
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

FeatureSupported
PersistenceYes
Multi-instanceYes
SubscriptionsYes
Distributed lockingYes
Key-value cachingYes
Automatic reconnectionYes
Key prefix namespacingYes

License

MIT