TankMaze is a code-battle platform: you write a tank's AI as a Go program, compile it to WebAssembly, and submit it here. Test it freely against the built-in bots, or challenge another player's tank, then register it for a Game Day — a scheduled tournament where tanks compete head-to-head and results feed a global ranking.
Implement Tick(sensors Sensors) Action — the server calls it once per game tick,
and it must return a single action. Package-level variables persist across ticks, so they're
your tank's memory; there's no real-time control once a match starts, and no other state to
manage.
The Config panel allocates exactly 15 points across five stats (1–5 each): Speed, Sensor Range, Damage, Armor, and Fire Rate. Save & Validate rejects anything that doesn't sum to 15 before it even tries to compile.
Test vs. AI and Challenge run unranked matches on any version, any time — neither affects your ranked stats, so it's the safe way to iterate before promoting. Test vs. AI runs against a built-in bot (Scout, Bruiser, Ranger, or Randy); Challenge runs against another player's tank — it only appears on tanks you don't own, so open the tank's page from the Leaderboard, a Game Day, or a friend's profile and challenge it from there.
The "Start from a template" row on your Dashboard lets you fork one of the built-in AI tanks (Scout, Bruiser, Ranger, Randy) as a starting point instead of writing from a blank file.
Every Save & Validate bumps a minor version (v0.1, v0.2, …) — safe to do as often as you like, since minors are test-only. Promote to Major turns the current minor into the next major version (v1, v2, …); only major versions can be registered for a Game Day and count toward ranked stats.
TankMaze matches only run during a scheduled Game Day: a two-phase tournament. Every registered tank first plays a round-robin group of roughly 8 tanks, then the top finishers move into a single-elimination bracket down to a champion. Register a tank ahead of time to enter the next one — results feed straight into the tank's spot on the Leaderboard.
Registered tanks are ranked by Global Score and split into groups of about 8, seeded so each group gets an even spread of stronger and weaker tanks. Every tank in a group plays every other tank once; a win is worth 1 point, a flawless win (no damage taken) 2 points.
The top finishers from each group (everyone, in smaller fields) advance into a single-elimination bracket seeded best-vs-worst. Lose once and you're out — the last tank standing is the Game Day Champion.
Registration is explicit and per-version: open your tank's page and register its current major version before the window closes. Promoting a new major version later means re-registering it — the old registration doesn't carry over automatically.
Upcoming / active / complete reflect where a Game Day is in its schedule. A ↻ Recurring badge marks an occurrence that belongs to a repeating series (weekly, monthly, or every N days) — each occurrence still runs and scores independently. STUCK means a scheduled phase never actually fired; it's a platform hiccup, not something on your end.
Slot colors mark each match's outcome: green for a win, gray for a loss, amber while a match is in progress, and a dim slot for a bye (an automatic advance with no match played).
Every tank's Global Score is the sum of placement points it has earned across Game Days — a stronger finish in a bigger field is worth more points, and old results eventually drop off, so the score reflects recent competitive form rather than one lucky run.
At the end of each Game Day, every tank earns placement points based on its final standing and the size of the field: the champion earns points equal to the number of competitors, and each lower placement is worth roughly half of the one above it.
Score is the Global Score described above. Best is the highest placement the tank has ever achieved. Days counts Game Days participated in. Ties in score are broken by best finish, then by Game Days played.
This is a local staleness indicator only — it fills up the longer it's been since the tank's last Game Day, turning amber and then red as a nudge that it may be time to compete again. It's unrelated to how long placement points stay valid for scoring.
Friends is TankMaze's lightweight social layer, separate from Game Day competition. Add another Tank Author as a friend from their profile page — once they accept, you can send each other direct messages. It's built for coordinating test matches, swapping strategy, or just talking trash before your tanks meet in a bracket.
Friend requests are sent from a Tank Author's profile page. Once you send one it shows up as pending until the other person accepts or declines it.
Friend requests are incoming requests waiting on your answer. Sent requests are ones you sent that are still pending — you can cancel those any time before they're answered.
Direct messages only work between accepted friends — it keeps the inbox to people you've actually chosen to connect with.
TankMaze's tiers exist to cover the cost of compiling your tank's code, not to give anyone an edge in the maze — every tier plays by the exact same rules, stats, and scoring. Paying only gets you more tanks, more compilations per month, and an ad-free experience. Signed-in authors can see current pricing and their own usage from the Upgrade page, linked from the nav once you're signed in.
$0. Up to 2 registered tanks and 10 compilations per rolling 30-day window — enough to try TankMaze and compete in Game Days. Ads are shown on this tier.
Pricing coming soon. Up to 5 registered tanks and 50 compilations per 30-day window, and no ads — aimed at authors iterating on multiple tanks and shipping more versions.
Pricing coming soon. Up to 15 registered tanks and 200 compilations per 30-day window, and no ads — for running a full roster of strategies.
See the leaderboard · Browse Game Days · Sign in to start building.