Concord
Chat that lives in your terminal.
Concord is a self-hosted chat app with voice channels, roles and plugins, built for the keyboard. Run a server, share its address, and your people are in.
Discord-shaped. Terminal-native.
Servers down the left, a channel tree you can fold, chat in the middle, members on the right. Replies, edits, pins, mentions, whispers and unread counts all work the way you expect, and every mouse action has a key.
homelab ▾
▾ Text
# general
# dev-log
# announcements
# links
▾ Voice
◉ lounge
ash
juniper
▾ Plugins
■ kanban
# general 3 pinned · 5 members
ashanyone on the new build yet?
juniperserver's pure go. built it on the pi, no cgo
pixel↪ replying to ash@ash moved #dev-log over this morning
ash≡ homelab-notes.md · 14 KB · peer to peer
juniper joined ◉ lounge
juniper is typing…
Online — 3
ash Admin
juniper
pixel
Offline — 2
rook
wren
Here, pick one. 40+ themes are built into the client and switch live, no restart. Drop a TOML file in
~/.concord/themes/ to make your own.
Built to be yours.
There's no company server in the middle. Your server holds your chat, and voice and files go straight between people.
-
01
Run your own server
Start concord-server and a setup wizard asks for a name, host, port and database file. Share the address it prints. The first account to register becomes Admin. The server is pure Go with SQLite, so it builds without a C compiler.
concord-server --setup · --hybrid · --dashboardconcord-server · first run
Server namehomelab
Bind host0.0.0.0
Port8080
Databaseconcord.db
✓ wrote concord-server.toml
share → homelab.lan:8080
-
02
Voice channels
Audio goes peer to peer over WebRTC, encoded with Opus in 20 ms frames. Talk with voice activity detection or push-to-talk, at 8 to 48 kHz. It works on a local network out of the box; across the internet it needs a STUN or TURN server.
/join-voice lounge -
03
Files, peer to peer
/attach streams a file from your machine straight to whoever downloads it. The server never stores the bytes. That's a deliberate tradeoff: the sender stays online while people download.
/attach ./homelab-notes.md -
04
Plugins are programs
A plugin is a folder holding its own binary and a plugin.toml. Drop it into the server's plugins folder and restart. It can answer in chat like a bot, or draw its own pane, like a kanban board you drive from the keyboard.
Plugins/<name>/plugin.tomlPlugins/ └── kanban/ ├── plugin.toml └── kanban # its own binaryTODO
voice testpin docsDOING
themesDONE
wizardhub -
05
Grapevine discovery
List your server on a Grapevine hub if you want people to find it. Anyone can run a hub, hubs share listings with each other, and there's no central authority. Listings don't show your server's address.
Settings → Manage Servers → B · browse hubs
Login or Add Server: Ctrl+G -
06
Roles and moderation
Admin, Moderator and custom roles built from permission flags, with per-channel overrides. Kick, ban, timeout and mute, hand out custom titles, and move people between voice channels.
/role @pixel modsBITPERMISSION · ROLE “MODS”
10Send messages
14Attach files
20Pin messages
5Kick members
32Mute members
6Ban members
63Administrator
Hands stay on the keys.
Mouse support is there when you want it, and every click has a key. This is the client's message-highlight mode. Click the panel, then use the same keys.
- Tab
- Move focus: servers → channels → chat
- CtrlS
- Open Settings, including Manage Servers
- CtrlN
- Add a server from Main
- CtrlB
- Open Server Admin Panel (connected admins)
- CtrlG
- Browse Grapevine hubs from Login or Add Server
- CtrlT
- Theme browser with live preview
- AltM
- Highlight a message to reply, edit, pin or open its links
- /
- Slash commands, with tab completion; use
/helpfor the command list - CtrlQ
- Quit
From clone to chat.
Release builds for Windows, macOS (Apple silicon) and Linux arrive with v0.1.0 on the Releases page. Until then, build from source with Go 1.24 or newer. The server and hub are pure Go; the voice-enabled client needs a C compiler and the Opus libraries, plus GTK 3 on Linux for its save dialog.
- 1
Get the tools
Homebrew for Go and the Opus libraries, and Apple's command line tools for clang.
Debian and Ubuntu shown. Check
go versionsays 1.24 or newer.Install Go 1.24+ from go.dev/dl and MSYS2 from msys2.org, then run this in the MSYS2 MinGW64 shell.
brew install go git make pkg-config opus opusfile xcode-select --install
sudo apt install golang git make clang pkg-config libopus-dev libopusfile-dev libgtk-3-dev
pacman -S git make mingw-w64-x86_64-clang mingw-w64-x86_64-pkgconf mingw-w64-x86_64-opus mingw-w64-x86_64-opusfile
- 2
Get the source
Clone the repository from GitHub.
git clone https://github.com/JMThomas00/Concord.git && cd Concord
- 3
Build
Makes all three binaries: server, client with voice, and the Grapevine hub, in
build/.make build
make build
make build-windows
- 4
Start your server
The first run opens a setup wizard and prints the address to share. The first account to register becomes Admin.
./build/concord-server
./build/concord-server
build\concord-server.exe
- 5
Open the client
On first launch, finish Identity Setup. With no saved servers, Concord opens Add Server directly; enter the server name, address and port, then press Enter. Later, press Ctrl+N from Main or open Settings → Manage Servers to add another. Press Ctrl+G on Login or Add Server to browse Grapevine hubs.
./build/concord-client
./build/concord-client
build\concord-client.exe