Running the Website
Every game ships a website binary that serves accounts, live server status, news and downloads. Turning it on, and putting TLS in front of it.
What It Is
Alongside the game server, every release includes a website: a single binary that serves the game’s public site. Accounts, a live status panel, news, the changelog for each release, a leaderboard, and the client files your players patch from.
It is optional. A server runs perfectly well without one, and players can create accounts through the launcher instead. Run it when you want a public front door.
Starting It
From the archive root:
server/linux/webserver -http :8080
Then open http://localhost:8080. On Windows it is server\windows\webserver.exe with the same
flag.
-http serves plain HTTP on the port you name and turns off TLS. That is the right mode for
local testing, and also for a real deployment where something else terminates TLS in front of it.
Certificates
With no -http flag and a real hostname configured, the website obtains and renews its own
certificate from Let’s Encrypt, serves HTTPS on 443, and redirects 80. There is no certificate
tool to install and nothing to renew by hand.
Set the hostname in settings.cfg:
[webserver]
COOKIE_DOMAIN your-server.example.com
For that to work, ports 80 and 443 must reach the machine, and the hostname must already resolve to it. If either is untrue the certificate request fails, and the site falls back to plain HTTP rather than refusing to start.
Behind a Reverse Proxy
If you already run nginx, Caddy or similar, use -http on a loopback port and proxy to it. Pass
X-Forwarded-Proto through: the website reads it to decide whether to mark session cookies
secure, and without it a player behind your proxy is issued a cookie that the browser will send
over plain HTTP.
How It Knows the Game Is Up
The website does not guess from the database, and it does not merely report that it is itself running. The game server exposes a small status channel on a loopback address, and the website polls it about once a second. If the game server stops, the site says so within a few seconds, and it says why.
That channel is bound to 127.0.0.1 and nothing else. It publishes no credentials, but it does
publish player counts, and a mistyped address in a config file cannot expose it.
News and the Changelog
Both are plain markdown files read from disk while the server runs, in articles/ and
changelog/ beside the binary. Add a file, refresh the page. There is no rebuild, no publish
step and no database involved.
Each file starts with a small block of metadata:
---
title: Server is up
date: 2026-07-26
author: You
category: News
slug: server-is-up
---
Body text goes here.
Client Patching
The client/ directory in the archive is served at /downloads/client/, with an index of file
hashes at /downloads/client/manifest.txt. A player’s launcher compares its own copies against
that index and fetches what differs.
To push out a client change: drop the files into client/, regenerate the index, and every
launcher picks it up on its next run. Your players do nothing.
Two things have to be true for it to reach them. The website must be running, and each player’s
launcher.ini must name your site under [Update] URL, which is empty by default. The launcher
page covers both, along with the three files an update will never overwrite.