Hexbrew is out on the App Store
Hexbrew, my arena action game for iPhone and iPad, went live on the App Store on 21 October 2026. It plays offline, with no ads and no account. Here is what it is, what makes it its own game and how it is built.
Ash Readman-Thorley
Full-stack developer
Hexbrew went live on the App Store on 21 October 2026. It is an arena action game for iPhone and iPad on iOS 15 or later. It plays offline with no ads and no account, and it collects no data at all.
What Hexbrew is
You pick one of nine wizards and survive twenty waves of slimes. Your weapons aim and fire on their own; you do the moving, and you cast your wizard's spell by hand. Slimes drop essence, which is both your money and your experience, and ingredients for the cauldron.
Between waves you take your level-up picks, visit the workshop to buy and combine weapons, brew potions and then decide whether to hex the next wave. A captain turns up on wave 5, a boss on waves 10 and 15, and on wave 20 the King Slime, who has to be killed before the timer runs out. Beat him and you can keep going into endless waves.
What makes it its own
Four things make Hexbrew its own game:
Brewing. Potions are brewed from ingredients that particular slimes drop. Recipes are unknown until you try them, and the recipe book is kept between runs.
A spell you cast by hand. Each wizard has one, and you see it happen: a meteor falls, a storm cloud gathers.
Hexes. Before each wave you can put a curse on it, paired with a reward for surviving it.
A spellbook look on a meadow.
I also wanted numbers you can read. Damage should not run away: a slime hits for 1 on wave 1 and for about 20 on wave 20, not hundreds.
Every rule in plain scripts
The idea the whole game rests on is that every rule lives in plain scripts with no scene dependence. One script is a whole wave in real time: movement, spawning, weapons, spells, hits and drops. It knows nothing about drawing. The scenes only draw it and feed it input.
That is what makes the rest possible. 156 GUT tests step the simulation without a window, a bot plays whole 20-wave runs in a few seconds, and the desktop and iOS builds share every rule.
If a rule ever needs a scene to work, that is the thing to push back on.
Content as data, balanced by a bot
Wizards, weapons, spells, monsters, waves, potions, trinkets, runes and hexes all live in JSON. A hex is a single entry:
{"id": "swift", "name": "Hex of haste", "curse": "Slimes move 25% faster", "reward": "Twice the ingredients this wave", "mods": {"monster_speed": 1.25, "ingredients": 2.0}, "bot": 2}
A new weapon, trinket, potion, hex or rune is usually an entry and an icon. A data test checks that every reference resolves and that everything has its art and sound, so a missing icon fails a test rather than crashing in play.
Balance is tuned against the bot. It plays whole runs with every wizard on every difficulty, and the target is that it nearly always wins on Apprentice, wins a little over half the time on Adept and about a quarter of the time on Archmage. It is also very good at finding holes. Before there was a limit, it bought ingredients without end and brewed the single best potion 551 times in one run, which is why there are now two brews per workshop and two doses per potion.
The bot is not a person, though. It dodges better than most players and shops without taste, so its win rate is a way to compare changes, not a measure of how hard the game feels in the hand.
One project, two platforms
Hexbrew runs on iPhone and iPad from the same Godot 4.6 project as the desktop game. It decides at run time whether it is on a touch screen. If it is, a thumbstick appears wherever your left thumb lands, the spell button casts at the nearest crowd when you tap it or aims when you drag it, and the menus grow and keep clear of the notch and home bar. The desktop game is unchanged.
On a phone a wizard is under a centimetre tall, so they are drawn simply: a big hat, a big head with dot eyes and a robe. Nothing is drawn or recorded by hand. Every sprite is an SVG written by a Python script, and every sound and music loop is synthesised by another.
Store images drawn by the game
The App Store screenshots are the game drawing itself, with nothing edited by hand. The bot plays a run to a chosen wave and saves it, the game picks up from that file at a store's exact screen size, and a promo scene frames the shot and sets its caption. The 20-second preview is cut from frames Godot writes out itself, over the game's battle music. When a screen changes, the images that show it can be captured again the same way.
Get Hexbrew
Hexbrew shipped on 21 October 2026 and is on the App Store for iPhone and iPad. There is more about the game at hexbrew.coded-4.co.uk, and the Hexbrew case study goes further into the design and the build.
- Godot
- iOS