w/04 · game engine · chuggie.dev

Chuggie

game boy advance games, written in tish.

what

a game boy advance engine

codebase

67k lines of tish · 34k of rust

language

tish → rust → thumbv4t

output

standard .gba roms

space / tap to jump

overview

Homebrew for the Game Boy Advance usually means C, linker scripts and a lot of pain. Chuggie makes it a modern dev experience: write the game in Tish, run tish build --target gba, get a real ROM.

Under it sits a full game-making framework — an ECS, scenes from Tiled, a chiptune engine and nearly twenty genre kits — and every example game builds in CI and is checked in a headless emulator.

90

playable example games

51

authoring packages

32

ecs components

real ROMs, captured headlessly through libmgba

the challenge

A GBA has 256KB of work RAM, no FPU, no atomics and four background layers. The usual Rust ECS didn't even compile for it.

Chuggie had to give game makers high-level tools — genres, dialog, save files, music — while compiling down to code that fits a 2001 handheld.

01 · the engine

an ecs that fits in a cartridge.

A structure-of-arrays ECS with component columns, a presence bitmask and generational ids, run through a fixed per-frame pipeline of 32 native systems — built from scratch after hecs failed on no_std, no-atomics thumbv4t.

  • →32 components: Body, Platformer, Shooter, Chase, Vision…
  • →FxHash instead of std hashing
  • →stack-overflow guard on device

02 · genres

pick a genre, start playing.

51 Tish packages — shmup, platformer, top-down, isometric, fighter, beat-em-up, kart with mode 7, RTS with fog of war, rhythm, deckbuilder, dialog, cutscenes, shops, saves, link cable.

03 · worlds

draw it in tiled, bake it into the rom.

Tiled .tmj maps import through the scene: scheme with per-layer priority, parallax backdrops, collision and spawn layers — baked at build time, with the GBA's four-layer budget managed automatically.

04 · deck

a chiptune engine that compiles.

Songs are .deck text files with tracks bound to the real sound hardware — two pulse, one wave, one noise and up to six direct-sound PCM voices — baked into compact songs. Go over the voice budget and it's a compile error, not a glitch. Intensity layers give adaptive music.

05 · proof

every example, every commit.

CI builds ROMs for thumbv4t and runs examples headlessly against libmgba built from source, with scripted inputs. The same tooling produced every ROM capture on this page.

architecture

from typescript-ish to thumb.

Tish compiles to Rust, which builds against agb for the GBA's ARM7TDMI. The engine never touches agb directly — hardware goes through the tish-agb bindings.

  1. 01

    game

    your .tish files + Tiled maps, sprite sheets, .deck songs

  2. 02

    packages

    51 authoring modules: genres, ui, dialog, save, link

  3. 03

    engine

    SoA ECS + fixed system pipeline (tish-gba-game-engine)

  4. 04

    bindings

    tish-agb: sprites, backgrounds, input, audio, timers

  5. 05

    runtime

    tish_runtime_gba — the boundary runtime: values, fixed-point, asset arenas

  6. 06

    rom

    nightly Rust → thumbv4t → .gba, verified in libmgba

the developer experience

a shmup, in brief.

an excerpt adapted from examples/shmup and creature-rpg — assets and songs import straight from files.

main.tish
1import { ships } from 'sheet:../assets/ships16.png'
2import { theme } from 'deck:../assets/theme.deck'
3
4backdrop(0x05060f)
5shmupInit({ sheet: ships })
6spawnPlayer(120, 135, {})
7deckPlay(theme)

brand & design system

An arcade identity on a night-black screen: cream text, a gold crest and pixel fonts that would feel at home on the hardware.

night

#050508

crest

#2a1848

gold

#ffd24a

arcade red

#e85d04

red

#ff4d6d

cream

#f0e6d8

Press Start 2Pheadings
monogrambody
  • ·in-browser mGBA player on the site
  • ·examples ship a preview gif or still made by the engine's tools
  • ·trailer cut to a 150bpm deck cue

by the numbers

125

examples

90

roms built & verified in ci

67k

lines of tish

34k

lines of rust

84

recorded previews

6

pcm voices / 4 dmg

counted from the source repositories

Akari
Warforge
A roguelike
Cosmo Kitchen
A metroidvania
A JRPG party

what we did

development

  • engine, ECS and genre kits
  • Tish GBA target
  • headless libmgba capture & CI

design

  • 90 example games
  • authoring APIs

brand

  • arcade identity & crest
  • chuggie.dev with in-browser player
  • trailer

next world

Dunean ai-first desktop ide. →

© 2026 knoe.one