Case study · In-house product

Emula2

Your handheld classics, with medals for what you achieve.

Year 2026
Role Product, design and native development
Platforms iOS + Android
Emula2 app icon

Challenge

Mobile emulators got stuck in the past.

Many handheld emulators in the stores are abandoned, full of ads, or ask for an account and a connection just to record an achievement. Shiny hunters count their resets by hand, in another app or on a calculator. We wanted a modern, native, privacy-respecting emulator that also understands what happens inside the game.

Approach

Shared logic, native UI, performance first.

We share the domain, data and ViewModels with Kotlin Multiplatform and build the UI natively on each platform: Jetpack Compose with Material 3 on Android and SwiftUI on iOS. The emulation core runs in C, hands each frame over through a triple buffer and allocates no memory per frame. A medal engine reads the emulated memory to detect real in-game milestones. Its rules live as data and are verified before each release. Everything stays on the device: no network, no analytics and no accounts.

Outcome

In testing for the App Store and Google Play.

Emula2 is in pre-launch, with internal builds on iOS and Android. The app runs in English and Spanish, works with TalkBack, VoiceOver, Dynamic Type and Reduce Motion, and asks for no permission at all on Android.

2 Native apps, one core
0 Personal data collected
EN · ES Languages from day one

Stack

What we used.

Technologies chosen for fit, not for hype:

  • Kotlin Multiplatform (shared domain, data and ViewModels, MVI)
  • Jetpack Compose + Material 3 on Android, SwiftUI + SKIE on iOS
  • Emulation core in C (MPL-2.0) with Oboe, AVAudioEngine, OpenGL ES and Metal
  • SQLDelight + DataStore for local persistence, no backend
  • Declarative medal engine, with rules generated and verified before each release

Want to see the app?

See its features, the privacy policy and Emula2 support.

Go to the product page