Skip to content
Steel Tide

Multiplayer server

Install a dedicated Steel Tide server in one command, add TLS, and understand what it does.

Steel Tide multiplayer runs on a dedicated, authoritative server: the server simulates the match and the AI, browsers send validated commands and receive snapshots filtered for their faction's fog of war. There is no peer host, and a client cannot touch another faction's units.

Install

Supported: systemd-based Linux on x86-64 and ARM64.

curl -fsSL https://rts.rene.wang/setup.sh | sudo sh

The installer creates an unprivileged steel-tide service, generates a host key and a join code, and prints two links:

Host:    http://203.0.113.20:28785/#host=…
Players: http://203.0.113.20:28785/#join=…

Allow inbound TCP port 28785 in the machine's firewall and at your cloud provider. The server serves the complete browser client itself, so players need nothing but the link. Re-running the installer updates the executable and client without replacing keys or checkpoints. To remove it while keeping saves and keys:

curl -fsSL https://rts.rene.wang/uninstall.sh | sudo sh

TLS

Without TLS, a browser on an https:// page refuses to open a plain ws:// socket, so players must be redirected to the server's own origin and lose the saves and settings stored under the site they came from. With a certificate, the client connects with wss:// from wherever the player already is.

Point a DNS name at the machine (an A or AAAA record, not a proxy), make sure TCP 80 is reachable for the certificate challenge, then:

curl -fsSL https://rts.rene.wang/setup.sh | sudo sh -s -- --domain play.example.com --email you@example.com

Certificates come from Let's Encrypt and renew on certbot's timer; a deploy hook restarts the service after renewal. --port 443 gives links without a port in them. A TLS-terminating reverse proxy in front of the plain server works too: forward WebSocket upgrades to the game port.

Lobby and saves

  • One server hosts one lobby or one active match.
  • Four faction slots; each is Human, AI or Closed, with AI difficulty and team per slot.
  • New games expose the same map, metal, fog and population options as local skirmish.
  • The host may upload any valid .steel-tide-save file; saved factions can be reassigned between human and AI but not deleted. Use the download button on the local Load Game screen to export one.
  • The server writes an atomic checkpoint at match start and every 60 simulated seconds.

How it behaves

  • Simulation runs at a fixed 30 Hz on the server; snapshots go out every three ticks (10 Hz), visibility-filtered and compressed.
  • Clients interpolate between the two most recent positions.
  • Game speed is fixed at 1×; only the host can pause.
  • A browser keeps an opaque per-server reconnect token and reclaims its faction when it returns.
  • Client and server must run the same protocol version.

Limits

The server enforces authentication, message and command rate limits, command ownership, target visibility, map bounds, known definition ids and an 8 MB message limit. Uploaded saves additionally cap map dimensions, factions, entities and projectiles. Matchmaking, NAT traversal, relays, spectators and chat are not part of the current release.