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.

Self-hosted architecture 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:

DataLocation
Text messagesYour server
Voice sessionsYour server
File uploadsYour server
Custom emojisYour server
Soundboard clipsYour server
Permissions & rolesYour server
User accountsGameVox cloud
Server discoveryGameVox 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:

DatabaseWhat’s in it
community.dbChannels, members, groups, permissions, bans, emojis, settings — the structural state of your server. SQLCipher-encrypted on disk.
content.dbMessages, files, reactions, pins, polls, file shares — the user-generated content. SQLCipher-encrypted on disk.
audit.dbAudit 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 INTO per row. NULL is emitted as the unquoted token, strings are single-quote-escaped, and identifiers are double-quoted. No CREATE TABLE is 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:

  1. {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.
  2. {data-dir}\logs\gamevox-server-*.log.txt — per-session log file, timestamped at startup. The tail of the last session always ends with runServer exiting normally for clean shutdowns or a FATAL line otherwise.
  3. 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, 2/monthor2/month or 15/year. This is separate from any server subscription tier.

Check the Self-Hosted landing page for more details and setup instructions.