
0.22.0 / 10-08-2026
Performance
Features
OxyROMon
Accuracy
OxyROMon is a cross-platform opinionated CLI ROM organizer written in Rust. Like most ROM managers, it checks ROM files against known good databases. It is designed with archiving in mind, as such it only supports original and lossless ROM formats. Sorting can be done in regions mode, in so-called 1G1R mode, or both. Please check Git for more details.
...
Most Recent Changes
--0.22.0--
Features
Added per-system settings, with automatic fallback to the global value
Added
-n/--systemflag toconfigto scope operations to a specific system (supports%globs)Added per-system settings to the web UI, from a dropdown on each system entry
Added romfile download support to the web UI
Added an About modal to the web UI, showing version, dependencies and statistics
Added DAT import to the web UI
Added Redump DAT download and update to the web UI
Added notification history to the web UI
Added
-u/--updateflag toimport-datsto only import DATs for systems already in the databaseImproved ZIP support in
import-datsto find.datfiles in subdirectories (supports daily dat-o-matic packs)Added an optional native desktop app built with Tauri, sharing the CLI's database and settings
Added an optional
nodfeature to handle RVZ and WBFS natively instead of shelling out todolphin-toolandwitAdded an optional
sevenzfeature to read archives and write ZIP natively instead of spawning 7-ZipAdded real progress bars to RVZ and WBFS conversions with the
nodfeature
Changes
Rewrote the web UI in Rust using Leptos, replacing the Svelte/Flowbite frontend
Rebuilt the web UI on Web Awesome components
Dropped Tailwind CSS, the UI is now styled by Web Awesome and a small stylesheet
Made the web UI's three columns resizable, positions are remembered across visits
Restored the per-field descriptions in the settings dialog
Replaced the
SKIP_PNPMbuild environment variable withSKIP_TRUNKReplaced the
cdfsgit dependency with a native ISO 9660 reader vendored fromopticaldiscs
Improvements
Sizes and notification times in the web UI now follow the reader's locale
Notifications in the web UI now stack instead of replacing one another
Checking an RVZ no longer extracts it to a temporary ISO with the
nodfeatureOptimized dependencies in the dev profile, debug builds and the test suite are much faster
Overhauled web UI colors for improved readability in both light and dark themes
Fixed statistics table header color in light mode to match the systems and games table headers
Overhauled CLI output for a cleaner, more consistent terminal experience
Progress bars and log messages no longer overlap or corrupt each other
Standardized messaging across all commands with clear icons and color coding
Improved
check-romsoutput with per-system pass/fail summaryRevamped statistics card in the web UI with a tiled layout
Revamped settings modal in the web UI with a two-column layout for easier navigation
Cleaned up the entire codebase to be clippy-clean (~900 warnings)
Modernized idioms:
std::sync::LazyLockoverlazy_static, no moreextern crateSimplified the
main()subcommand dispatch usingmatches.subcommand()destructuringRemoved dead code, test-only helpers are now gated behind
#[cfg(test)]Migrated error handling from
simple-errortoanyhow, errors now carry a full context chainExtracted the hashing and comparison helpers out of
CommonRomfileDeduplicated the partition-by-extension blocks in
convert-romsandexport-roms(~560 lines)Unified
convert-roms/export-romsCSO and ZSO handling behind a shared decoding layer (~440 lines)Moved
convert-roms/export-romsNSZ, RVZ and WBFS handling onto the shared decoding layerSimplified
convert-romsCHD handlingSimplified
convert-romsback-to-original handlingExtracted CUE/BIN and CHD parsing helpers into
transcode.rsAdded a
run_toolhelper that centralizes external tool invocation
Fixes
Fixed
RVZ_COMPRESSION_ALGORITHMnever having worked when set to bzip2, it was spelledbzipFixed the notification list in the web UI not opening, it was clipped by the navbar
Fixed the notification count badge sitting off the bell in the web UI
Fixed the system actions menu in the web UI being clipped by its pane, and given proper alignment and hover
Fixed the statistics card shifting up in the web UI whenever a modal opened
Fixed the server not shutting down cleanly on Ctrl+C when SSE clients were connected
Fixed
convert-roms -f rvz --recompressleaving a stray intermediate.isoFixed
convert-roms -f chdfailing on standalone RIFF (LaserDisc) imagesFixed
convert-roms -f originalandexport-roms -f originalmispartitioning Switch files
--0.21.0--
Features
Added sorting options for arcade systems
Added
-e/--extensionflag toimport-datsfor setting custom extensions on original ROMs in the systemAdded support for exporting Dreamcast Redump images to GDI format in
export-roms(based on gdidrop, credits to feyris-tan)Added
-d/--deleteflag toimport-romsfor hard deletion of unmatched and duplicate ROMs (alternative to--trash)Added
-s/--saveflag todownload-datsfor optionally saving downloaded DAT files to a specified directoryAdded purge system buttons in the frontend
Added automatic detection of CHD parents in
import-roms, provided they are in the same directoryAdded a romfiles card to the frontend
Added new
purge-irdssubcommand to unassociate games from IRD filesMoved invalid/duplicate ROM files in subdirectories of the Trash directory in
import-romsAppended the first computed checksum to the trashed ROM filenames in
import-romsAdded an SSE endpoint for sending events to the web UI
Changes
Retired the hash algorithm override in
import-romsRepurposed the
-aflag inimport-romsto import files as-is (now supports non-original formats in DAT files)Improved ROM matching in unattended mode using similarity scoring
Rewrote the frontend using Svelte/Flowbite
Expanded on the
-uflag ofimport-roms, now provides 2 options:skip(default) andfirst
Fixes
Fixed an infinite loop when importing DAT files containing invalid parent references
Fixed playlist names for games having stuff after the disc number
Fixed JB folder game completion
Fixed simultaneously importing ROM files that are shared between 2 or more systems (e.g. Commodore Amiga and Atari ST)
Fixed importing of empty files, they are now ignored in
import-romsand automatically created when a partial game needs them for completion
--0.20.2--
Add a new wanted game state in the web UI, replaces incomplete which now means games with some (but not all) its ROMs
Fix a regression when importing multi-track CHDs which contain tracks identical to other games
Fix parsing archives containing files with = signs in their names
Fix several issues affecting the import of MAME DATs
Fix regressions in rebuild-roms
Add a -f flag to rebuild-roms to force rebuilding with the same strategy
--0.20.1--
Fix an import issue with Progetto MAME DATs
Leave arcade CHDs untouched in convert-roms and rebuild-roms
Fix a regression preventing directory imports
Fix a crash in sort-roms when ROMs have no extension
--0.20--
Dump isoinfo in favor of the native cdfs crate to parse IRD ISO headers
Add a -x flag to import-roms to extract top-level archives before importing their contents
Allow ordering CHD compression algorithms
Use the new splitbin feature in chdman 0.265+, fixes Dreamcast CHD imports
Add a new import-patches subcommand
Add a new create-dats subcommand
Fix special chars handling in 7z
Make the ROM directory portable by storing relative paths internally
Optimize the database upon exiting
Add support for CHD HD and LD formats
Allow importing multi-track CHDs without a CUE file (requires chdman 0.265+)
Use mimetype infering using file magic where possible
Add support for disk tags in the MAME CHDs DAT
Apply GROUP_SUBSYSTEMS to custom system names as well
Autodetect MAME DATs as arcade and remove the -a flag in the import-dats subcommand
Iterate over all hash algorithms when matching and checking roms in all subcommands
Remove the HASH_ALGORITHM setting
Add support DATs with no size information such as the MAME CHD DATs
Parse CHDs data SHA1 and match against it first where applicable when importing CHDs
Support importing MAME CHDs based on the CHD SHA1 contained in the DAT (aka not the actual data SHA1)
--0.19.0--
Add a -n flag to import-dats to override the system name
Enhance the rom matching algorithm in import-roms to reduce prompts when multiple matches are found
Use createcd/createdvd and extractcd/extractdvd appropriately for CDs and DVDs
Add a -r flag to convert-roms to recompress files that already match the target format
Add configuration options for chdman
Add support for CHD parents, enable via the CHD_PARENTS settings
Add a -u flag to config to unset nullable settings
Add a -p flag to convert-roms to prompt for an optional CHD parent when converting to CHD
Change -s in various subcommands to accept SQL wildcards
Change -n to -g (for game) in various subcommands and make it accept SQL wildcards
Change -g to -o (for one g one r) in various subcommands
Add an option to scrub RVZ in export-roms
Fix reimporting an orphan archive containing multiple files or a CHD ROM in import-dats and download-dats
Sort CHD parent prompt by distance
Fix converting archives to another archive format
Fix an issue where converting an archive back to original would only delete the archive
Support 7zz and 7z on all systems, in that order
Improve the IRD game matching prompt when the IRD game name is all caps and the Redump name is not
--0.18.1--
Bump minimum required chdman version to 0.264 for dreamcast
Fix dreamcast system being skipped even with the correct chdman version
--0.18--
Replace
async-stdwithtokioAdd an
infosubcommand to display basic system and dependencies informationOnly generate playlists for complete sets of games
Exit gracefully in most places when missing an external program
Use
7zzinstead of7zon macDon't silently delete files in
check-romsAdd support for ZSO
Add optional dependency on bchunk
Allow filtering games by name in
check-romsTraits! Makes parts of the code actually reusable
Add an optional post-conversion check
Fix importing a couple more bogus DAT files
Accept ZIP files as input for
import-datsAdd a
-uflag toimport-romsto skip user promptsAdd a
-sflag toconvert-romsto select systems by nameUpdate the
-sflag inimport-romsto behave the same as inconvert-romsAdd a
-fflag inpurge-romsto track and delete foreign files in the ROM directoryAdd a new
export-romssubcommandAdd support for WBFS in
export-roms
--0.17--
Clean temporary files immediately in
convert-romsInclude Non-Redump DATs in the grouped subsystems
Don't create empty directories
Fix paths displayed on Windows
Add support for importing CIA files
--0.16--
Use original names for PSN stuff
Add a language whitelist setting
Always name archives after the game name
Add support for NSZ
Expose most settings in the web UI
Make ignored status take precedence over complete status in the web UI
Additionally match the whole flag string to allow discarding specific flag combinations
Make
purge-romsphysically delete orphan ROMs
--0.15--
Use archive name and directory names in the archive when importing arcade games
Also use the file name in the archive when importing arcade games
Rework import-roms to only ask for a system when desired or necessary
Rework rebuild-roms to make it a lot faster
Fix completion computation for arcade systems
Don't automatically trash invalid roms, put the mechanic behind a flag
Add a flag to force import existing roms
Use native rust implementations by default (openssl-sys -> rustls, libz-sys -> miniz_oxide)
--0.14.1--
Fix game filtering in the web UI with the new 1G1R system
--0.14.0--
Add the ability to sort ROMs in alphabetical subfolders
Add a catch-all region
ZZinREGIONS_ALLfor thesort-romshybrid modeAdd a
GROUP_SUBSYSTEMStoggle, if true merge variants of the same system in a single directorySupport MAME DAT files that use non-standard
machineinstead ofgametagsAdd various compression settings for 7Z, ZIP and RVZ
Add a new
generate-playlistssubcommandFix pure 1G1R sorting with parent-clone groups that have no ROMs
Add a
REGIONS_ONE_STRICToption to switch between strict and lenient 1G1R electionFix 1G1R sorting when revisions are clones
Display an appropriate message when a ROM has already been imported
Add a
PREFER_FLAGSto give a boost to specific flags in the 1G1R election processAdd
PREFER_PARENTS,PREFER_REGIONSandPREFER_VERSIONSsettings to influence the 1G1R election process
--0.13.0--
Remove the ROM original extension from archives, it makes RetroArch name its saves differently between imported and non imported games
Fix the sort-roms prompt to proceed
Allow creating solid 7z archives
Skip games with unparseable names in import -dats
Fix successive import of invalid ROMs with the same name in import -roms
Greatly speed up purge -systems
--0.12.0--
Change --missing to --wanted in sort -roms to avoid confusion with the same purge -roms flag
Add a purge -systems subcommand (WIP)
--0.11.1--
Fix import-roms CLI flags
Fix import-roms 7Z CRC parsing
--0.11.0--
Put CHD, CSO and RVZ support behind features
Add support for PS3 IRD files, along with a new import-irds subcommand
Add support for PS3 updates and DLCs
Allow selecting the checksum algorithm in import-roms (useful for JB folders which only provide MD5)
Add a new benchmark subcommand (Linux only for now) to measure the performance of checksum algorithms
Support moving files across different filesystems
Fix a parsing issue on DAT files with duplicate "clrmamepro" fields
--0.10.1--
Fix RVZ conversion
--0.10.0--
Fix version sorting in 1G1R when parent is missing or unwanted
Treat the first elligible clone as parent in 1G1R when parent is missing
Greatly improve completion calculation in sort-roms
Add support for the Atari 7800 header definition
Embed some no-intro header definitions and use them as fallback
Add initial support for arcade systems
Add a new rebuild-roms subcommand for arcade ROM sets
Add support for RVZ via dolphin-tool
--0.9.0--
Use transactions for increased database performance
Add an optional GraphQL API and a basic web UI, behind the
serverfeatureStore ROM files' actual size in database
Store system and game completion status in database
Store game sorting in database (all regions, one region, ignored)
--0.8.1--
Use a database connection pool
Fix importing archives with invalid files
--0.8.0--
Add a new download-dats subcommand
Use dialoguer for prompts
Support importing ISO compressed as CHD
Support converting between ISO and CHD
Support converting directly between supported formats (as opposed to having to revert to original beforehand)
Optionally print statistics after each conversion
--0.7.0--
Use shiratsu_naming to parse No-Intro names
Drop releases, we don't need them
Delete obsolete roms when importing updated dats and automatically reimport orphan romfiles
Move failed imports to the trash directories
Fix headered ROMs handling
Add a unique constraint to the settings::key column
Simplify discard settings, please refer to the new documentation
Remove the ability to delete a setting
Allow purge-roms to delete orphan romfiles
WARNING The internal region format is now TOSEC's, all DATs need to be reimported for this change to take effect.
--0.6.0--
Replace refinery with sqlx migrate
Add a check-roms subcommand
--0.5.0--
None reported
--0.4.0--
None reported
--0.3.0--
None reported
--0.2.2--
None reported
--0.2.1--
None reported