small-room websocket chat

VA-11 Chat

A quiet, self-hosted chat room for people who want a place to slow down, speak plainly, and keep the interface out of the conversation.

why the name

A place with bar-counter energy

VA-11 Chat takes inspiration from the mood of VA-11: late-night warmth, unhurried messages, and a small venue where people can say what they mean. The app keeps the stack simple so the room stays easy to understand, run, and trust.

what it does

Focused on the room, not the machinery

Channel rooms

Create channels and per-channel users from a small admin page.

Native realtime chat

Messages move over WebSocket connections without a hosted database.

Encrypted history

Recent messages are encrypted at rest with AES-256-GCM.

Small deployment

Run one Node.js process with local JSON and JSONL storage.

basic docs

Run it locally

npm install
cp .env.example .env
ADMIN_PASSWORD=change-me COOKIE_SECRET=dev-cookie-secret MESSAGE_SECRET=dev-message-secret npm run dev

Open

User login: http://localhost:3000/

Admin page: http://localhost:3000/admin

Configure

Set ADMIN_PASSWORD, COOKIE_SECRET, and MESSAGE_SECRET before production use.

deployment

Use a long-running Node host

VA-11 Chat uses native WebSockets, so deploy it to a platform that supports persistent Node.js processes, such as a VPS or Render. If you keep local file storage in production, attach persistent disk storage and run a single instance.