Docs

Self-hosting guide

From download to a running server your friends can join, on Windows or Linux.

Requirements

 WindowsLinux / Docker
OS64-bit Windows 10 or 11Any modern x86_64 or arm64 distro
Hardware8 GB RAM, 20 GB free disk2+ CPU cores, 4 GB+ RAM
SoftwareNothing; everything is bundledDocker Engine 24+ with the docker compose plugin, openssl
DownloadServer-Setup-11.4.exebroarchat-docker-11.3.tar.gz

Check the SHA-256 checksums on the download page.

Install on Windows

  1. Run BROARchat-Server-Setup-11.4.exe as an administrator. The installer isn't code-signed yet, so if SmartScreen warns you, choose More info → Run anyway.
  2. The installer puts everything under C:\Program Files\BROARchat Server: PostgreSQL, the identity service, the LiveKit voice server, nginx and the gateway. Then the configuration wizard opens.
  3. Pick a scope:
    • Local network: the server uses this PC's LAN IP over plain HTTP. This is the fastest way to start, and you don't need a domain.
    • Internet: enter your domain. HTTPS is provided by a reverse proxy you put in front (see HTTPS / TLS).
  4. Create the admin account, optionally paste a license key (leave it blank for the free Community mode), and click Install. The wizard registers the services, runs the database migrations and opens the Windows Firewall for the web and voice ports only.
  5. Open the address the wizard shows (for example http://192.168.1.50) in a browser and sign in.

The Start Menu has BROARchat Server Console (status and logs), Configure BROARchat Server (re-run the wizard) and two uninstall options. The services are BROARchat-DB, BROARchat-Core, BROARchat-API, BROARchat-Voice and BROARchat-Web, and they start automatically at boot.

Install on Linux (Docker)

curl -fsSL https://get.docker.com | sh        # if Docker isn't installed yet
tar xzf broarchat-docker-11.3.tar.gz
cd broarchat-docker-11.3
sudo ./setup.sh

setup.sh checks your prerequisites, then asks for a hostname, protocol, ports and (optionally) SMTP, a Giphy key and your license key. It generates every secret with openssl rand, writes .env and server.cfg, renders the configs, runs docker compose up -d --build and, if you chose Let's Encrypt, requests the certificate. At the end it prints your URL and the exact firewall commands.

All containers use host networking, which LiveKit's UDP media needs. As a result Postgres (5432), the Matrix API (8008) and the gateway (4000) listen on every interface. Don't forward those ports, and keep them blocked with your host firewall:

ufw allow 80/tcp && ufw allow 443/tcp
ufw allow 7880/tcp && ufw allow 7881/tcp
ufw allow 7882/udp && ufw allow 50000:50050/udp
ufw default deny incoming && ufw enable

Ports

These are the defaults. You can change any of them in the wizard or in .env.

PortProtocolPurposeForward on router?
80TCPWeb app over HTTP; Let's Encrypt challenge; redirect to HTTPSYes, for internet access
443TCPWeb app and API over HTTPSYes, if you use HTTPS
7880TCPVoice signaling (LiveKit WebSocket)Yes
7881TCPVoice media fallback over TCPYes
7882UDPVoice media and built-in TURN (NAT rescue)Yes
50000–50050UDPWebRTC media rangeYes
47800UDPLAN discovery beacon for the desktop appNo, LAN only

If voice connects but nobody can hear each other, the UDP ports almost always aren't reaching the server. For internet-facing installs, also turn on "Advertise a public IP" (USE_EXTERNAL_IP / PUBLIC_IP) so WebRTC hands out your public address.

DNS

For a LAN-only server you don't need DNS at all; members use the IP address. To reach the server from the internet:

  1. Create an A record (and an AAAA record if you have IPv6), for example chat.example.com → your public IP. If your home IP changes, use a dynamic-DNS service.
  2. Forward the ports above on your router to the server's LAN IP.
  3. If you put the site behind a CDN or proxy such as Cloudflare, proxy only the web ports. Voice (7880–7882 and the UDP range) must go straight to your server, so create a separate DNS-only record for it, or leave the voice hostname unproxied.

HTTPS / TLS

Browsers only allow microphone and camera access on https:// pages, or on localhost. On a LAN over plain HTTP, some browsers may block voice until you add the site as trusted. For anything beyond testing, use HTTPS.

Connecting members

Share your server's address. Members can open it in any modern browser, install it to their phone's home screen, or use the Windows desktop app, which also finds servers on the local network automatically. To bring people into a Space, send them an invite link from that Space's menu.

License activation

Without a key the server runs in Community mode: free, up to 5 users and 5 Spaces, with chat, voice, video and screen share. A paid key unlocks your tier's features and limits. It activates the first time the server boots with it, by checking in with license.broarchat.com. There are three ways to add or change a key:

  1. During install: paste it into the Windows wizard or setup.sh. Setup verifies it immediately without using up an activation.
  2. In the app: go to Settings → License (owner/admin only). This works at any time, with no files to edit.
  3. In the config: set LICENSE_KEY= in .env (Linux) and restart the gateway, or re-run the Windows configuration wizard.

A blank, invalid or expired key never bricks the server. It just falls back to Community mode, and your data stays put.

Moved, renamed or rebuilt your server?

Each license covers a fixed number of servers (one for Gamer and Pro, three for Business). BROARchat identifies a server by its machine identity, so a renamed, reinstalled or replaced machine counts as a new server. If the key says all activation slots are in use:

  1. Sign in at broarchat.com/account with the email you bought with.
  2. Under your license, find the old server and click Release.
  3. Enter the key again on the new server (in Settings → License, or by restarting it).

Can't release a server, or lost access to your account? Email [email protected] with your license key.

Upgrading

Back up first (see below). Upgrades can run database migrations.

Release notes for every version are in the changelog.

Backups

Linux

./backup.sh                    # timestamped backup into ./backups/
./backup.sh --retention 14     # keep the newest 14
./backup.sh --no-config        # leave .env / secrets out of the backup

./restore.sh 20260714-030000 --confirm   # DESTRUCTIVE: overwrites live data

# daily at 03:00, keep a week (crontab -e)
0 3 * * * /path/to/broarchat/backup.sh --retention 7 >> /var/log/broarchat-backup.log 2>&1

Each backup contains a pg_dump of every database, media.tar.gz and (unless you pass --no-config) a 0600 copy of your config. The config holds secrets, so keep backups off shared storage. Backups are safe to take while the server is running.

Windows

Everything lives in the install folder. Stop the BROARchat services from the Server Console (or with Stop-Service BROARchat-* in an admin PowerShell), then copy:

Then start the services again. To restore, reinstall the same version, stop the services, put the folders back and start them.

Troubleshooting

Still stuck? Email [email protected], or check the FAQ.