# balatro-gba: A Balatro Demake for the Game Boy Advance

> balatro-gba is a C demake of Balatro that targets GBA hardware through devkitARM and libtonc. It installs as a ROM from the Releases tab, ships as a minimal tech-demo, and the README states it is not affiliated with Playstack or LocalThunk.

**GBALATRO/balatro-gba** — A demake of Balatro for the GBA

- Repository: https://github.com/GBALATRO/balatro-gba
- Stars: 2,446 · Forks: 107
- Language: C
- License: not declared
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/gbalatro-balatro-gba

## What balatro-gba Is Trying to Solve

Balatro runs on desktop, mobile and current consoles. The Game Boy Advance is none of those. balatro-gba exists to close that specific gap: it is a demake of Balatro written in C, and the README describes it as an attempt to recreate the game "as accurately as possible including all the visuals that make it satisfying to play." The audience is narrow by design. The README says the project is intended for people who already own and know the official game, and it points readers to the Balatro wiki for descriptions of game mechanics and joker effects rather than documenting those rules itself.

The README also frames the scope honestly. It calls this version a "minimal tech-demo," not a finished product. That single phrase should drive the adoption decision more than any feature list. If you want a complete Balatro experience on a handheld, this is not it. If you want to see a card game's UI, sprite work and joker system reconstructed inside GBA constraints, the repository is aimed squarely at you.

## How the GBA Build Is Structured

The repository is laid out as a devkitPro-style GBA project. The Makefile checks for the DEVKITARM environment variable and errors out immediately if it is unset, with the message "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM". It includes $(DEVKITARM)/gba_rules and then defines LIBTONC itself as $(DEVKITPRO)/libtonc, because the comment in the Makefile states that libgba's path comes from gba_rules but libtonc has to be defined separately.

The build inputs are split into directories declared in the Makefile: source and source/game for code, include and include/game for headers, audio for music, graphics for files processed by grit, and font for font data. The target name is derived from the current directory, and the build directory is build. The Makefile also injects git state into the build through GIT_DIRTY and GIT_HASH variables, so a working tree with uncommitted changes produces a target marked dirty.

At the top level, the repository carries .clang-format, a Doxyfile and a doxygen/ directory, a tests/ directory, ci_scripts/ and a .github/ workflow. The README's build badge points at a GitHub Actions workflow, so continuous integration is part of the project's normal operation rather than an afterthought.

## Installing balatro-gba and Playing a First Hand

The README does not give a ROM installation procedure beyond directing readers to the Releases tab, and it explicitly sends build instructions to CONTRIBUTING.md for Docker, Linux, MacOS and Windows. The repository listing includes a Dockerfile.gbalatro and a docker-compose.yml, so the container path is the one whose contents are visible here.

The compose file defines a single service named gbalatro. It builds from the repository root using Dockerfile.gbalatro, mounts the repository into /balatro-gba, and runs make inside that directory:

```yaml
services:
  gbalatro:
    image: gbalatro:dev
    build:
      context: .
      dockerfile: Dockerfile.gbalatro
    working_dir: /balatro-gba
    volumes:
      - ./:/balatro-gba
    user: "${UID-1000}:${GID-1000}"
    command: ["sh", "-c", "make -j$(nproc)"]
```

Running docker compose up with that file starts a build, not a game. The output is a GBA ROM produced by the Makefile, and the README points to the Releases tab as the place to download prebuilt ROMs if you do not want to build. A build outside Docker needs devkitARM exported and libtonc available under DEVKITPRO, because the Makefile stops with an error otherwise.

Once you have a ROM, the controls in the README are the map to the first hand. A picks a card or confirms a selection, B deselects all cards, L sells a joker or plays a hand, and R discards. Moving cards and jokers in hand requires holding A while pressing the D-pad. Holding B displays a joker description, and the README notes that this works in the shop only. If you are loading the ROM in an emulator, expect a keyboard mapping exercise before the first run is playable.

## Where the Tech-Demo Label Bites

The README's own wording is the strongest limitation: this version is a "minimal tech-demo." That means the project does not promise a complete run structure, and the README does not document what is missing. It defers mechanics descriptions to the Balatro wiki, which is an acknowledgement that the implementation is not the reference for how Balatro works.

The licence situation is unresolved. The repository's licence is listed as unknown, and no LICENSE file appears among the top-level entries, which are .clang-format, .github/, .gitignore, CONTRIBUTING.md, Dockerfile.gbalatro, Doxyfile, Makefile, README.md, audio/, ci_scripts/, docker-compose.yml, doxygen/, example.gif, font/, graphics/, icon.png, include/, scripts/, source/ and tests/. The README's disclaimer states the project is not affiliated with or endorsed by Playstack or LocalThunk and "is not to be sold," and that all rights remain with the original holders. That is a disclaimer, not a software licence. If you need clear terms before redistributing or packaging anything, this repository does not give them to you.

The asset position is mixed and worth reading closely. The README credits sprites and backgrounds as based on original Balatro imagery by LocalThunk, with per-joker credits in a GitHub discussion. Music is an arrangement by @cellos51 and @MeirGavish based on the original soundtrack by LouisF, with transcription credited to MrCrimit. Two mult and xmult sound effects come from a freesound.org recording by poissonmort under Attribution 4.0, while all other sound effects are credited to LocalThunk under CC0. Those are distinct terms attached to distinct files, so blanket assumptions about the audio directory are unsafe.

## How balatro-gba Differs from Running Balatro Elsewhere

The obvious alternative is the official Balatro release, which the README links across Steam, Google Play, the Apple App Store, the Nintendo eShop, the PlayStation Store, Xbox and Humble Bundle. The difference is not just polish. The official game is the complete commercial product with rules and joker effects as designed; balatro-gba is a C reimplementation targeting GBA hardware, and the README treats the official game as the source of truth for mechanics. Choosing between them is choosing between a finished game and a demake exercise.

A second alternative is any of the other platforms the official build already covers. If your goal is simply to play Balatro on a handheld, the Nintendo eShop listing in the README solves that without emulation, flash carts or a devkitARM toolchain. balatro-gba only makes sense when the GBA itself is the point: the 240x160 screen, the button layout, the sprite constraints. The README's control scheme, with L doubling as sell joker and play hand, is a direct consequence of that hardware and would not exist in a port that had more buttons available.

## Maintenance, Releases and Upgrade Cost

The repository is not archived, and the last push was on 2026-09-22. Recent releases are v0.2.2 ("Seed System Update") on 2026-08-11, v0.2.1 ("QOL + Feature Update") on 2026-06-15, and jokers_stable_v1.1 ("Jokers Stable") on 2026-03-09. The release naming is informative: a seed system arrived in v0.2.2, and the jokers line was declared stable well before that. Anyone tracking this project should expect the ROM to change between releases, and the README does not document save compatibility, rollback or downgrade paths between versions.

Upgrade cost depends on how you consume it. If you download ROMs from the Releases tab, upgrades are a file swap and your emulator or flash cart configuration stays put. If you build from source, the Docker path in docker-compose.yml rebuilds the whole target with make -j$(nproc) each time, and the Makefile's git hash and dirty markers mean your build identifies the exact tree it came from, which is useful when reporting a bug. The CI workflow referenced by the README's badge suggests builds are checked on push, but the README does not describe the workflow's steps.

On licensing, the only defensible statement is what the README says: the project is a non-profit fan demake, not affiliated with or endorsed by Playstack or LocalThunk, and not to be sold. The repository listing shows no licence file. Treat the absence as a real constraint on redistribution rather than a formality.

## Conclusion

Adopt balatro-gba if you already own the official game, want a GBA-targeted demake to run on hardware or an emulator, and accept that the README calls it a minimal tech-demo with no licence file in the repository listing. Do not adopt it if you need a complete standalone game, a documented licence, or a build path that does not require devkitARM and libtonc. Verify first that a ROM for your region and flash cart exists in the Releases tab, and read CONTRIBUTING.md before attempting a build.

## FAQ

### How do I get balatro-gba on a GBA?

The README directs readers to the Releases tab to download ROMs, and build instructions for Docker, Linux, MacOS and Windows live in CONTRIBUTING.md. The repository also includes a Dockerfile.gbalatro and docker-compose.yml whose service runs make inside a mounted working directory.

### How do I install balatro-gba from source?

The README says to see CONTRIBUTING.md for build instructions. The Makefile requires DEVKITARM to be set in the environment and defines LIBTONC as $(DEVKITPRO)/libtonc, so a devkitPro-style toolchain is needed before make will run.

### Is balatro-gba complete?

No. The README describes this version as a "minimal tech-demo" intended for people who already own and know the official game, and it refers readers to the Balatro wiki for descriptions of game mechanics and joker effects rather than documenting them itself.

## Sources

- [GBALATRO/balatro-gba on GitHub](https://github.com/GBALATRO/balatro-gba)
- [Issues](https://github.com/GBALATRO/balatro-gba/issues)
- [README](https://github.com/GBALATRO/balatro-gba/blob/main/README.md)
- [Releases](https://github.com/GBALATRO/balatro-gba/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/gbalatro-balatro-gba
