A Windows desktop application for validating ROM files against DAT files and generating new No-Intro compliant DAT files from your collection.
Documentation: https://purelogiccode.github.io/RomValidator/ | Release notes: see docs/release-notes.md
- ROM Validation: Validate your ROM collection against No-Intro XML DAT files
- DAT File Generation: Generate new No-Intro compliant DAT files from your ROM collection
- Duplicate Detection: Identify duplicate ROM files in your collection
- Multiple Hash Support: CRC32, MD5, SHA-1, and SHA-256 hash verification
- Archive Support: Read ROMs directly from
.zip,.7z, and.rararchives (SharpCompress), with the bundled7za.exe/7za_arm64.exeas a fallback for archives SharpCompress cannot read or create - Fluent Dark Theme: Modern dark UI built on WPF-UI (Windows 11 style)
- Screenshot Capture: Press F8 to save a screenshot of the active window to the
Screenshot\folder next to the executable (falling back to%LOCALAPPDATA%\ROM Validator\Screenshotwhen the application folder is read-only) - App Data Button: the App Data button in the top-right corner opens
%LOCALAPPDATA%\ROM Validatorin Explorer — logs (Logs\) and fallback screenshots (Screenshot\) live there, always writable even when installed under Program Files - Version Checking: Automatic GitHub version checking at startup, with a prompt to open the release page when an update is available
- Robust Error Handling: Retry-based temp-directory cleanup, binary-format detection for wrongly selected DAT files, and automatic bug reports (Serilog) — all Warning, Error, and Fatal events are forwarded to the bug report API
- Windows 10/11 (x64 or ARM64) — WPF application
- .NET 10 Desktop Runtime — the release zip is framework-dependent
- 7-Zip standalone executables (
7za.exefor x64,7za_arm64.exefor ARM64, 7-Zip 26.03) — included for the archive fallback
- Download the zip for your architecture from the latest release:
release_<version>_win-x64.ziprelease_<version>_win-arm64.zip
- Extract it to a permanent folder and run
RomValidator.exe. The application refuses to run directly from a zip archive or a temporary folder.
Each zip contains a single-file RomValidator.exe (framework-dependent), the bundled 7-Zip fallback executables, and LICENSE.txt, ReadMe.md and WhatsNew.md.
Full instructions: Getting Started.
The complete documentation lives in the docs/ folder and is published to:
- Documentation site: https://purelogiccode.github.io/RomValidator/
- GitHub Wiki: https://github.com/purelogiccode/RomValidator/wiki
| Section | Contents |
|---|---|
| Getting Started | Install, first run, quick start |
| User Guide | Validation, DAT generation, duplicates, archives, data |
| Reference | Formats, troubleshooting, build, architecture, CI/CD |
| FAQ | Frequently asked questions |
| Contributing | Bugs, features, pull requests |
- Launch the application
- Navigate to the "Validate ROMs" tab
- Load a DAT file (No-Intro format,
.dator.xml) - Select your ROM directory or archive
- Click "Start Validation" to begin
- Review the results: matched, failed, unknown, renamed, and duplicate files, with live progress stats
- Navigate to the "Generate DAT" tab
- Select your ROM directory
- Configure output settings (name, description, author)
- Click "Start Hashing" to compute hashes, then "Export DAT"
- Save the generated DAT file for use with other ROM management tools
- Use F8 anytime to capture a screenshot of the active window.
- Click App Data (top-right, next to About) to open the folder where logs and fallback screenshots are stored.
- DAT files must be No-Intro XML; ZIP archives, binary images, and ClrMamePro/MAME formats are detected and rejected with a clear message.
- If a file is temporarily locked (e.g. still being written), the app retries automatically and cleans up leftover temp folders in the background.
- WPF-UI (4.3.0): Fluent design system and dark theme
- Serilog (4.4.0) + Sinks (Debug, File): structured logging and automatic bug reports
- SharpCompress (0.50.4): zip/7z/RAR archive reading and zip/7z archive creation
- 7-Zip 26.03 (
7za.exe/7za_arm64.exe): fallback for archive operations SharpCompress cannot perform - xUnit (2.9.3), Microsoft.NET.Test.Sdk (18.10.1), coverlet.collector (10.1.0): testing
The solution includes unit and integration tests (models, services, hash calculation, archive handling, temp-directory cleanup, serialization). Run them with:
dotnet test
| Workflow | Purpose |
|---|---|
| CI | Builds and tests every push and pull request |
| Release | Publishes the single-file win-x64/win-arm64 zips (with license, readme and what's new) and checksums on release_* / v* tags |
| Docs | Publishes the documentation site and mirrors docs/ to the wiki |
See CI/CD for details.
See WhatsNew.md for the latest release highlights and Release Notes for the full history.
- No-Intro for the DAT file format specification
- SharpCompress for archive support
- 7-Zip for the standalone fallback executables
- WPF-UI for the Fluent design system
- Donate: If you find this project useful, consider supporting the developer.
- If you like this project, please give us a star on GitHub! ⭐
This project is licensed under the GPLv3 License – see the LICENSE file for details.
Copyright (C) 2026 Peterson Fernandes – PureLogicCode.com

