Open source · Self-hosted · MIT licensed

Team chat, refined.

Atrium is open-source team chat with a quiet, Linear-style interface. Channels, threads, apps, federation, and a Mac app — self-hosted on one box, with no database to run.

Node ≥ 22.5 · npm install && npm start · that's the whole install

Atrium in dark Linear style: sidebar with channels, messages with reactions and threads, code block, and composer
0
external services
1
process to run
1
file of state — SQLite
135+
smoke checks in CI
MIT
licensed, forever

Everything a team needs

Fast where it matters,
quiet where it doesn't.

The full chat surface — without the noise, and without a fleet of services underneath.

Channels, threads & DMs

Public & private channels, group DMs, threads, reactions, pins, saved items — starred and muted views of it all.

Apps & agents

Bot tokens, incoming webhooks, slash commands, and HMAC-signed events. Build bots and agents on the same API users get.

Search that finds

Full-text search with filters, highlighted snippets, and jump-to-message.

Mac desktop app

A native-window shell with dock badges and notifications — pointed at any Atrium server you like.

Security by default

Reviewed, tested, and documented — hardened before it was ever public.

A platform, not just a product

Build apps on the
same surface.

Everything the client can do, your code can do. No separate “app platform” — one API, one token model.

  • Bot tokens call the entire REST API, scoped to their workspace.
  • Incoming webhooks post from anything with curl — CI, alerts, cron.
  • Slash commands with signed callbacks, in-channel or ephemeral.
  • Events API — messages, reactions, mentions, delivered HMAC-signed with retries.
  • Agents welcome — the realtime socket accepts bot tokens too.
zsh — deploy-bot
# post from your deploy pipeline
$ curl -X POST https://chat.example.com/hooks/$TOKEN \
    -H 'Content-Type: application/json' \
    -d '{"text":"Deploy to prod finished ✅"}'

# or drive the API as a bot
$ curl https://chat.example.com/api/v1/channels/$CH/messages \
    -H "Authorization: Bearer xatb-…" \
    -d '{"text":"bot speaking"}'
201 ✓ delivered

Slack Connect, but yours

Federated by design.

Every Atrium server is sovereign. Connect two of them with a single-use invite code, and workspaces can share channels and DM across the wire — signed, rate-limited, and revocable.

acme.example.com Sovereign
partner.example.com Sovereign

HMAC-signed relay · single-use invite · revocable at either end

Shared channels

One channel, two servers. Messages relay both ways with per-server identity intact.

External DMs

Message people on federated servers directly — no shared account, no shared database.

Revocable trust

Either side can sever the link at any time. Signing keys rotate; history stays local.

Deploy

One box. One process. One file.

Atrium ships as a single Node process with SQLite built in. No Postgres, no Redis, no SMTP, no build step. A €5 VPS and a domain is the whole bill.

Get a box

Any 1 vCPU / 1 GB VPS, or a container host. Ubuntu 24.04 works out of the gate.

Point a domain

One A record. Caddy issues TLS automatically — federation requires it.

Run it

docker compose up -d or npm install && npm start. Migrations run at boot.

Set it up

Open the URL: setup wizard, then create a workspace or join with an invite link.

ssh root@your-box
$ git clone https://github.com/atrium/atrium && cd atrium
$ npm install && npm start
 migrations applied — sqlite at ./data/atrium.db
 atrium listening on https://chat.example.com
— that's it. no database server, no build step.

What you need

Node ≥ 22.5 or Docker · persistent disk for ./data · TLS for public use · a domain (or a free PaaS subdomain)

What you don't

Database server · SMTP / email provider · object storage · build tooling · license server

Own your conversations.

Fork it, host it, build on it. Your server, your data, your rules — MIT licensed.