Open-source project
Lesserkuma/FlashGBX avatar
Lesserkuma/FlashGBX

FlashGBX: reading and writing Game Boy cartridge saves and ROMs

Reads and writes Game Boy and Game Boy Advance cartridge data. Supported hardware: GBxCart RW, GBFlash, Joey Jr, Game Bub

893 stars93 forksPythonGPL-3.0

At a glance

What is it?
FlashGBX is a Python desktop tool that backs up, restores and erases save data from Game Boy and Game Boy Advance cartridges, dumps ROMs, and writes new ones to flash carts, using a cheap USB cartridge reader. It suits collectors and preservationists working with physical cartridges.
Who is it for?
FlashGBX is a good fit for a collector or preservationist who needs to read and write physical Game Boy and Game Boy Advance cartridges, and who wants a tool with an explicit hardware compatibility list rather than a generic flasher, because knowing which flash chip and mapper a cart uses is the thing that usually goes wrong.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the tool actually does with a cartridge

The feature list is short enough to state precisely, and each item corresponds to a real preservation task. You can back up, restore and erase save data from Game Boy and Game Boy Advance cartridges, including the Real Time Clock registers, which is the detail that matters for anything with a clock in it, because an RTC save is a separate structure from the main save and losing it silently ruins a timed save. You can back up ROM data from the cartridges. You can write new ROMs to a wide variety of flash cartridges, which is how a homebrew or a patched build gets onto a real cart. Many reproduction cartridges and flash cartridges can be auto-detected, which is the single biggest practical difference between a tool that works and one that does not, because a cart exposes nothing about itself and the tool has to guess from the chip responses. A flash chip query can be performed for flash cartridges, including Common Flash Interface information, which is the standard way a flash chip describes its own geometry. There are two more features that are really about the archive rather than the cartridge: decoding and extracting Game Boy Camera photos from save data, and generating ROM dump reports for game preservation purposes.

The mapper list is the real specification

The longest part of the readme is a compatibility list, and it is worth understanding what it tells you. For Game Boy it lists all cartridges without memory mapping, then the standard mappers including MBC1, MBC2, MBC3, MBC30, MBC5, MBC6 and MBC7, then MBC1M, MMM01, and then a group of unlicensed mappers: MAC-GBD, which is the Game Boy Camera, the G-MMC1, M161, HuC-1 and HuC-3, TAMA5, and unlicensed mappers for the 256M, Wisdom Tree, Xploder GB, Sachen, Datel Orbit V2 and MBCX. For Game Boy Advance the list covers cartridges without memory mapping, the 8M FLASH DACS, 3D Memory for GBA Video, an unlicensed 4G mapper and the unlicensed GBA Movie Player v2. Each of these corresponds to a different address decoding scheme, so the tool needs to know which one is in front of it before it can read the right addresses. The practical consequence for a new user is that a cartridge with a mapper you do not recognise is a cartridge you should not write to until you have confirmed what it is.

Flash carts, DIY builds and the auto-detection footnote

The re-writable cartridge list is enormous and includes a category that tells you a lot about the audience: DIY carts. There are entries for a DIY cart with 28F016S5, DIY carts with AM29F010, AM29F016, AM29F032, AM29F040 and AM29F080, with AT49F040, HY29F800, M29F032D, MBM29F033C, MX29F040, MX29LV640 and SST39SF040, and the insideGadgets carts across a range of sizes from 32 KiB up to 4 MiB, including variants with FRAM rather than SRAM and with rumble options. Alongside those are commercial carts such as the BennVenn MBC3000 in v4 and v5 RTC versions, the BUNG Doctor GB Card at 4M, 16M and 64M, the Catskull 32k Gameboy Flash Cart, the ModRetro Chromatic Cartridge with 39VF1681 and with IS29GL032, the FunnyPlaying MidnightTrace carts, the GameShark Pro, and the GBFlash family. There is a separate section for reproduction and bootleg cartridges, with entries identified by the flash chip part number on the PCB, because those boards often carry no legible text. The footnote at the end of the list is the operational warning that matters: some cartridges cannot always be auto-detected, so you have to select the cartridge type manually.

Four reader devices, and only a handful of tested revisions

The hardware side is narrower than the cartridge side, and the tested versions are named, which is exactly the information you need before buying something. The supported readers are the GBxCart RW, tested with v1.4, v1.4a and v1.4c, the GBFlash, tested with v1.2 and v1.3, the Joey Jr, tested with V2 and later, and the Game Bub. The distinction between a reader and a cartridge is worth keeping straight. The reader is the USB device that plugs into the computer and into the cart, and it is the thing whose protocol the tool speaks. The cartridge is the plastic shell with the board and the flash chip inside. A cart from a different vendor might work perfectly with the same reader, since the electrical interface is the same, but the memory layout inside is different, and that is what the mapper and flash chip lists are about. The GBFlash appears on both lists, once as a reader and once as a family of flash carts, which is a good illustration of the distinction.

A Python package with a GUI, and two Qt backends

The packaging tells you it is a desktop application rather than a library, and it is a Python one. The project is FlashGBX, version 5.1, described as reading and writing Game Boy and Game Boy Advance cartridge data, and it requires Python 3.7 or newer. Its runtime dependencies are small and tell you what it does: pyserial for the serial connection to the reader, Pillow for image handling, which is what the Game Boy Camera photo extraction needs, requests for network access, python-dateutil for timestamp handling in the reports, and packaging for version comparisons. The GUI is optional in the sense that there are two extras, qt5 pulling in PySide2 with an older Pillow, and qt6 pulling in PySide6, and the classifiers name the X11 applications with Qt environment, so the interface is a Qt application. The console entry point is defined in the packaging configuration:

toml
[project.scripts]
flashgbx = "FlashGBX.FlashGBX:main"

The interface languages are English, German and Simplified Chinese, and the package data declaration shows the resource and locale directories are shipped with the wheel, so the translations are part of the install rather than a separate download. The repository layout is a single FlashGBX package directory, a run.py launcher at the root, a CHANGES.md for the change log, a Third Party Notices file, and a MANIFEST.in.

Preservation reporting and the licence to keep in mind

Two features deserve separate attention because they are about the archive rather than about the cartridge. Generating ROM dump reports for game preservation purposes means the tool produces a record alongside the dumped data, and the whole point of the ROM dump report is that a bare ROM file does not tell you where it came from, what hardware produced it or whether it matches other copies of the same game. For a collection, that metadata is the difference between a pile of files and a verifiable archive. The Game Boy Camera photo extraction is the other one, and it works on the save data rather than the ROM, pulling the camera images out of a save where they are stored in a particular format. On the legal side, the licence field on the repository says GPL-3.0, and the packaging configuration states GPL-3.0-or-later with a license-files entry pointing at the LICENSE file, and the presence of a Third Party Notices file suggests the project also carries third party attributions. The release history is active, with 5.1 on 2026-08-29, 5.0.1 on 2026-06-05 and 5.0 on 2026-06-03, and the last push was on 2026-09-08, so the compatibility lists are being revised as new carts appear.

Editorial conclusion

FlashGBX is a good fit for a collector or preservationist who needs to read and write physical Game Boy and Game Boy Advance cartridges, and who wants a tool with an explicit hardware compatibility list rather than a generic flasher, because knowing which flash chip and mapper a cart uses is the thing that usually goes wrong. It is the wrong tool for emulators or for dumping without a physical reader, and it is the wrong tool if you need to write to a cartridge type that is not on the list, since a wrong detection can write to the wrong memory. Before running it, check the supported hardware list for your reader, note the footnote that some cartridges cannot always be auto-detected and must be selected manually, and read the licence, because the project is GPL-3.0-or-later, which matters if you plan to bundle the tool. The last push was on 2026-09-08, and the current release is 5.1 from 2026-08-29.

Frequently asked questions

What can FlashGBX do with a Game Boy cartridge?

It can back up, restore and erase save data from Game Boy and Game Boy Advance cartridges including the Real Time Clock registers, back up ROM data, and write new ROMs to a wide variety of flash cartridges. It can also decode and extract Game Boy Camera photos from save data and generate ROM dump reports for preservation purposes.

Which cartridge readers does FlashGBX support?

The GBxCart RW, tested with v1.4, v1.4a and v1.4c, the GBFlash, tested with v1.2 and v1.3, the Joey Jr, tested with V2 and later, and the Game Bub. The tested hardware revisions are named for each one, and a reader is separate from the cartridge, which has its own much longer list.

What happens if my cartridge cannot be auto-detected?

You have to select the cartridge type manually. The footnote on the supported list says that some cartridges cannot always be auto-detected, and the re-writable cartridge list marks the affected entries. This applies to several development cartridges and some DVP DRV boards, and the documentation points at the flash chip query, including Common Flash Interface information, as the way to identify what a cart actually contains.

What are the dependencies and the system requirements for FlashGBX?

Python 3.7 or newer, with pyserial, Pillow, requests, python-dateutil and packaging. The graphical interface is optional and comes in two flavours, a qt5 extra with PySide2 and an older Pillow, and a qt6 extra with PySide6, and the console entry point is installed as flashgbx.

What licence is FlashGBX released under?

GPL-3.0-or-later, with the terms in the LICENSE file and the licence field on the repository reading GPL-3.0. The repository also carries a Third Party Notices file, and the current release is 5.1 from 2026-08-29 with the last push on 2026-09-08.

Official sources

  1. Issues
  2. Lesserkuma/FlashGBX on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/lesserkuma-flashgbx.svg)](https://hysenlabs.com/projects/lesserkuma-flashgbx)

Was this useful?