Skip to content

Requirements

Cove is a single Go process with an embedded database, so it runs comfortably on small machines. A VM with 1 CPU core, 1 GB of RAM and a few GB of disk is a reasonable start for a small community. Group calls are the main driver of CPU and bandwidth: the SFU forwards media without transcoding, so load grows with participants and video quality, not with chat volume.

Plan disk for uploads (data/uploads) and the database (data/db).

Need When
Docker with Compose Recommended install path
A Linux, macOS or Windows host Running the binary directly
Go 1.25, Node and pnpm Building from source only
ffmpeg and ffprobe on PATH Optional, for video messages. Included in the Docker image
A domain name and TLS certificate Required for anything beyond a LAN

The server uses ffmpeg to convert uploaded videos to MP4 (H.264/AAC) so they play everywhere, and ffprobe to read their duration. The mjn81/cove-server Docker image already includes both. When running the binary yourself, install ffmpeg with your package manager (apt install ffmpeg, brew install ffmpeg, winget install ffmpeg).

Without it everything else works. Videos are stored and served as uploaded, so they only play where the viewer’s browser or app supports the original format, and their duration may be missing. server.ffmpeg_path can point at a custom ffmpeg binary; ffprobe is always looked up on PATH.

Port Protocol Purpose Config key
4000 TCP API and WebSocket server.http_port
3478 UDP Embedded STUN/TURN voice.embedded_turn_port
50000-50100 UDP WebRTC media voice.webrtc_port_min / voice.webrtc_port_max
9090 UDP Raw UDP voice (air-gapped mode only) server.udp_port
3000 TCP Web client container compose file

Open the UDP ports on your firewall and forward them if the server is behind NAT. See Voice and calls.