I wrote about Space Defence back in February — a browser-based wave shooter I'd been quietly building for months. That post covered the foundation: 9 weapons, 11 ships, achievements, the Dark Forge, and a basic multiplayer stub. A lot has changed since then.
We're now at v3.70.4. The tagline is 'Defence Keeps the Core; the Rim Ships Out' — which is about as apt a description of the last 50 versions as I could manage.
Multiplayer: 50 versions of iteration
Multiplayer shipped at v3.16. What I didn't anticipate was how many versions it would take to make it actually good. The architecture was sound from the start — Go WebSocket relay, binary state protocol, host-authoritative simulation, ring buffer interpolation on the guest — but the edge cases were brutal.
Ghost enemies that existed on the host but not the guest. Invisible enemies rendered in the wrong position. Entity sync jitter from unquantized floating point. Snapshot aliasing causing state corruption. WS disconnects from missing keepalive pings and write deadlines. By v3.67-3.68 we'd fixed 10 multiplayer bugs in a single sprint and completely overhauled the entity sync, quantization, and interpolation pipeline. It's stable now. You can play through a full co-op run without it falling apart.
The binary protocol encodes full game state into ArrayBuffers — positions, HP, weapon state, active effects — delta-compressed and broadcast at 30Hz. The guest interpolates, not simulates. Host is authoritative. In practice it means one player can be in London and one in Sydney and it still works.
Audio, cloud saves, and auto-update
ZzFX audio engine landed at v3.65.6. Web Audio API procedural synthesis — no audio files, no loading, no CORS issues. Every shot, explosion, and upgrade sound is generated on the fly from a tiny parameter set. Total audio payload: 0 bytes.
Cloud save was always partial — achievements and mastery saved locally, game results sent to the leaderboard. At v3.65.5 we completed it: JWT refresh, full cloud save on death and on CR purchase (debounced), reload on login. Your run state persists across devices now.
Auto-update via service worker was always there but fragile. At v3.68 we switched to network-first JS loading with SW reload signals and disabled HTTP caching on JS files entirely. You get the latest version on every visit without needing to clear cache.
Frontier Mode: started here, left home
The most significant thing to happen in the last 50 versions wasn't a feature — it was a game leaving the nest. Frontier Mode started as a mode within Space Defence: a top-down exploration layer where you'd fly between systems, dock at stations, and take contracts in between wave runs. It had its own canvas game loop, ship HUD, dock screens, 5300 background stars, 18 world art SVGs, and a full story bible.
By v3.70 it was clear that Frontier was its own game, not a mode. It got extracted into its own repo (rt-space-frontier) and will ship separately. The v3.70.4 tagline — 'Defence Keeps the Core; the Rim Ships Out' — is literally about this. Space Defence goes back to being what it does best.
What the game looks like right now
At v3.70.4, Space Defence is a browser game with no install, no login required, and no ads. It runs offline. Here's the full feature inventory:
| Area | What's there |
|---|---|
| Weapons | 9 weapons, 6-upgrade tree each, Enhanced + Legendary evolution tiers |
| Ships | 11 ships with unique abilities (Nighthawk, Bee, Titan, Tempest, Sentinel + 6 more) |
| Enemies | 16 enemy types, 7 bosses, 6 AI behaviour patterns |
| Progression | 40 achievements, 5 daily challenges, weapon mastery (5 tiers), milestones, codex |
| Void Cards | 53 roguelike modifiers across 6 categories, drawn between waves |
| Dark Forge | Risk/reward crafting system, 10 offers per run |
| Multiplayer | Real-time WebSocket co-op, binary protocol, 30Hz, ring buffer interpolation |
| Backend | Go server, PostgreSQL (Neon), leaderboards, telemetry, 15 Prometheus metrics |
| Infra | Azure Container Apps, blue-green pipeline, Cloudflare CDN, Telegram notifications |
| Audio | ZzFX procedural Web Audio — 0 audio files |
| Tests | 244 Vitest unit tests + 52 Playwright E2E tests |
| Wiki | 69 articles covering every weapon, ship, enemy, and mechanic |
What's next
The backlog is honest. The cards system works but looks rough — 53 void cards need proper SVG art, a collection overlay, and a pick animation. Boss art is still placeholder geometry; all 7 bosses need capital ship designs. Enemy spawn progression needs redesigning so new types are introduced gradually rather than all at once.
On the engine side, there's a refactor planned to decompose the monolithic update loop into extracted systems — comet updates, pickup logic, projectile collision, enemy wave logic. Longer term: Android APK, prestige system, and Frontier Mode finding its own shape in its own repo.
Play Space Defence at spacedefence.0ryant.com — no sign-in, no install, works offline. If you enjoy it, Ko-fi support goes a long way. Updates and patch notes in the Telegram community.