A Game Boy Advance and a Game Boy Advance SP playing online through CanoFlash

CanoFlash is an ESP32-S3 accessory that plugs into the Game Boy Advance Link Port and takes homebrew games online on original hardware. In the demo video, a GBA and a GBA SP, each with its own CanoFlash, meet in an online room and play together with no PC.

How it works

Game on cartridge  ⇄  Link Port  ⇄  CanoFlash (ESP32-S3)  ⇄  Wi-Fi / TLS  ⇄  Game server
  • The game runs from a flash cartridge and talks to CanoFlash through a small C API polled once per frame.
  • CanoFlash handles Wi-Fi, TLS and device authentication, so the game never touches passwords or tokens.
  • The server only manages rooms and forwards data. Game rules stay in the game, and only CanoFlash devices can connect.

The SDK

Free and MIT-licensed: two C99 files with no engine dependency and no dynamic allocation, for devkitARM C and Butano C++.

  • Public matchmaking, or private rooms with a six-digit code
  • Lobbies with player names and a room host
  • State updates for positions and reliable events for turns and actions, up to 480 bytes each
  • Recovery from short Wi-Fi drops

The SDK lobby example on a GBA SP: a room with two players ready to start

The lobby example from the video ships with full source code. Source on GitHub · Documentation

It also writes the games

CanoFlash connected to an original Game Boy Advance, with its menu and OLED status display

CanoFlash started as a Wi-Fi loader. It sends a native menu into the console's RAM through Multiboot, downloads authorized homebrew or your own backups, writes them to a compatible rewritable cartridge and backs up saves. The same device writes an online game to the cartridge and then connects it. No console modification is needed.

The Multiboot, selection, cartridge-writing and restart workflow

One thing that bit me

On the Link Port the GBA is the serial slave: it can't speak first, it can only leave a 32-bit word and wait for CanoFlash to clock it. At 256 kHz the last bit of every GBA→ESP32 word went missing, because the GBA releases its output line before the 32nd bit is sampled. More stories like this are coming in the project logs.

Status and limits

  • Tested with two players on real hardware; more consoles are still to be tested
  • Works in games made with the SDK, not in existing games
  • Built for turn-based and slower real-time games, not 60 fps action
  • No latency or online battery figures yet: they still have to be measured on the current firmware
  • A compatible flash cartridge is required, and the battery is not included

The CanoFlash prototype opened on the workbench during testing

What's next

I'm moving from a working prototype to a repeatable first production run. The Kickstarter campaign launches on September 20, 2026 at 17:00 CEST. If it's funded, I'll also release a self-hosted version of the game server and a firmware update to connect to it.

CanoFlash is an independent project and is not affiliated with, endorsed by or licensed by Nintendo.