Self-hosting lets you run a GameVox server on your own hardware. Voice chat, messages, files, emojis, soundboard clips, everything stays on your machine.
Why self-host?
- Data sovereignty. Your community’s messages, files, and voice sessions never touch our cloud.
- Performance control. Run on hardware you choose, in a location you choose.
- Diamond-tier features included. Self-hosted servers get the full paid feature set by default — voice, video, screen share, custom emojis, soundboard, AutoMod, badges, polls, and events. See the pricing page for the tier comparison.
How it works
The binary is a single Go executable with no external dependencies — no database server, no web server, no Docker required. Create your self-hosted server inside the GameVox app, then download the binary from its download page. Your server token is baked into the binary at download time, so there’s no config file or flag to paste in.
# After downloading the Linux binary from your server's download page:
chmod +x gamevox-self-hosted-server
./gamevox-self-hosted-server
If you want it to run as a background service that starts on boot, Linux has a --install flag that sets up a systemd unit for you:
sudo ./gamevox-self-hosted-server --install
Prefer containers? We also publish a Docker zip with a compose file, Dockerfile, and entrypoint script — see the Docker walkthrough for that path.
User accounts still go through the GameVox cloud for authentication. This means your users log in with their existing accounts and can move between cloud-hosted and self-hosted servers without creating new ones.
How self-hosted servers connect to the GameVox cloud for authentication while keeping all data local.
What stays local
Everything except user accounts and server metadata:
| Data | Location |
|---|---|
| Text messages | Your server |
| Voice sessions | Your server |
| File uploads | Your server |
| Custom emojis | Your server |
| Soundboard clips | Your server |
| Permissions & roles | Your server |
| User accounts | GameVox cloud |
| Server discovery | GameVox cloud |
Network requirements
You’ll need two ports open:
- TCP 8088 for WebSocket connections (client-server communication)
- UDP 7070 for voice traffic (low-latency audio)
If you’re behind NAT, forward both ports on your router to the machine running the server binary. Cloud-hosted VPS providers typically expose the ports automatically through their firewall settings.
CLI commands
The same binary that runs the server also answers a handful of CLI flags for diagnostics, lifecycle management, and exporting your data. Run any of these against your installed binary and the server starts, prints what you asked for, and exits — it never opens ports or touches the SCM, so it’s safe to use against an install that’s already running as a service.
Information
gamevox-self-hosted-server --version # build number
gamevox-self-hosted-server --help # full flag reference
gamevox-self-hosted-server --data-dir # path the server reads/writes
gamevox-self-hosted-server --community-id # this install's community ID
gamevox-self-hosted-server --community-name # human-readable server name
--data-dir resolves the same path the server itself would use: DATA_DIR env var if set, otherwise the smart-detected path next to the executable. Useful for backup scripts that need to know exactly which folder to copy.
Lifecycle
# Install as a system service (Windows SCM / systemd / launchd)
sudo ./gamevox-self-hosted-server --install-service
# Remove. On Windows, you can target a specific instance:
gamevox-self-hosted-server --uninstall=2 # removes GameVoxServer2
# Run the Windows tray companion (per-user, controls all installed instances)
gamevox-self-hosted-server --tray
Database export
You can dump any table from any of the three databases as CSV, JSON, or SQL inserts. Useful for building dashboards, migrating data, or just satisfying a “show me all my channels” curiosity. Output is UTF-8, sensitive values (anything matching secret, token, password, api_key, private_key, jwt, cipher, or cert) are auto-redacted, and the connection runs in query_only mode so the export path can never accidentally mutate your data.
# What tables exist?
gamevox-self-hosted-server --list-tables # community.db (default)
gamevox-self-hosted-server --list-tables --db=content # messages, files, reactions...
gamevox-self-hosted-server --list-tables --db=audit # audit log
# Export a table
gamevox-self-hosted-server --export-table=channels --format=json
gamevox-self-hosted-server --export-table=server_settings --format=csv
gamevox-self-hosted-server --export-table=messages --db=content --format=sql --output=msgs.sql
Three databases ship with each install:
| Database | What’s in it |
|---|---|
community.db | Channels, members, groups, permissions, bans, emojis, settings — the structural state of your server. SQLCipher-encrypted on disk. |
content.db | Messages, files, reactions, pins, polls, file shares — the user-generated content. SQLCipher-encrypted on disk. |
audit.db | Audit log: who did what, when. Plain SQLite (deletable for compliance). |
Export formats:
- CSV — RFC 4180, double-quoted fields, suitable for Excel / Google Sheets / Pandas.
- JSON — Array of objects keyed by column name. NULL becomes
null, numbers stay numeric, Unicode is preserved (no HTML escaping). - SQL — One
INSERT INTOper row. NULL is emitted as the unquoted token, strings are single-quote-escaped, and identifiers are double-quoted. NoCREATE TABLEis included — replay against a fresh schema after running migrations.
Service diagnostics (Windows)
When something goes wrong with a Windows service, three places now have the answer:
{data-dir}\logs\last-crash.txt— full reason, stack trace, and the tail of recent log output, written when the service hits a fatal error.{data-dir}\logs\gamevox-server-*.log.txt— per-session log file, timestamped at startup. The tail of the last session always ends withrunServer exiting normallyfor clean shutdowns or aFATALline otherwise.- Event Viewer → Windows Logs → Application — every service start now logs a multi-line entry with the build, community ID, data dir, files dir, backups dir, TCP/UDP ports, public IP, and pid. Service stops, panics, and unexpected exits also land here next to SCM’s generic 7031 entry.
If the Services console says “Stopped” but Task Manager shows the exe running, the new singleton lock will catch it on the next start: only one process can hold the data directory at a time, and an attempted second instance prints the holding pid in last-crash.txt instead of fighting over the database.
Pricing
Free forever if you set up before July 1, 2026. After that, 15/year. This is separate from any server subscription tier.
Check the Self-Hosted landing page for more details and setup instructions.