Gryt

Quick Start

Get Gryt running in under 5 minutes

Want to try Gryt without setting anything up? Visit app.gryt.chat to use the web client instantly. Note: some desktop-only features like global push-to-talk are not available in the browser.

Desktop App (easiest)

The simplest way to host a Gryt server — directly from the desktop app, no separate software needed.

  1. Download and install the Gryt desktop app
  2. Open the app and click Add Server
  3. Under Host a server, enter a name and click Create server
  4. The server starts automatically — you're connected

Other users on your LAN will see your server automatically via mDNS discovery. Toggle Discoverable on LAN to control this. Enable Start automatically with app to resume hosting on every launch.

The embedded server is ideal for LAN parties, local teams, and quick hosting. For internet-facing production deployments, use Docker Compose or Windows standalone instead.

The fastest way to run Gryt on a server. Pre-built images from GitHub Container Registry — no cloning needed.

mkdir gryt && cd gryt
curl -Lo docker-compose.yml https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/prod.yml
curl -Lo .env https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/.env.example
mkdir gryt && cd gryt
wget -O docker-compose.yml https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/prod.yml
wget -O .env https://raw.githubusercontent.com/Gryt-chat/gryt/main/ops/deploy/compose/.env.example

Open .env in your editor and configure:

SERVER_NAME=My Gryt Server              # display name shown to users
JWT_SECRET=<run: openssl rand -base64 48>  # IMPORTANT: generate a real secret

# Public URL(s) of the SFU that browsers connect to (ws:// or wss://)
SFU_PUBLIC_HOST=wss://sfu.example.com   # or ws://<your-ip>:5005 for non-TLS

# Public IP of the SFU host (required if behind NAT)
ICE_ADVERTISE_IP=203.0.113.10

# Single UDP port for WebRTC media (open this in your firewall)
ICE_UDP_MUX_PORT=443

# No need for STUN when ICE_ADVERTISE_IP and ICE_UDP_MUX_PORT are set
DISABLE_STUN=true

See the Configuration page for all .env options.

Then start the server:

docker compose up -d

This starts the core backend: signaling server, SFU media server, and MinIO. The server uses an embedded SQLite database in its data directory, so no separate database container is required.

Connecting

Connect to your server using the Gryt desktop app or app.gryt.chat. Enter your server address (e.g. gryt.example.com or your public IP).

Invite-only: the first user to join a brand-new server automatically becomes the owner/admin. After that, the server is invite-only. Create invite links in Server settings → Invites and share them.

LAN party? Enable Allow anyone on LAN to join in Server settings → Overview to let anyone on the local network join without an invite code. Remote users still need an invite. See Multi-Server → LAN open join.

To also self-host the web client:

docker compose --profile web up -d

The web client will be available at http://localhost:3666.

Ports

Make sure the following ports are accessible (forwarded in your router / open in your firewall if hosting remotely):

PortProtocolService
5000TCPSignaling server (API + WebSocket)
5005TCPSFU WebSocket
443UDPWebRTC media — recommended single-port mode (ICE_UDP_MUX_PORT)
10000–10019UDPWebRTC media — alternative high-port range (if not using UDP mux)

These are configurable via SERVER_PORT, SFU_PORT, ICE_UDP_MUX_PORT, SFU_UDP_MIN, and SFU_UDP_MAX in .env.

See the full Docker Compose guide for TLS setup, monitoring, upgrades, and advanced configuration.

Windows (no Docker)

Run Gryt on any Windows PC without Docker. Just Node.js and a zip file.

  1. Install Node.js 20+
  2. Download gryt-server-windows-x64-v*.zip from the releases page
  3. Extract and open config.env — set your SERVER_NAME
  4. Double-click start.bat

Connect with the desktop app or app.gryt.chat at localhost:5000.

See the full Windows deployment guide for firewall setup, remote access, and troubleshooting.

Docker (development — from source)

If you want to hack on Gryt itself:

git clone --recurse-submodules https://github.com/Gryt-chat/gryt.git
cd gryt
ops/start_dev.sh

Open http://localhost:3666.

Docker (Cloudflare Tunnel)

Self-host with automatic HTTPS tunnels — no port forwarding needed for HTTP traffic:

cp ops/deploy/host/.env.example ops/deploy/host/.env
# edit .env with your Cloudflare tunnel token
docker compose -f ops/deploy/host/compose.yml up -d --build

See the Cloudflare Tunnel guide for details.

Kubernetes with Helm

helm install gryt oci://ghcr.io/gryt-chat/charts/gryt

Or from the repo:

git clone --recurse-submodules https://github.com/Gryt-chat/gryt.git
cd gryt
helm install gryt ./ops/helm/gryt \
  --set gryt.domain=yourdomain.com \
  --set server.secrets.serverPassword=your-internal-sfu-shared-secret

Configuration

See the Configuration page for all environment variables, authentication, CORS, and networking options.

Next steps

Can't connect? Check logs:

docker compose logs -f

Audio not working? WebRTC requires HTTPS in production — see the TLS section.

On this page