github emmercm/igir v4.0.0

latest releases: v4.2.0, v4.1.2, v4.1.1...
5 months ago

⚠️ This version was unpublished from npm because it broke Node.js package resolution. The executables attached to this release should still function correctly. ⚠️


See the project website for complete documentation, installation & usage instructions, and examples!

Release highlights

As Igir approaches its third birthday in August, it remains one of the most feature-rich ROM managers available. The project continues to be a labor of love, and I greatly appreciate everyone who uses my tool, and especially those who provide feedback.

I'd especially like to thank the project's ongoing sponsors, @dcramer and @rommapp, and other anonymous users who have given one-time donations. It means a lot that you value my work enough to donate.

As is tradition, I like to include some Igir by the numbers on major version releases:

There are several exciting major changes in this major version release...

🎨 Visual overhaul

One of the first changes you'll notice is Igir looks a lot better (in my opinion). See for yourself!

asciicast

If you've used Igir before, then the new design should feel familiar with similar colors and information displayed. Also, the new CLI logo has been in since v3.3.1, but I think it matches the new aesthetic great.

🗜️ TorrentZip & RVZSTD support

Nearly every other ROM manager creates TorrentZips by default, and now so does Igir. But we didn't stop there with structured archive support, Igir now also supports the Zstandard-based RomVault RVZSTD format! You can decide which format you want to use with the new --zip-format <format> option (docs).

Both structures have extremely poor documentation on the internet, so if you find any problems, please raise a GitHub issue!

🗳️ Better candidate generation

The output candidate generation process that matches input files to DATs has been rewritten nearly from scratch. This should help with predictability as well as performance.

Several other bug fixes were made along the way. Thank you to @d0k3, @ReaperMantis, @IDmedia, and others for your reports and comments!

✨ Everything else...

Token replacement failures won't bomb your entire process

Failure to replace tokens such as {mister} will cause the related game & ROM to be ignored, rather than stopping your entire process. This fix is particularly helpful when you want to copy a large collection onto different hardware.

Thank you @HDZEE and others for the suggestion!

Sega Dreamcast GD-ROMs now also parsed as .cue/.bin

This is in addition to the existing .gdi/.raw/.bin support. Support for .cue/.bin means you can use Redump's Dreamcast DAT, while before you could only use TOSEC. This feature will slow down scanning of GD-ROMs, but results will be cached like any other archive. Though this change does mean the cache format has changed slightly, which will invalidate any previous cache files.

Thank you @d0k3 for the feature suggestion!

New --dir-dat-mirror option

This option helps with organizing your written ROMs in a folder structure that matches your DATs (docs). This helps you achieve behavior similar to RomVault's default behavior.

Breaking: reflink support, new --link-mode <mode> option

Support for copy-on-write reflinks has been added to the igir link command (docs). Because there are now three types of links supported, the --symlink option has been replaced with a new --link-mode <mode> option. Reflinks are a great alternative to copying files for filesystems that support it.

Thank you @mainrs for the feature suggestion!


Those are just the highlights; there were several other fixes that should make execution more robust and predictable. Thank you to everyone who has submitted a bug report or feature request!

All changes

28 June 2025 - 5e6b527 - v4.0.0 (#1645)
28 June 2025 - a2cc905 - CI: rebase conflicted Renovate PRs (#1657)
27 June 2025 - f154995 - Chore: Roll back dependency is-unicode-supported to 1.3.0 (#1654)
27 June 2025 - 859970d - Chore: update ESLint (#1653)
27 June 2025 - 06bffdb - Chore: update dev dependencies (#1641)
27 June 2025 - 237bd19 - Fix: deterministic candidate order, candidate efficiencies (#1656)
27 June 2025 - 6c75231 - Fix: reporting raw-moved archives as incomplete (#1651)
27 June 2025 - a7b2c0c - Chore: update dependency dolphin-tool to v0.2506.0 (#1650)
27 June 2025 - dbeb798 - Chore: update Node.js to v24.3.0 (#1649)
27 June 2025 - 145f0e9 - Chore: update adRise/update-pr-branch action to v0.10.1 (#1655)
27 June 2025 - 7e8e1e9 - Chore: update Jest to v30.0.2 (#1643)
27 June 2025 - 21d59fc - Chore: update ESLint (#1642)
27 June 2025 - 5c5c52f - Refactor: use CPU cores for semaphore parallelism (#1652)
27 June 2025 - b0b5114 - Refactor: util.promisify(fs.*), reduce promise buildup, no inodes in cache (#1648)
26 June 2025 - afd55ba - Fix: revert to fs.copyFile() on Windows (#1644)
26 June 2025 - ebf7398 - Refactor: eliminate static semaphores (#1638)
25 June 2025 - 9c65ed0 - Chore: update dependency mkdocs-git-revision-date-localized-plugin to v1.4.7 (#1640)
25 June 2025 - 0389e6b - Fix: reset deletion progress bar name (#1639)
25 June 2025 - 8342d25 - Feature: breaking: create reflinks (#1637)
24 June 2025 - 95450f6 - Feature: warn when writing to the same output file path (#1635)
23 June 2025 - ece604b - Fix: parent/clone inference with id/cloneofid-based DATs (#1636)
22 June 2025 - ef1f095 - Fix: find root romOf BIOS when merging/splitting (#1634)
22 June 2025 - 5bb79c8 - Fix: ignore token replacement errors during candidate generation (#1632)
22 June 2025 - 7df48dd - Fix: group multi-ROM HTGD SMDB games (#1633)
22 June 2025 - 4001461 - Feature: delete empty input subdirectories when moving (#1608)
22 June 2025 - 46f2ac8 - Feature: parse .bin/.cue files from GD-ROM CHDs (#1628)
22 June 2025 - e6dd0d8 - Feature: remember source file when inferring games (#1631)
22 June 2025 - 60a668b - Chore: update dependency chdman to v0.277.2 (#1630)
21 June 2025 - 59e7e33 - Chore: update dependency eslint-plugin-jest to v29 (#1627)
21 June 2025 - 2a26a36 - Chore: pin dependency is-unicode-supported to 2.1.0 (#1629)
21 June 2025 - 8e34b19 - Feature: CLI progress bars redesign & rewrite (#1579)
21 June 2025 - 76524bc - Chore: update dependency chdman to v0.277.1 (#1626)
19 June 2025 - 3be04ed - Chore: update dependency @types/jest to v30 (#1625)
18 June 2025 - 6e21327 - Chore: update lockfile (#1624)
18 June 2025 - bd78fac - Chore: update Node.js to v24.2.0 (#1623)
18 June 2025 - 81a34d9 - CI: keep Node.js up to date with 'current' (#1622)
18 June 2025 - bded1dd - Chore: pin dependency @types/graceful-fs to 4.1.9 (#1621)
18 June 2025 - fc92d80 - CI: use GitHub PAT with Node-API prebuilds (#1620)
18 June 2025 - 6b679af - Chore: update jest monorepo to v30 (major) (#1614)
18 June 2025 - 88bb725 - CI: keep Node.js up to date with 'current' (#1619)
18 June 2025 - cebb033 - Chore: update dependency ts-jest to v29.4.0 (#1618)
18 June 2025 - 5efabea - Chore: update dependencies (#1590)
15 June 2025 - 4e32a1f - Chore: update dependency eslint-plugin-jsdoc to v51 (#1616)
12 June 2025 - 00e75da - Chore: update ESLint (#1613)
11 June 2025 - d607916 - Chore: update dependency jest-extended to v6 (#1611)
30 May 2025 - fc3fd98 - Chore: update docs dependencies (#1600)
30 May 2025 - f080cf7 - Chore: update dependency eslint-plugin-unicorn to v59 (#1601)
30 May 2025 - 91f157a - Chore: update ESLint to v8.33.0 (#1606)
30 May 2025 - b9360a5 - CI: update major versions outside of monthly schedule (#1607)
29 May 2025 - 502d17d - Chore: update lockfile (#1605)
29 May 2025 - 18527d3 - Chore: update lockfile (#1604)
28 May 2025 - 1a0a986 - Chore: update lockfile (#1603)
27 May 2025 - 1e18763 - Chore: update dependency jest-extended to v5 (#1602)
27 May 2025 - e56b0b4 - Chore: update ESLint (#1599)
27 May 2025 - 0615efd - Chore: update dev dependencies (#1598)
27 May 2025 - a17ab1b - Chore: update dependency ts-jest to v29.3.4 (#1597)
11 May 2025 - fe8d9c9 - Chore: update Node.js to v24.0.1 (#1589)
11 May 2025 - 44cce33 - CI: test Node.js 20 (#1463)
11 May 2025 - d19066b - Chore: update dependencies (#1560)
11 May 2025 - cb47b28 - Feature: test input files without writing anything (#1588)
11 May 2025 - 93512d3 - Fix: TorrentZip filename sorting (#1587)
10 May 2025 - d6da42e - Fix: lock input files from moving before zipping (#1586)
10 May 2025 - 2530f47 - Fix: dir dat mirror option (#1585)
10 May 2025 - 389f83e - Feature: dir dat mirror option (#1584)
9 May 2025 - f3a5e8e - Refactor: remove 'husky' (#1583)
9 May 2025 - d3458ff - CI: keep Node.js up to date with 'current' (#1582)
9 May 2025 - e934a75 - CI: keep Node.js up to date with 'current' (#1580)
8 May 2025 - c676873 - Chore: update ESLint (#1578)
4 May 2025 - ecc6595 - Feature: RVZSTD support, candidate selection improvements (#1563)
3 May 2025 - f63953c - Chore: update dependency dolphin-tool to v0.2503.1 (#1574)
3 May 2025 - d94e08d - Chore: update dependency chdman to v0.277.0 (#1573)
29 April 2025 - 789946d - Chore: update lockfile (#1569)
29 April 2025 - 05a1416 - Chore: update Node.js to v22.15.0 (#1568)
28 April 2025 - 9e56d4c - Chore: update lockfile (#1567)
28 April 2025 - a758139 - Chore: update dependency @types/node to v22.15.2 (#1564)
27 April 2025 - 63ca8be - Chore: update dependency @types/node to v22.14.1 (#1561)
27 April 2025 - f99b8ed - Chore: update dependency ts-jest to v29.3.2 (#1559)
27 April 2025 - 0e7f7fb - Chore: update docs dependencies (#1562)
27 April 2025 - f89896b - Chore: pin dependencies (#1557)
27 April 2025 - 05632e0 - Feature: consider non-TorrentZip zips invalid (#1558)
27 April 2025 - c77db43 - Chore: update ESLint (#1555)
27 April 2025 - 3bca826 - Feature: TorrentZip creation support (#1553)

Igir, and other open-source projects like it, are a labor of love. They wouldn't be nearly as meaningful without the community supporting them. Constructive feedback and general positivity will always be welcome. Be kind to others, and be kind to yourselves.
❤️ Christian

Don't miss a new igir release

NewReleases is sending notifications on new releases.