Group chat with nobody in the middle.

Guilds, direct messages, voice, video and screen sharing — peer to peer and end-to-end encrypted. No account server, no message store, no company.

curl -fsSL https://zahakj.github.io/concord/install.sh | sh

Latest: v0.59.0 · all downloads (Intel Mac, ARM Linux, native desktop apps) · signed checksums

Concord on the desktop: a guild's general channel with replies, reactions and a poll, and the member list The same conversation on an Android phone

Everything a group chat needs

Built for friend groups and communities. Every message, attachment and call is end-to-end encrypted, and the history lives on the members' devices.

Guilds and channels

Categories, roles and permissions, forums, polls, events, pins, custom emoji and Markdown.

Voice, video, screen

Calls straight between devices over WebRTC, with push-to-talk and screen sharing. Guests can join a meeting from a browser.

Direct messages

Delivered through an encrypted mailbox when the other person is offline. Strangers arrive as requests.

No account

Your identity is a keypair on your device, backed up by a 24-word phrase. No email, no phone number, no ID check.

Every device

Desktop apps for Windows and Linux, Android, and a single-file build that serves the app to your browser on macOS, Linux and Windows. Link devices by QR code.

Bots and import

A bot is a peer with its own identity, scripted over JSON lines. Bring an exported community's history into a guild archive.

What it looks like

Phone: the home screen with guilds and channels Phone: a conversation Phone: a direct message Phone: a voice call

Connecting with friends

Peers connect directly. Whether you need anything else depends on where you both are.

Where you areWhat it takes
Same Wi-Fi, or a Tailscale/WireGuard meshNothing.
One side can forward a portOne router rule. The invite code carries the address.
Neither side canSomeone in the group runs a rendezvous, a small node that introduces peers and relays ciphertext it cannot read. Docker, a VPS or fly.io.

Can people reach me? in the app's command palette (Ctrl+K) says which row you are in.

How it works

Identity

An Ed25519 keypair. A peer's network address is derived from its public key, so reaching the address is the identity check.

Encryption

Each guild is an MLS group (RFC 9420). A signed governance log decides who may change membership; removing someone rekeys the group.

Discovery

The local network, remembered addresses, invite codes and a distributed hash table, in that order.

History

Peers reconcile digests and backfill from whoever is online. Nothing is fetched from third parties unless you switch a feature on.

The manual · Design document · Threat model · Privacy policy

Build from source

git clone https://github.com/ZahakJ/concord && cd concord
make web && ./bin/concord-web

Go and Node 22. Contributing covers the multi-peer development loop.