4 min read

Offline RetroAchievements have now been unlocked: Here's how they work

Offline RetroAchievements have now been unlocked: Here's how they work

🏆 Hello and welcome to a special edition of The Memory Core newsletter! This one is all about RetroAchievements, which is on the cusp of unlocking offline achievements for the first time.

And I played a (vanishingly) small role in making it happen!

I spent the past few days testing an early implementation and chatting with the dev behind it, but before we get to that, a quick story about how we got here.

The road to offline RetroAchievements

In case you missed it, the saga starts with my first interview with RetroAchievements founder Scott Breen. After a surprising amount of reader interest, I reached out again about offline RetroAchievements, and Scott was gracious enough to give a detailed explanation about why they were so challenging to implement.

After that interview, an old friend got in touch with an offer to help. SapphireRhodonite, whom I first spoke to way back in September 2025 about his dual-screen emulator forks, reached out to see if he could take a shot at it.

Someone I interviewed recently described him as "a positive force in the community," and that's an understatement. Whether it's his work on iiSU, new dual-screen features for GameNative, or his Valentine's Day gift of external screen rear touch support for Vita3K, his work is felt across the Android emulation scene.

After some back-and-forth emails and a little prodding, I was able to put the two in touch. Less than a month later, offline RetroAchievements were ready for testing.

First stop: melonDS

The initial offline RetroAchievements implementation I tested is for the melonDS emulator on Android. This was one of the first emulators SapphireRhodonite forked for dual-screen support, so it was fitting that it would be the first here, too.

What's incredible is that he implemented them without any server-side changes. Instead, it uses a the ledger built into the emulator, which is fetched the first time a game is launched.

Unlike previous implementations, this ledger does not expire when the game closes. It sticks around indefinitely, recording each achievement as you unlock it via normal gameplay. These are marked with the label "In ledger" in the emulator's UI.

In the emulator's settings, you can see how many achievements are pending, and tap a button to sync them. You'll also get prompted to sync when you launch a game, as seen below.

Granted, it's only available for Softcore achievements for now. This may change as things are tested, but it seems like a reasonable compromise.

While this sounds very simple, there's a lot of technical work going on in the background. The most significant addresses one of the team's main concerns: cheating.

SapphireRhodonite's solution adds an anti-tamper feature that forms a hash chain receipt signed with a device key. So if the chain is broken, the team can detect any cheaters. This works on top of the current system, which uses timestamps and other methods.

For anyone more technically minded than I am, here's exactly how the developer describes it:

Tamper-evidence:

  • payloadHash = SHA-256(serialized payload)
  • prevHash forms a hash-chain across records
  • signature = ECDSA P-256 (SHA256withECDSA) using a non-exportable key in AndroidKeyStore

Note that the Android build uses the AndroidKeystore, but other platforms will use TPM.

Speaking of other platforms, SapphireRhodonite is confident that this solution for offline RetroAchievements can be implemented into other emulators relatively easily.

If testing on the melonDS build is successful, he plans to "release a guideline doc so any can follow it." He added, "And of course I will port [it] over to other open source emulators."

As you receive this email, the test build is now available on GitHub. Go snag it, test it, and provide feedback if you can. This is a game-changing feature for RetroAchievements on retro gaming handhelds, and the sooner all the wrinkles are ironed out, the sooner it will be available on more emulators.

You can support SapphireRhodonite's work directly via his Patreon. The community can always use more forces of good.