RAChecker
A local tool that scans your ROM collection and tells you, per game, whether you can unlock RetroAchievements — via an exact hash match against RetroAchievements' database.
What is RAChecker?
RetroAchievements identifies a game by an exact file hash. You can only earn achievements if your ROM is byte-for-byte the version registered at RetroAchievements. With thousands of files, checking that by hand is impossible.
RAChecker computes that hash for every ROM (using the same rules as the emulators, including ZIP/RAR/7z and disc images) and matches it against a locally stored copy of the RetroAchievements hash list. The result: a clear list of which of your games earn achievements — and which are a different version.
Local
Runs as a small web app on your machine or as a desktop program. No cloud, no uploads of your ROMs.
Offline after sync
The hash database is loaded once from RetroAchievements. After that, scanning needs no internet.
Not a clone
An independent tool built on RetroAchievements' open Web API and the open rcheevos hash rules. Not affiliated with RetroAchievements.
Installation
Desktop app (Windows)
Easiest: download the installer or portable .exe from the releases and run it — one window, no browser, no console.
From source
Requires Node.js 22+:
git clone https://github.com/x3kim/RAChecker
cd RAChecker
npm install
npm run serve # builds the frontend + starts the server on :8088
- Windows: alternatively double-click
Start-RAChecker.bat. - Linux/macOS: run
./start.sh. - Development:
npm run dev(Vite HMR on :5173).
Then open http://localhost:8088.
First run
On the very first start a wizard walks you through three steps: pick your ROM top folder, connect your RetroAchievements account, and sync the hash database.
- Connect your RA account. In Settings, enter your RetroAchievements username and Web API key (find the key in your RA account settings). Read-only — RAChecker changes nothing on your account.
- Sync the hash database. Hash DB tab → Synchronize. Loads all games + hashes per system once. The first time takes a few minutes. Cached afterwards; automatic re-sync only after 90 days.
- Scan your ROM folder. Scan tab → pick the folder → start the scan.
How it works
Hashing
For cartridge systems RAChecker reimplements the rcheevos hash rules and reads in a streamed way — even multi-gigabyte files won't blow up memory. Archives (ZIP/RAR/7z) are read transparently. For disc systems (PS1, PS2, Saturn, Dreamcast … and .chd) RAChecker uses the bundled RAHasher tool.
.bin, .iso or .cue are shared by many systems. RAChecker resolves that by content: it tries every possible system and keeps the result the hash database recognises, so a correctly dumped ROM matches however you sort your files — even all of them in one folder. System-named folders (SNES, PlayStation, Mega Drive …) are still recognised and tried first, which speeds up ambiguous disc images a little.
Sync & offline
The sync loads all games + hashes per system once from RetroAchievements and stores them locally (one request per system). From then on every scan runs fully offline against that cache. Your account/profile, the Discover area and playtime tracking still need an online connection because they fetch live data.
Android app
- Big files take minutes. Decompression runs in JavaScript, so a multi-gigabyte disc image inside a
.7zcan take several minutes on the phone. The scan shows unpacking progress — it is working, not frozen. For large libraries the desktop app is far faster. - Sync your disc systems in the Hash DB tab, otherwise disc images have nothing to match against.
- Not supported yet: RAR, GameCube/Wii, RVZ/GCZ/GDI, split CUE/BIN, M3U, and CHDs whose data is FLAC-compressed.
RAChecker also comes as a standalone Android app (Expo / React Native) — no PC or server needed. It hashes your ROMs directly on the device, syncs the RetroAchievements hash list on-device and matches everything fully offline.
It mirrors the desktop look and features: a profile with collection & insights, a games-by-system browser with console artwork, Discover, six themes and full English + German.
- Cartridge & handheld ROMs — NES, SNES, GB/GBC/GBA, Mega Drive, N64, PC Engine and ~30 more.
- Disc images on the phone —
.chd,.isoand.pbpfor PlayStation, PS2, PSP, Saturn, Sega CD, Dreamcast, PC Engine CD, PC-FX, 3DO, Neo Geo CD and Atari Jaguar CD. CHD reads zlib- and LZMA-compressed images directly — no desktop needed. - Archives — ZIP and 7z are unpacked and hashed on the device, including disc images stored inside them.
- Clear results — every file says whether it earns achievements, is a known game with no achievement set yet, belongs to a system you haven't synced, or isn't known to RetroAchievements.
- Download: the latest
RAChecker-*.apkfrom the Releases page (Android tags areandroid-vX.Y.Z). - Install: allow "install from unknown sources" when prompted (the APK is unsigned).
- Auto-update (opt-in): the app checks GitHub on launch and can download & install newer APKs — you can decline each time or turn it off in Settings.
Scanning & results
In the Scan tab, pick your ROM top folder and start — subfolders are searched recursively. You get live progress, a hit rate per system and a table with every ROM. Clicking a green row opens details (achievements, points, exact reference name, full hash).
What the statuses mean:
| Status | Meaning |
|---|---|
| 🟢 With achievements | Exactly this ROM version is registered at RA — achievements are earnable. |
| 🔴 No match | RA doesn't know this hash → a different version, no achievements. |
| 🟡 RAHasher | Disc system / .chd — install RAHasher and scan again. |
| 🟣 Unclear | System not recognizable — put the ROM into a system folder. |
| ⚪ Skipped | No hash target, e.g. a disc track .bin next to its .cue. |
For a 🔴 row, "Right version" helps: RAChecker looks up the game and shows which ROM versions RetroAchievements accepts.
Collection & games
- Collection — every ROM ever scanned, stored permanently. Filter/sort by status/system, find duplicates and delete extra copies (1G1R cleanup), copy paths, export as CSV or a playlist.
- Region & language — every file states its region and languages. For a file that matches, they come straight from RetroAchievements: the hash identifies that exact dump, so even a renamed file is read correctly (fetched after each scan for the games you own; the whole database on a button). Only unknown files fall back to the filename (No-Intro, GoodTools, TOSEC), and are marked as guessed. Set your preferred order in Settings → General (e.g. Japanese → Japan → Europe): the collection sorts by it, duplicates mark the copy to keep, and a game's details list which regions RetroAchievements supports and which you own. Nothing is hidden or deleted because of it.
- Collection diff — after each scan: what's new, newly has achievements, is lost or gone.
- Games — browse all achievement games per system, sortable by points, achievements or name; opening a game shows box art, all achievements with badges and the compatible ROM versions.
- Profile — your RA progress: points, mastered sets, completion per game.
Discover
Free games
RetroAchievements' list of legally free homebrew/freeware titles. Each card shows whether an achievement set exists and whether you already own the file.
Set radar
Which achievement sets are being built right now — games you own first. Plus your set requests and "want to play" list.
Community
Achievement of the Week and freshly mastered games from the community, flagged with what you own.
Hardcore & playtime
- Hardcore — a list of all games where your hardcore progress trails your softcore progress. Hardcore forbids save states, cheats and rewind; only then do you get gold badges, leaderboard entries and full points. Every softcore unlock can be earned again.
- Leaderboards — in the game window: all leaderboards for a game with your rank (they only count in hardcore mode).
- Playtime — optional. RetroAchievements only shows what you're playing right now and keeps no history. RAChecker polls that at your chosen interval and stitches it into a local session history (Profile → Insights → Playtime). Off by default; exportable as JSON and importable again.
Export & emulator launch
Exports (in the collection under "Export"): RetroArch playlist (.lpl), ES-DE/EmulationStation, Playnite, LaunchBox and CSV. The ES-DE export ships a ZIP with one gamelist.xml per system and relative paths — exactly what ES-DE expects.
Launch directly: in Settings, enter the path to retroarch.exe and the core folder. After that the "Launch" button in the game window opens the ROM directly with the matching core; which core is recommended per system (and whether it supports achievements/hardcore) is shown in the game window.
DAT completeness
Beyond "does it earn achievements?", the DAT tab answers "is my set complete?". Import No-Intro/Redump/logiqx/ClrMamePro/MAME DAT catalogs and see, per catalog, which entries you already have and which are missing (exportable list). Matching uses your files' real checksums (CRC32, plus md5/sha1 for Redump CHD & MAME disks), read directly from .zip/.7z/.rar archives without extraction — a separate dimension from the RetroAchievements hash. An Extra / unknown dumps view lists files whose hash is in no imported DAT (bad dumps, hacks or systems you have no DAT for).
Offline package & backups
- Backups — the local database (hashes, collection, profile cache) is backed up automatically: on start and after every scan. Manual any time, with download and restore.
- Offline package — exports the hash DB, game details and image cache as one
.7zarchive for a second machine, plus a checklist of whether everything needed is present locally.
Keyboard & tips
- Ctrl+K or / — command palette: live search over games, systems and actions.
- g then d/s/g/e/h — jump to Dashboard/Scan/Games/Discover/Hash DB.
- ? shows all shortcuts, Esc closes dialogs.
- Drag & drop — drop a ROM or archive onto the window to check it instantly, without scanning the whole folder.
- Language and the guided tour live in the "More" menu (⋯) top-right.
FAQ
Do I need a RetroAchievements account?
For syncing the hash database and for profile/Discover: yes (free). The plain scan match works offline afterwards.
Are my ROMs uploaded anywhere?
No. Everything runs locally. Only the hash list comes from RetroAchievements; your files never leave your machine.
Can I download ROMs here?
No. RAChecker ships no ROMs. The Discover area only links to legally free homebrew titles at their developers.
Why are all results "No match"?
Then the hash database isn't synced yet — see First run, step 2.
Troubleshooting
| Problem | Fix |
|---|---|
| Everything "No match" | Sync the hash DB. |
| Disc games "RAHasher" | Download RAHasher in Settings, then scan again. |
| Network path unreadable | Connected/mounted in Windows? Type the full UNC path in the picker. |
| Port 8088 in use | Change "port" in server/config.local.json. |
| Scan slow | Disc images and large archives take longer. The file cache makes re-scans fast. |