Latest release v0.5.0 · Aug 4, 2026
ORION
A StarCraft-style RTS built from scratch in Rust. No game engine — a purpose-built deterministic simulation with a wgpu isometric renderer. Two asymmetric races, skirmish AI, and online multiplayer via lobby codes. All art and audio are procedurally generated at startup: zero asset files.
- macOS
- Windows 10/11
- Linux
- Rust
- MIT licensed
Screens






What's in it
Playable game — single player vs AI, or 1v1 multiplayer (direct connect):
Full macro loop
minerals + plasma (gas) → build → tech → army → destroy the enemy base
Two asymmetric races
authored entirely in crates/sim/assets/units.ron:
Vanguard Combine (industrial)
- Units: Fabricator (worker), Trooper, Vanguard (melee), Breaker (siege tank with deploy mode + splash), Skywing (flyer, hits air+ground), Stormcaller (spellcaster: Plasma Storm AoE)
- Buildings: HQ, Supply Pylon, Muster Hall, Plasma Condenser, Forge (tanks), Aerie (flyers), Archive (research: Weapons/Armor +1/+2)
- Tech tree requirements (Forge needs Muster Hall, Aerie needs Forge, Stormcaller needs Archive)
Kyth Assembly
(swarm): Drone, Skitter (cheap fast melee), Spitter (ranged anti-air), Ravager (splash melee heavy), Wisp (flyer), Weaver (caster); Hive / Spire / Sap Well / Warren / Incubator / Roost / Cortex
Multiplayer
a live lobby browser (public games listed by player name, one click to join) and private lobbies whose 5-letter code is the password — all through a Cloudflare Worker relay, no IPs, no port forwarding. WebSocket lockstep, input-delay 4 ticks, checksum desync detection; menus don't pause MP
Ladder
top ranked players by Elo right in the multiplayer menu, served live by the relay
Ranked matchmaking
FIND MATCH queues you by MMR (Elo, K=32, start 1200) and latency — the search window widens the longer you wait. No bots, humans only; matches are made on a random map from the pool, both players report the result and the matchmaker updates your rating (a rage-quit resolves against the quitter on a timeout). Your MMR shows on the FIND MATCH button and the end-of-match screen
Race select + enemy race choice on the difficulty screen
End-of-match stats (time, units built/lost, resources mined)
Bot personalities (seeded timing/cap offsets) so games vary; escalation so they always finish; balance measured by cargo run --release -p orion-sim --example balance
Two maps
"Meridian" (two high-ground mains, ramps, chokepoints) and "Caverns" (Xel'Naga Caverns homage: NE/SW mains, NATURAL EXPANSIONS with their own mineral lines + geysers, cavern rocks splitting the center into three routes) — pick per game; bots expand to their natural
Replays
every game auto-saves to ~/.orion-replays; watch from the REPLAYS menu with pause, speed, and per-player fog perspective
Main menu (vs AI at three difficulties), pause menu with settings: fullscreen, HUD size, game speed, edge scroll, rebindable hotkeys (persisted to ~/.orion-settings.ron)
Skirmish bot at Easy / Normal / Hard (no cheating — difficulty is macro tightness and aggression timing)
Order queueing (shift), control groups, ctrl+click type-select, rally points with auto-gather, production queue with cancel/refund
Worker-friendly macro UX
placements spread across selected workers (5 workers + 3 queued buildings = 3 peel off, 2 keep mining), order-queue lines show each worker's plan (build sites, gather targets), mining chip sparks + construction weld arcs, saturation labels over bases and extractors (workers / cap)
Hover tooltips on every HUD element (units, buildings, research, actions)
SC:R-style console: navy tech panels with gold piping, framed minimap and portrait, beveled command-card buttons, in-console MENU button — menus share the same identity (framed dialogs, plated rows, hover glow)
Update notice on the main menu when a newer release is out (one click opens the download page — no manual checking)
Procedural audio
ambient music loop + combat/UI/economy sound effects, all synthesized at startup (no asset files); volume sliders in settings
Flashing warnings with error sounds
NOT ENOUGH MINERALS / PLASMA / SUPPLY / ENERGY, CANNOT BUILD THERE, REQUIRES <building>
Deterministic lockstep sim (fixed-point math, checksums, input-only mutation) — the property online multiplayer stands on
Download
Latest release v0.5.0 · Aug 4, 2026 — precompiled, no install step. All releases.
macOS (Apple Silicon + Intel)
Orion-macOS.zip
Unzip → double-click Orion.app. First launch only: right-click → Open (it isn't notarized)
Windows 10/11
orion-windows-x86_64.zip
Unzip → double-click orion.exe. If SmartScreen objects: More info → Run anyway
Linux (x86_64)
orion-linux-x86_64.tar.gz
tar xzf && ./orion (needs Vulkan drivers + ALSA libasound2)
Multiplayer needs zero setup and never shows an IP: FIND MATCH pairs you with a stranger near your skill and latency (ranked, Elo-rated); CREATE LOBBY lists your game for anyone to click and join; CREATE PRIVATE LOBBY gives you a 5-letter code that doubles as the password. Settings live in ~/.orion-settings.ron.
Build from source (any platform, Rust 1.80+):
# Linux build deps: sudo apt-get install libasound2-dev
cargo run --release -p orion-client
Releases are cut by pushing a tag: git tag v0.x.y && git push origin v0.x.y — CI builds all three platforms and attaches them to the GitHub release.
See SPEC.md for the full product specification and CLAUDE.md for architecture.
Changelog
Written up in the project wiki — this page reads it live.
v0.5.0The ladder, a balance pass, and a polish sweepIn-game ladder (top 25 by Elo), cross-race balance pass, professional polish sweep of every screen
The ranked loop gets its payoff, the races get re-tuned for the expansion era, and every screen got a professional once-over.
Ladder

- LADDER on the multiplayer page: top 10 ranked players by Elo with game counts, your own row marked
< YOU, fetched live from the relay. - The matchmaker now remembers display names, and
GET /leaderboardserves the top 25 (ranked games only).
Balance
The v0.3.0 bot upgrades (expansions, siege micro, storms, multi-side approach pathing) had quietly swung cross-race winrates to 68% Kyth. Measured at Hard across both maps (8 seeds per matchup per map) and re-tuned:
| Change | Why |
|---|---|
| Trooper damage 6 → 7 | VC's core ranged unit now kills a Skitter in 6 hits, not 7 |
| Skitter cost 40 → 45 | The swarm's cost-efficiency curve was unmatched |
| Ravager HP 200 → 180 | The late-game splash wall was over-durable |
| Breaker sieged damage 35 → 40 | VC's anti-swarm answer hits like it should |
After tuning: 41/59 VC/Kyth overall, with clear map personalities — VC favors Meridian's single-base brawls, Kyth thrives in Caverns' long two-base games. Further evening will come from bot micro (VC tank defense), not more stat hammering.
Polish sweep
- Settings finally fits on one screen (compact rows; BACK was off the bottom edge at default HUD scale) and every label aligns with its row.
R: PLAY AGAINno longer appears (or fires) in multiplayer and replays — it silently abandoned MP sessions into a bot game.- All Plasma Storm costs in the UI derive from the sim constant (two more stale "75 energy" strings were hiding in the card + tooltip).
- Requirement hints shorten to the building's last word — no more "NEEDS MUSTE" mid-word truncation.
- End-of-match stats spell out MINERALS / PLASMA; multiplayer copy sits inside its dialog panel; replay-load errors show on the Replays page; the main menu carries a version stamp.
- Selection + command audio acknowledgments (from v0.4.3) round out the feel: every click answers.
v0.4.0v0.4.0 / v0.4.1 — The console reworkSC:R-style console + menu rework (gold/navy chrome), building box-select, update notice, overlap-free HUD
(v0.4.1 is the fixed build: the circuit-trace detailing on the first pass read as broken pixels at dialog scale and a long race label could overflow its plate — both patched, and the console got taller with a bigger portrait and larger type. Screenshots below show v0.4.1.)
The whole interface got the StarCraft: Remastered treatment: a proper command console instead of a flat bar, and menus that match it. Still 100% procedural — every panel texture, gold strip and beveled button is painted into the sprite atlas at startup; the game ships zero asset files.

The console
- Navy tech panels with brushed texture and animated-looking circuit traces, tiled at native scale across the deck.
- Gold piping along every edge with rounded corners, riveted seams, and angled shoulders where the raised minimap and command-card blocks step down to the center deck.
- Framed minimap and portrait — gold frames around dark insets.
- Beveled command-card buttons with distinct hover states and gold hotkey badges.
- MENU button in the console (opens the pause menu), SC-style.
- The resource readout sits on its own framed plate top-right.
Menus


- Gold-framed dialog panels behind every page, corner rivets included.
- Winged title plates with gold underlines.
- Rows are plated (gold end caps), glow gold on hover, and long labels auto-shrink to fit — no text ever overflows its plate.

Fixes & quality
- Box select takes buildings: units win a mixed box (the SC2 rule), but a drag over buildings alone now selects all of them — they were previously filtered out of box selection entirely. Regression-tested through the scripted human-input path.
- Overlap sweep: no HUD/menu text overlaps in any state — the queue label vs HP bar collision is gone, the subgroup hint clears the research bar, tooltips lift above the mode hint, and the multi-select strip caps its width before the MENU button on narrow windows.
- Update notice: the main menu checks GitHub once at startup and shows
UPDATE vX.Y.Z AVAILABLE — DOWNLOADwhen a newer release exists; one click opens the download page. (True in-place self-update is deliberately not done: replacing an ad-hoc-signed binary makes macOS Gatekeeper re-prompt, so notify-and-open is the better UX until the project has a signing identity or a store build.) - The Plasma Storm cast hint reflects the v0.3.0 cost (100 energy).
- v0.4.3: selection and command audio acknowledgments — Vanguard radio blips (softer for workers), Kyth organic warbles, building thunks; move/attack/gather/build order acks with alternating variations. All synthesized, zero asset files.
- v0.4.2: the production queue panel shows the COMBINED queue across every selected building of the active type (per-building progress bars, separator gaps), so training into the least-queued building is visible — and click-cancel routes to the correct building's queue. Previously only the first building's queue was shown, which looked like a bug whenever several production buildings were selected or Tab-cycled.
v0.3.0Ranked matchmaking, replays, CavernsRanked matchmaking (MMR + latency), replays, second map "Caverns" with expansions, bot siege/storm/scout, spawn-fairness overhaul, storm nerf
The competitive release: press FIND MATCH and the matchmaker pairs you by skill and latency; every game becomes a rewatchable replay; and a second map brings expansions into the game.

Ranked matchmaking
- One button: pick your race, FIND MATCH. The matchmaker (a Durable Object on the relay) pairs players whose Elo gap and combined latency both fit — and both windows widen the longer you wait, so close matches happen fast and a match always happens.
- Latency is real, not guessed: the client probes its RTT to the relay edge, and cross-continent pairs get a penalty.
- Ratings are Elo (K=32, start 1200) keyed to an anonymous ID generated on first launch — no accounts. Your MMR shows on the button and on the end-of-match screen.
- Both players report the result; agreement updates ratings, a rage-quit resolves against the quitter on a timeout, and quitting a ranked game is a forfeit. No bots in the queue — every entry is a live human.
- Ranked games are played on a random map from the pool.
Replays

- Every game (vs AI or online) auto-saves to
~/.orion-replays/— a replay is just the seed + command stream, a few hundred KB at most, and reproduces the game bit-exactly. - The main menu gained REPLAYS: recent games listed by date, matchup and length. Watching gives pause (SPACE), speed (1/2/3 = 1×/2×/4×), fog perspective per player or reveal-all (TAB), free camera, and a neutral "NAME WINS" banner.
- Determinism is enforced by test: a recorded game re-simulated from its file must land on the identical checksum.
New map: Caverns

- An homage to SC2's Xel'Naga Caverns: NE/SW high-ground mains, a natural expansion below each ramp with its own mineral line and geyser (first map with expansions), and cavern rock formations that split the center into a tight middle lane and two wide edge routes.
- Bots understand expansions: they take their natural at ~13 workers.
- Map select on both the vs-AI and multiplayer pages; the host's choice travels in the match handshake.
Bots got teeth
- Siege micro: Breakers deploy inside working range and pack up when the field clears.
- Storm micro: casters storm the biggest visible enemy clump (3+ units), avoid friendly fire, and never stack storms. Fog-honest — the bot only reacts to what its player can actually see.
- Scouting: a worker pokes the enemy main around 1:20.
- Decisive endgames: maps mine out around minute 15 and the bots go permanently aggressive at 13, all-in at 16 — turtle stalemates ended.
Balance & fairness
- Plasma Storm nerfed: 100 energy (was 75), 48 total damage over 8 pulses (was 72 over 9), and overlapping storms no longer stack — the stacked version deleted whole armies with no counterplay.
- Spawn fairness overhaul: a mirror-covariance probe proved the two spawns weren't playing the same game — fixed-point multiply rounded toward the northwest, flow-field tie-breaks preferred the northwest, the starting worker arc wasn't point-symmetric, and building-spiral mirroring was off by a footprint. All fixed; the Kyth mirror went from 0–7 for the SE spawn to even, verified by swapping spawns.
- Gather traffic robustness: approach fields now seed from every open tile around a destination, so a walled-in base can't strand its workers (found by the soak harness as a full economy freeze).
Under the hood
- Meridian mineral patches: 1500 → 1000 (mines out by ~15:00 by design).
- The QA soak alternates both maps; map symmetry is audited by a dedicated example across terrain, elevation, resources, expansions and starts.
v0.2.0IP-free multiplayer & double-click installsIP-free multiplayer (lobby browser + private codes), double-click releases for all platforms, multi-worker build queueing, worker visual feedback
Multiplayer stopped feeling like 1998: no IP addresses anywhere, and the release artifacts became genuinely double-clickable on every platform.

New
- Lobby browser — CREATE LOBBY lists your game publicly (player name
- race); anyone clicks to join. A Directory Durable Object on the relay tracks open lobbies and unlists them the moment someone joins.
- Private lobbies — CREATE PRIVATE LOBBY gives a 5-letter code that doubles as the password. The code is the only thing players ever see; the old direct-TCP/IP path was deleted outright.
- Double-click releases — macOS gets a real
Orion.app(universal arm64+x86_64 binary, app icon, ad-hoc signed so Apple Silicon launches it); Windows a zippedorion.exe; Linux a tarball. The install table in the README covers all three.
Improved
- Multi-worker build queueing — placing several buildings with several workers selected spreads the jobs: 5 workers + 3 placements = 3 peel off, 2 keep mining. Previously one worker got the whole list.

- Worker visual feedback — order-queue lines show each selected worker's plan (amber to build sites, blue to gather targets), mining shows chip sparks and a pick beam, construction shows weld arcs, carried cargo bobs visibly, and saturation labels over bases and extractors read
workers/cap. - Rally on constructing buildings — worked in the sim, was never drawn; the rally line now shows immediately.
- Relay hardening: rate limits, directory caps, per-connection frame budgets.
v0.1.0First playable releaseFirst playable release: two races, full macro loop, skirmish AI, online MP via relay codes
The foundation: a complete StarCraft-style 1v1 RTS in Rust with no game engine, no asset files, and a bit-deterministic simulation.

Features
- Deterministic lockstep sim — Q16.16 fixed-point math, input-only mutation, FNV checksums every 24 ticks. Two peers stepping the same commands are bit-identical, which is what online play stands on.
- Two asymmetric races, authored entirely in data (
units.ron):- Vanguard Combine (industrial): Fabricator, Trooper, Vanguard, Breaker (siege tank with deploy mode + splash), Skywing (flyer), Stormcaller (Plasma Storm caster); HQ, Supply Pylon, Muster Hall, Plasma Condenser, Forge, Aerie, Archive (Weapons/Armor research).
- Kyth Assembly (swarm): Drone, Skitter, Spitter, Ravager, Wisp, Weaver; Hive, Spire, Sap Well, Warren, Incubator, Roost, Cortex.
- Full macro loop — minerals + plasma (gas), tech requirements, research, supply, production queues with cancel/refund.
- One map ("Meridian") — two high-ground mains, ramps, chokepoints, fog of war with the high-ground vision rule (you can't see up cliffs).
- Skirmish AI at three difficulties — no cheating, difficulty is macro tightness and aggression timing.
- Online multiplayer through a Cloudflare Worker relay with 5-letter lobby codes; WebSocket lockstep with desync detection.
- SC-style control: control groups, shift-queueing, ctrl+click type-select, rally points with auto-gather, attack-move, siege toggle, spellcasting, rebindable hotkeys, DPI-scaled HUD.
- Procedural everything — every sprite (units at 8 facings × 2 walk frames × 2 teams), building, cliff face, effect, the 5×7 font, and all audio (music loop + SFX) are generated at startup. Zero asset files.


Platforms
First release with CI-built binaries for macOS (universal), Windows and Linux, attached to the GitHub release.