Audio/video server
The one piece that has to be a real server, because audio cannot travel the way messages do. Everything else in Armada is store-and-forward; a call is a live media path, and something has to sit in the middle of it.
What it is
Section titled “What it is”Stock LiveKit, plus a small token broker in front of it.
The broker checks that you hold the key to a channel and issues a ticket for one room. That is the whole of its knowledge: it never learns which community the room belongs to, who else is in it, or what it is called — and the audio is encrypted end to end under per-sender keys regardless, so LiveKit is forwarding packets it cannot open. The design is specified as CORD-07.
Run it
Section titled “Run it”git clone nostr://chad@chadwick.site/relay.ngit.dev/armada-avcd armada-av/deploy/singlecp .env.example .envdocker compose up -dSet AV_DOMAIN to the name people actually reach, and a LiveKit key pair from
docker run --rm livekit/livekit-server generate-keys. Open 80, 443, UDP
7882 and TCP 7881.
Point Armada at it
Section titled “Point Armada at it”In the app: Settings → Voice → https://av.example.com. That is per-user
and takes effect immediately, so you can test a broker before anyone else
touches it.
To make it the default for a client you host, build with
VITE_CONCORD_AV_SERVERS — see
the web app’s configuration. As with
every other server URL in Armada it stays editable afterwards; a user who
prefers someone else’s broker keeps working, in the same call.
Worth running in public
Section titled “Worth running in public”A voice broker is the piece of Nostr infrastructure with the fewest operators, because it is the only one that costs real bandwidth. It is also the one where running it teaches you the least about the people using it — which is exactly what makes it safe to offer to strangers.
$ carry the calls