Library / SDK
trekawek/coffee-gb avatar
trekawek/coffee-gb

Coffee GB: a Game Boy emulator judged by 5,858 automated verdicts

Accurate Gameboy Color emulator.

1,172 stars82 forksJavaMIT

At a glance

What is it?
Coffee GB is a Java and Kotlin Game Boy and Game Boy Color emulator whose compatibility claim is backed by a published table of 17 test suite families and 5,858 automated verdicts, all passing, plus pixel-perfect results on every exact-reference image suite. It also ships rollback netplay, rewind, and an unusually long list of cartridge peripherals.
Who is it for?
Adopt Coffee GB if you want a Game Boy emulator whose compatibility is measured rather than asserted, and if you want rewind and rollback netplay alongside it. Do not adopt it expecting a Game Boy Advance emulator, since it covers only the original Game Boy and Game Boy Color.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 22 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

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

Editorial analysis

What it emulates, and what is written in what

Coffee GB emulates the original Game Boy, the GB/DMG, and the Game Boy Color, the GBC/CGB, and the README describes the ambition as high compatibility across the historic game library, unusual cartridges and accessories, and modern homebrew, demos, and diagnostic ROMs.

The implementation split is stated plainly. The reusable emulation core is written in Java, and the desktop application and its orchestration layer use Kotlin and Java. That is a deliberate division: the core is the part that has to be reusable and testable, and the application is the part that has to feel like a desktop program, which is where Kotlin's ergonomics and Swing pay off.

The repository layout matches that split. There is core/ for the emulation core, cli/ for a command line front end, controller/ and swing/ for the desktop shell, ui-portable/ and android-portable/ for the portable and Android builds, and cli/ plus controller/ separate again from the Java swing/ interface. There is an android/ directory and a pair of upload_to_android scripts, and a packaging/ directory, and the whole thing is a Maven project with a pom.xml at the root.

The project is MIT licensed, the primary language is Java, and the last push to the repository was on 2026-10-01, with the release coffee-gb-2.1.7 from the same day after 2.1.6 on 2026-09-20 and 2.1.5 on 2026-09-13. The cadence of a patch every week or so is what you would expect from a project that runs a compatibility suite on every change.

The compatibility table, and why publishing it matters

The Compatibility section is the most unusual thing about this README, and it is worth reading closely because it is a claim made in a form that can be checked.

The project states that its test profiles exercise 5,858 automated verdicts from 17 suite families, covering all popular Game Boy and Game Boy Color test suites, and that every verdict passes. It also earns the maximum score in GBEmulatorShootout, and every exact-reference image suite is pixel-perfect, listing both Acid2 tests, CGB-ACID-HELL, Strikethrough, all four CasualPokePlayer tests, and all 24 Mealybug Tearoom tests.

The table breaks that down per suite, and the shape of it tells you what kind of correctness is being claimed. Blargg has 54 cases, Mooneye Test Suite 130, RTC3Test 3, SameSuite 71, and the Gambatte HWTests have 4,674 cases, which is the bulk of the total, described as canonical DMG and CGB verdicts matching hardware. GBMicrotest contributes 482 machine-readable verdicts, DocBoy Test Suite 162, and gbc-hw-tests 221 selected hardware-reference verdicts matching exactly.

Two details make the claim credible rather than decorative. Every automated case must produce its documented pass value, match its selected external hardware reference, or satisfy its upstream image oracle, and the source revisions, archive membership, hardware models, and ROM revisions used by the profiles are fixed for reproducibility. So the profiles are pinned to specific hardware references, which means a change in behaviour against real hardware is a failure rather than a new baseline.

The one honest caveat is also spelled out. GBMicrotest's 31 non-verdict diagnostics are tracked separately and are not included in the 5,858 automated verdicts, and the footnote notes that Blargg's aggregate and individual checks overlap by design.

Rewind, save states, and the state interchange question

The state management features are what separate a modern emulator from a minimal one, and the feature list is specific about them.

There are save states and rewind, including ten save slots, named states, previews, autosave and resume, BESS state interchange, screenshots, deterministic input recordings, and battery-backed saves. The rewind is bound to holding Backspace, which is a nice touch, since it means the rewind buffer is a held state rather than a discrete action.

BESS state interchange is the part that matters for anyone with more than one emulator installed. The File menu offers Load BESS state and Save BESS state to exchange states with other BESS-compatible emulators, and the instructions say to open the matching ROM first. BESS is a shared save state format, and supporting it means a save from one emulator can be resumed in another, which is the difference between a state system that works for you and one that works for you alone.

The Game > Manage States menu is where the ten slots are chosen, named, previewed, and exported, and the autosave and resume settings live under File > Preferences… > Saves & Rewind.

There is one interaction worth knowing about. Pause, save states, and rewind are unavailable during netplay, and the reason follows from how rollback netplay works: the two players are exchanging inputs and replaying, so the local state is being reconstructed rather than saved.

The cartridge accessory list, which is the real differentiator

The breadth of peripheral support is the feature that most distinguishes this emulator, and the list reads like a catalogue of every odd piece of Game Boy hardware.

Beyond the Game Boy Camera and the Game Boy Printer, there is Barcode Boy, the Bardigun Reader, Full Changer, Pocket Sonar, Turbo File GB and Advance, the Singer and Jaguar sewing machines, and Datel Action Replay pass-through. There is also real-time clocks, rumble, and tilt controls, and the Super Game Boy borders and palettes.

Several of these are the kind of hardware that never had an official emulator implementation, and a couple of them are for things that are not peripherals at all. The sewing machine support means the Game Boy could be used as a controller for a Singer or Jaguar machine. Supporting them means reading and emulating their protocols, which is a different kind of work from emulating a cartridge.

The Game Genie and GameShark cheats are supported with a bundled searchable libretro cheat database, which is a pragmatic choice, since the alternative is reimplementing the cheat code interpreters.

Then there is GBKiss Link, which sends and receives.gbf files through the cartridge's infrared port, documented separately in doc/gbkiss.md. Combined with the netplay support, that means the emulator covers both the link cable and the infrared path of the original hardware, including the infrared communication used by CGB and the HuC-1 and HuC-3 cartridges.

Loading, controls, and the display options

Loading is deliberately easy: drag and drop, and support for .gb, .gbc, and .rom files, either directly or from ZIP and 7z archives. That last detail saves a step, since a lot of Game Boy homebrew circulates inside archives.

The default keyboard controls are a conventional layout. The D-pad is the arrow keys, A and B are Z and X, Start and Select are Enter and Shift, and the menu and pause are Escape and Space. Save and load state are F5 and F7, a screenshot is F12, and fullscreen is F11. Starting an input recording is Ctrl or Cmd with Shift and R, and rewind is holding Backspace.

Bindings can be changed in File > Preferences…, and the same window holds the display, sound, and save settings. On macOS, game-controller input requires a compatible system SDL2 installation, while keyboard input works without it, which is a useful distinction if you are on a Mac and do not want to install anything.

The display and sound options are the ones that matter for accuracy rather than comfort. There is fullscreen, scaling, rotation, grayscale, color correction, and LCD ghosting, and the audio side has device selection along with volume and latency controls.

The colour correction and ghosting entries are the ones that show the project's priorities. Colour correction exists because the original Game Boy Color was not calibrated to any modern display, and a raw framebuffer output looks wrong next to an accurate emulator. Ghosting is a real hardware artefact of the original LCD, and emulating it faithfully makes the output look wrong in the opposite direction to what most people expect. A project that offers both is aiming at the hardware rather than at a screenshot.

Editorial conclusion

Adopt Coffee GB if you want a Game Boy emulator whose compatibility is measured rather than asserted, and if you want rewind and rollback netplay alongside it. Do not adopt it expecting a Game Boy Advance emulator, since it covers only the original Game Boy and Game Boy Color. Verify first that your games are in the covered library, since compatibility is high but the project is explicit that ROM files are not included.

Frequently asked questions

What is Coffee GB and which hardware does it emulate?

It is a highly compatible Game Boy and Game Boy Color emulator for the desktop, covering the original GB/DMG and the GBC/CGB. The reusable emulation core is written in Java, and the desktop application and its orchestration layer use Kotlin and Java.

How does Coffee GB substantiate its compatibility claims?

Through test profiles exercising 5,858 automated verdicts from 17 suite families, all passing, with the source revisions, archive membership, hardware models and ROM revisions fixed for reproducibility. It also earns the maximum score in GBEmulatorShootout, and every exact-reference image suite is pixel-perfect.

What state management features does Coffee GB have?

Save states and rewind, with ten save slots, named states, previews, autosave and resume, BESS state interchange for exchanging states with other BESS-compatible emulators, screenshots, deterministic input recordings, and battery-backed saves. Pause, save states and rewind are unavailable during netplay.

Which unusual cartridges and accessories does Coffee GB support?

Among others: the Game Boy Camera and Printer, Barcode Boy, the Bardigun Reader, Full Changer, Pocket Sonar, Turbo File GB and Advance, Singer and Jaguar sewing machines, and Datel Action Replay pass-through, plus real-time clocks, rumble and tilt controls, and Super Game Boy borders and palettes.

Does Coffee GB include games or ROMs?

No. The README states plainly that ROM files are not included, and the project is MIT licensed with the current release being coffee-gb-2.1.7 from 2026-10-01, released as GitHub releases rather than tagged versions.

Official sources

  1. Issues
  2. License: MIT
  3. README
  4. Releases
  5. trekawek/coffee-gb on GitHub
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/trekawek-coffee-gb.svg)](https://hysenlabs.com/projects/trekawek-coffee-gb)