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.
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
- OS: Windows 10/11 (64-bit) or Linux (64-bit, glibc-based)
- RAM: 512 MB minimum (1 GB+ recommended for larger communities)
- Storage: 100 MB for the server binary + space for your community data
- Network: Stable internet connection with the ability to forward two ports
- CPU: Any modern x86-64 processor. Voice/video encoding is handled by clients, not the server.
The server is a single, self-contained binary with no external dependencies. No database server, no Docker, no runtime to install.
Getting Started
-
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.
- Download your server binary. After activation, you'll receive a personalized server binary with your community's configuration embedded inside.
- Place it anywhere on your machine and run it. The server creates a
data/ folder next to the binary for all databases and files.
- Open the required ports on your firewall and/or router (see Firewall & Port Forwarding).
- 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:
- Account authentication: When a member connects, their identity is verified against their GameVox cloud account.
- Public IP discovery: The cloud tells your server its public IP address, which is needed for WebRTC voice connections.
- Auto-updates: The cloud notifies your server when a new binary version is available.
- Server listing: Your server appears in the GameVox app for members to find and join.
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:
- Channels and categories
- Groups and permissions
- Member list and roles
- Server settings
- Ban list
- Emoji metadata
content.db
Growing content data:
- Messages and edit history
- File attachment metadata
- Reactions
- Read state (which messages each user has read)
- Pins
- Announcements, polls, events
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:
- Downloads the new binary to a temporary file next to the current one.
- Verifies the download (checks file size is reasonable).
- Notifies all connected clients that the server is restarting for an update.
- Replaces the running binary using a platform-specific safe replacement strategy.
- 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
- Linux: The current binary is renamed to
.old, the new binary takes its place, and the process calls exec() to replace itself in-place. The old binary is cleaned up on the next start.
- Windows: Windows allows renaming a running executable. The current binary is renamed to
.old, the new one takes its place, a new process is started, and the old one exits. The .old file is cleaned up on the next start.
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:
- Open Server Settings and go to the Backups tab (owner only).
- Browse the list of available backup snapshots with their timestamps and sizes.
- Click Restore on the snapshot you want to revert to.
- 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/:
data/files/ — Chat file attachments and file share uploads
data/emojis/ — Custom server emojis
data/soundboard/ — Soundboard audio clips
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
| Data | Stored On | Details |
| Channels, categories, permissions | Your server | community.db |
| Groups and roles | Your server | community.db |
| Server settings | Your server | community.db |
| Chat messages | Your server | content.db |
| Uploaded files | Your server | data/files/ |
| Custom emojis | Your server | data/emojis/ |
| Soundboard clips | Your server | data/soundboard/ |
| Announcements, events, polls | Your server | content.db |
| Badges | Your server | content.db |
| User accounts & authentication | Gamevox cloud | Login, registration, sessions |
| Subscription & billing | Gamevox cloud | Tier, payment status |
| Banner settings | Gamevox cloud | Server banner images |
| Access control rules | Gamevox cloud | Who 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
- Make sure both ports (TCP 8088 and UDP 7070) are open in your firewall and forwarded through your router.
- Check that the server process is running and showing "Connecting to Gamevox cloud..." in the console output.
- If you're behind a carrier-grade NAT (CGNAT), port forwarding may not work. Contact your ISP or consider a VPN/tunnel solution.
Voice connects but no audio
- This is almost always a UDP port issue. Make sure UDP port 7070 is forwarded and not blocked by a firewall.
- Some corporate/school networks block UDP traffic. Try from a different network to confirm.
Server won't start
- Check that no other process is using port 8088. You can change the port with the
PORT environment variable.
- On Linux, ensure the binary has execute permissions:
chmod +x gamevox-server
- If you see "magic marker not found", the binary may have been corrupted during download. Re-download it from your server settings.
Update failed
- The server will log the specific error. Common causes: disk full, permission denied writing next to the binary.
- If an update is interrupted, the server will retry on the next check-in with the cloud.
- The old binary is preserved as
.old next to the main binary as a safety net.
Database is corrupted
- This is extremely rare with SQLite in WAL mode. If it happens, use the Backups tab to restore from the most recent backup.
- If the server can't start due to database corruption, you can manually copy a backup file from a snapshot directory (e.g.
data/backups/2026-03-15_140000/) over the live database file.