Self-Hosted Server Guide

Run your own GameVox server on your hardware. Full control over voice, chat, files, and data — with automatic updates and cloud account sync.

Contents

Overview

A self-hosted GameVox server runs entirely on your own machine — your voice, messages, files, emojis, and soundboard clips are stored locally on your hardware. The server connects to GameVox cloud for account authentication and auto-updates, but all your community data stays on your machine.

Voice & Video

Built-in WebRTC SFU for crystal clear voice and video, hosted on your own network.

Chat & Files

Full text chat, file sharing, emojis, soundboard, polls, events, and announcements.

Automatic Updates

The server binary updates itself when a new version is available. Zero manual intervention.

Cloud Account Sync

Members sign in with their GameVox accounts. Usernames, avatars, and badges sync from the cloud.

Automatic Backups

Databases are backed up every 3 hours with tiered retention going back 12 months.

One-Click Restore

Restore to any backup point from the server settings GUI. A pre-restore backup is created automatically.

System Requirements

The server is a single, self-contained binary with no external dependencies. No database server, no Docker, no runtime to install.

Getting Started

  1. Create a new server in the desktop GameVox app. Self-hosted is free for life before July 1st. After a $9.99 one time fee is required.
    Click Add Server
    Enable Self-Hosted Server toggle
  2. Download your server binary. After activation, you'll receive a personalized server binary with your community's configuration embedded inside.
  3. Place it anywhere on your machine and run it. The server creates a data/ folder next to the binary for all databases and files.
  4. Open the required ports on your firewall and/or router (see Firewall & Port Forwarding).
  5. Done. Your server will appear in the GameVox app. Members can join and start chatting.
Your binary is unique. Each self-hosted binary has an encrypted configuration payload embedded inside it, specific to your community and your owner account. Do not share your binary with others.

Setup on Windows

1. Choose a location

Create a folder for your server, for example C:\GameVox-Server\. Place the downloaded .exe binary inside it.

2. Run the server

Double-click the binary, or open a terminal and run:

C:\GameVox-Server\gamevox-server.exe

On first launch, you'll see the server create its data directory and connect to the GameVox cloud. The console will display the required ports:

Required firewall/router ports: TCP 8088 - Client connections (WebSocket + HTTP) UDP 7070 - Voice/video media (WebRTC)

3. Allow through Windows Firewall

Windows will likely show a firewall prompt on first run. Click "Allow access" for both private and public networks. If you missed the prompt, you can add rules manually:

netsh advfirewall firewall add rule name="GameVox TCP" dir=in action=allow protocol=tcp localport=8088 netsh advfirewall firewall add rule name="GameVox UDP" dir=in action=allow protocol=udp localport=7070

4. Run as a service (optional)

To keep the server running in the background and auto-start on boot, you can use a tool like NSSM:

nssm install GameVox C:\GameVox-Server\gamevox-server.exe nssm start GameVox

Or use Task Scheduler to run the binary at login.

Setup on Linux

1. Download and make executable

chmod +x gamevox-server ./gamevox-server

2. Run as a systemd service (recommended)

Create a systemd unit file for automatic startup and restart on failure:

/etc/systemd/system/gamevox-server.service

Paste the contents:

[Unit] Description=GameVox Self-Hosted Server After=network-online.target Wants=network-online.target [Service] Type=simple User=gamevox ExecStart=/opt/gamevox/gamevox-server WorkingDirectory=/opt/gamevox Restart=always RestartSec=5 LimitNOFILE=65535 [Install] WantedBy=multi-user.target

Then enable and start:

sudo systemctl daemon-reload sudo systemctl enable gamevox-server sudo systemctl start gamevox-server sudo journalctl -u gamevox-server -f # watch logs

3. Open firewall ports

# UFW (Ubuntu/Debian) sudo ufw allow 8088/tcp sudo ufw allow 7070/udp # firewalld (Fedora/CentOS/RHEL) sudo firewall-cmd --permanent --add-port=8088/tcp sudo firewall-cmd --permanent --add-port=7070/udp sudo firewall-cmd --reload

Firewall & Port Forwarding

Your server needs two ports accessible from the internet so GameVox clients can connect:

Port Protocol Purpose
8088 TCP WebSocket connections (chat, signaling) and HTTP (file downloads)
7070 UDP WebRTC media (voice and video streams)

Both ports can be customized with environment variables: PORT for TCP and WEBRTC_UDP_PORT for UDP.

Router port forwarding: If your server is behind a home router (NAT), you will also need to set up port forwarding in your router's admin panel. Forward both ports to the local IP address of the machine running the server.

To check if your ports are reachable, start the server and ask a friend outside your network to connect — or use an online port checker tool.

How It Works

When your self-hosted server starts, it establishes a persistent WebSocket connection to the GameVox cloud (the "control channel"). This connection is used for:

GameVox Client Your Server GameVox Cloud | | | |--- connect (WebSocket) --->| | | |--- verify account ------>| | |<-- identity confirmed ---| |<-- welcome, here's data ---| | | | | |--- voice join ------------>| | |<== WebRTC media (UDP) ====>| (direct, not via cloud) |

All voice, chat, and file traffic goes directly between clients and your server. The cloud is only used for authentication and coordination — it never sees your messages or voice streams.

Database Architecture

Your server uses two SQLite databases, stored in the data/ folder next to the binary:

community.db

Structural data that defines your server's configuration:

content.db

Growing content data:

Both databases use SQLite in WAL mode (Write-Ahead Logging) for better concurrent read/write performance. Schema migrations are embedded in the binary and run automatically when the server updates to a new version.

Why two databases? Separating structural data from content data keeps the community.db small and fast (typically under 1 MB), while content.db can grow to gigabytes over time without impacting server configuration operations.

Automatic Updates

Your self-hosted server updates itself automatically. When a new version is available, the cloud sends a notification through the control channel with a download URL. The server then:

  1. Downloads the new binary to a temporary file next to the current one.
  2. Verifies the download (checks file size is reasonable).
  3. Notifies all connected clients that the server is restarting for an update.
  4. Replaces the running binary using a platform-specific safe replacement strategy.
  5. Restarts. On Linux, the process re-execs itself in-place. On Windows, it spawns a new process and exits.

If users are in a voice call when an update arrives, the update is deferred until all voice connections are closed. This prevents interrupting active conversations.

Update strategy by platform

Using a process manager? If you're running the server under systemd, NSSM, or similar, the Restart=always policy ensures the server comes back up after updates. The binary replacement happens before the exit, so the restarted process will be the new version.

Backups & Restore

Automatic database backups

Both databases are backed up automatically every 3 hours using SQLite's VACUUM INTO, which creates a consistent snapshot even while the database is being written to. Each backup creates a timestamped directory inside data/backups/ containing everything for that point in time.

Each backup directory contains:

data/backups/2026-03-15_140000/ backup_community_2026-03-15_140000.db Community database snapshot backup_content_2026-03-15_140000.db Content database snapshot manifest_2026-03-15_140000.json File manifest (list of all files) files_backup_2026-03-15_140000.zip All files under 100 MB

Tiered retention policy

Old backups are automatically cleaned up using a tiered retention schedule:

Age Retention
Last 7 days Keep all backups (one every 3 hours)
7 – 30 days Keep 1 backup per day
1 – 6 months Keep 1 backup per week
6 – 12 months Keep 1 backup per month
Older than 12 months Deleted

Restoring from a backup

You can restore from any backup point directly from the server settings in the GameVox app:

  1. Open Server Settings and go to the Backups tab (owner only).
  2. Browse the list of available backup snapshots with their timestamps and sizes.
  3. Click Restore on the snapshot you want to revert to.
  4. Confirm the action in the warning dialog.

When you restore, the server automatically creates a pre-restore backup of the current databases before replacing them. This means you can always undo a restore by restoring from the pre-restore snapshot. After replacing the databases, the server restarts.

Data loss warning: Restoring a backup replaces both databases with the selected snapshot. All messages, channels, permissions, and other changes made after the backup timestamp will be lost. Uploaded files are not affected by a database restore.

Manual backup trigger

You can also trigger an immediate backup from the Backups tab by clicking Backup Now. This creates a fresh snapshot of both databases without waiting for the next scheduled backup.

File Storage & Large File Backups

Uploaded files, custom emojis, and soundboard clips are stored on disk in subdirectories under data/:

Files under 100 MB are automatically included in each backup snapshot as a zip archive. Files over 100 MB are backed up separately. You can also create a manual backup of all files from the GUI.

Automatic small file backups

Every backup snapshot automatically includes a files_backup_*.zip containing all uploaded files, emojis, and soundboard clips under 100 MB. This means each backup directory is a self-contained snapshot of your entire server.

Large file backups (automatic)

Files over 100 MB are automatically backed up individually as zip files in data/backups/large_files/. Each large file gets its own zip, created once and kept as a single copy. Since uploaded files are immutable (never modified after upload), the server only needs to zip each large file once. This runs automatically after each backup.

Manual file backup (from the GUI)

In the Backups tab, click Create File Backup to generate a .zip archive of all uploaded files (including large ones). The archive is saved to its own timestamped directory and can be downloaded from the browser.

File manifests

Each backup also generates a file manifest — a JSON file listing every uploaded file that existed at that point in time, including file IDs, paths, sizes, and whether each file is classified as "large" (100 MB+). Manifests are included in the backup directory alongside the database snapshots.

Data & File Locations

All data is stored in a data/ directory next to the server binary. The full directory structure:

gamevox-server (or gamevox-server.exe on Windows) data/ community.db SQLite database: channels, groups, permissions, settings community.db-wal Write-ahead log (auto-managed by SQLite) content.db SQLite database: messages, files, reactions, read state content.db-wal Write-ahead log files/ Uploaded file attachments emojis/ Custom server emojis soundboard/ Soundboard audio clips backups/ 2026-03-15_140000/ Timestamped backup snapshot directory backup_community_*.db Community database snapshot backup_content_*.db Content database snapshot manifest_*.json File manifest files_backup_*.zip Small files zip (under 100 MB) large_files/ Individual zips of files over 100 MB
Moving your server: To move your self-hosted server to a different machine, stop the server, copy the entire directory (binary + data/ folder), and start it on the new machine. That's it.

What Data Is Stored Where

DataStored OnDetails
Channels, categories, permissionsYour servercommunity.db
Groups and rolesYour servercommunity.db
Server settingsYour servercommunity.db
Chat messagesYour servercontent.db
Uploaded filesYour serverdata/files/
Custom emojisYour serverdata/emojis/
Soundboard clipsYour serverdata/soundboard/
Announcements, events, pollsYour servercontent.db
BadgesYour servercontent.db
User accounts & authenticationGamevox cloudLogin, registration, sessions
Subscription & billingGamevox cloudTier, payment status
Banner settingsGamevox cloudServer banner images
Access control rulesGamevox cloudWho can join the server

Custom Storage Location

Want to store uploaded files or backups on a different drive? Use a start script to set environment variables before launching the server. Download a template and edit the paths:

Windows

Save this as start-gamevox.bat next to gamevox-server.exe and double-click it to start:

@echo off :: Gamevox Self-Hosted Start Script :: Edit the paths below to store files or backups on a different drive. :: Leave blank to use the default (data/files/ and data/backups/). :: set FILES_DIR=D:\gamevox-files :: set BACKUPS_DIR=D:\gamevox-backups echo Starting Gamevox Self-Hosted Server... gamevox-server.exe pause

Linux / macOS

Save this as start-gamevox.sh, run chmod +x start-gamevox.sh, then ./start-gamevox.sh:

#!/bin/bash # Gamevox Self-Hosted Start Script # Edit the paths below to store files or backups on a different location. # Leave commented out to use the default (data/files/ and data/backups/). # export FILES_DIR=/mnt/storage/gamevox-files # export BACKUPS_DIR=/mnt/storage/gamevox-backups echo "Starting Gamevox Self-Hosted Server..." ./gamevox-server
Uncomment and edit the lines to redirect storage. The server will create the directories automatically if they don't exist. If you're moving existing files, stop the server first and copy the contents of data/files/ or data/backups/ to the new location before restarting.

Troubleshooting

Can't connect to the server

Voice connects but no audio

Server won't start

Update failed

Database is corrupted