A Game Boy emulator written in Ruby
Try it in your browser: ruby.wasm version (CRuby compiled to WebAssembly) / Spinel version (the same Ruby code compiled to C by Spinel, then to WebAssembly)
Rubyboy requires Ruby 4.0 or higher and SDL2.
$ gem install rubyboy
Tip
Run with YJIT (RUBYOPT=--yjit) for better performance.
$ RUBYOPT=--yjit rubyboy [rom_path]
Without a ROM path, it runs the bundled Tobu Tobu Girl.
| Key | Button |
|---|---|
W A S D |
↑ ← ↓ → |
K |
A |
J |
B |
U |
Select |
I |
Start |
1–0 |
Save state to slot 1–9, 0 |
Left Shift + 1–0 |
Load state from that slot |
Battery-backed games save to <rom>.sav, and save states go to <rom>.state<N>,
next to the ROM file.
| Option | Effect |
|---|---|
--frames N |
Exit after N frames |
--unlimited |
Run as fast as possible; audio that cannot be played in time is dropped |
On an Apple M4, Rubyboy runs at about 110 FPS on CRuby, 290 FPS with YJIT and 800 FPS when compiled with Spinel. See BENCHMARK.md for the method and details.
- WebAssembly builds: the browser versions (ruby.wasm and Spinel)
- Spinel: compile Rubyboy to a native executable
Bug reports and pull requests are welcome on GitHub at https://github.com/sacckey/rubyboy. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
The gem is available as open source under the terms of the MIT License.

