A Game Boy Emulator for iOS / iPadOS / macOS written in Swift.
With controller supports and palette customization!
Status Games that don't rely on advance CPU tricks or MBC special feature works, e.g Super Mario Land, Kirby Dream Land, Tetris, Tennis, F1 Race, Pokémon...
Under active development (full MBC-2-3-5-6-7 support on the way! now limited to RAM feature, ETA: when its done!). For now limited to GB, GBC support planned.
This repo holds the front-end logic of the emulator for back-end logic (emulation code), see GBKit.
This projects aims at being compatible with the following platforms:
- iOS (14+)
- iPadOS (14+)
- macCatalyst (14+)
- Swift Playgrounds (both macOS and iPadOS (WIP @see roadmap))
Open either ./src/app/GameBoyEmulator/GameBoyEmulator.xcodeproj or ./src/app/GameBoyEmulator.swiftpm with xcode on macOS.
n.b Swift Playgrounds is also supported on macOS but debugging remains impossible as long as performance which are tied to debug xcscheme.
This project/repo is (for now) organiseed as follow:
- A core package package (as a submodule with its own repo)
GBKitin./packages/GBKit(where the magic happens) - A SwiftUI package
GBUIKitin./packages/GBUIKit(SwiftUI frontend) - The emulator app in
./src/app(the macOS/iOS/iPadOS app itself)
-
Finalize GBKit (
./packages/GBKit) (MBC-2-3-4-5) -
Finalize GBUIKit (
./packages/GBKit)(Keyboard support for macCatalyst,...)
3. Release GBKit ( -> see GBKit./packages/GBKit) as a standalone Swift Package (with its own git) read to use in any Swift emulator project.
- Release GBUIKit (
./packages/GBUIKit) as a standalone Swift Package (with its own git) read to use in any Swift emulator project.
5. Better frontend controls (keyboard, buttons made in SceneKit to avoid SwiftUI performance drop)
-
Add support for GBC
-
Restore supports for Swift Playgrounds implies to reference GBKit and GBUIKit as dependencies.
| iOS (game view / DMG palette) | iOS (game view / MGB palette) | iOS (game view / custom palette) | iOS (game view / landscape fullscreen) | iOS (settings view) | iPadOS | macOS |
|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
If after changing version configuration xcode still throw error do the following and relaunch xcode:
rm -rf ~/Library/Developer/Xcode/DerivedData
Game Boy and Nintendo are used under nominative use. As for logo's bytes inclusion please read Sega v. Accolade.







