Self-hosted · End-to-end encrypted · Open source

Agreement between people.
Agreement between nodes.

Accord is what Discord would be if it respected your infrastructure, your privacy, and your bandwidth. One Go binary, one Postgres, your box, your rules. Messages are end-to-end encrypted; voice and video are encrypted in transit.

No Nitro upsell. No resolution caps. No centralized dependency.

What it is

A complete chat platform — channels, threads, reactions, voice/video, presence — assembled with taste and engineering discipline, and encrypted so the server can't read your messages.

End-to-end encrypted messages

Message envelopes (Ed25519 + X25519, XChaCha20) and client-encrypted attachments. The server stores ciphertext. BIP-39 recovery phrases plus social "brotherhood" recovery mean you never lose your identity.

Voice and video are not end-to-end encrypted. They are encrypted in transit (DTLS/SRTP) to the LiveKit server, which decodes them to route the call — the same model Discord, Zoom and Slack use. If you self-host, that server is yours. We'll say so plainly rather than let "encrypted" do ambiguous work.

Minimal to run

One Go binary with the React client baked in, plus Postgres. Optional Caddy for auto-HTTPS and LiveKit for voice ride behind Compose profiles — run only what you need. The runtime image is ~30 MB and distroless.

Discord/Slack parity

Markdown + code blocks, reactions, threads, replies, pins, bookmarks, @mentions, slash commands, link embeds, custom emoji, full-quality voice and screen share, Web Push, and an in-app inbox.

Yours to keep

Closed signups by default, a one-command owner bootstrap, audit log, server/role management, and backup/restore scripts. Your data lives in volumes you control, portable across Postgres versions.

Self-host in five minutes

You need Docker with the Compose plugin. The quickstart generates a secure .env (random DB password, signups closed), prompts for your owner login, builds, and brings the stack up.

git clone https://github.com/twilightcoders/accord.git
cd accord
sh deploy/quickstart.sh

Prefer to drive it yourself? cp deploy/.env.example deploy/.env, fill in POSTGRES_PASSWORD and the ACCORD_BOOTSTRAP_* owner block, then docker compose -f deploy/compose.yaml up -d. Add --profile caddy for TLS and --profile voice for LiveKit. Full guide and the "expose it to the internet" options (Tailscale Funnel, Caddy + port-forward, Cloudflare Tunnel) live in deploy/README.md.

Get Accord

Three ways in. They all talk to the same server.

Server

Run your own

The Docker Compose stack — Accord + Postgres, optional voice/TLS. This is the host everyone else connects to.

Self-host guide
Web / PWA

Open in a browser

Every Accord server serves its own web client. Visit your server's URL — install it as a PWA for an app-like window and notifications.

How it's served
Desktop

Accord.app (macOS)

A thin native wrapper around the web client. On first launch it asks for your server URL, then runs the normal sign-up / sign-in flow. Windows and Linux builds ride the same release.

Releases

Beta builds are unsigned — macOS Gatekeeper will ask you to confirm on first open.

How federation will work

Coming soon · beta

Today every Accord instance is an island. The roadmap turns those islands into an invited friend-mesh — not open global federation, a trust-mesh of people you already know.

"I stand up Accord on my NAS and host my groups. My buddy stands up his. We agree to replicate each other's groups for redundancy. If my box goes down, clients connect to the next host in line; when mine comes back, it syncs and resumes its place."

Portable identity

One self-certifying keypair per person, recognized on any node — no central account server.

Write-available failover

Replicas hold the encrypted, signed event log. The preferred host is a routing hint, not a write-lock, so you keep posting through an outage.

Encryption preserved

Hosting a friend's replica never grants read access — nodes store and serve opaque ciphertext; only members hold the keys.

Foundations are landing now (node identity, a signed append-only event log). Peering and replica-sync are not built yet — read the design in ADR 0001 — Federation Mesh.