Skip to content
Rimmerge-ProjectPublic

About

RimWorld mod load-order sorter, conflict ledger, and merge-patch generator for Windows, with a desktop app and CLI.

Topics

Resources

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

Rimmerge logo

Rimmerge

CI Latest release License: MIT OR Apache-2.0 Platform: Windows Buy Me a Coffee

Rimmerge sorts a RimWorld mod list into a conflict-aware load order and tracks every conflict it finds — dropped dependency edges, def overrides, patch collisions, duplicate assemblies, incompatible pairs, and more — in a resolution ledger you work through once, whose decisions persist across re-scans. Where two mods genuinely disagree, it can generate a merge patch that keeps both mods' changes instead of picking a winner. It ships as a CLI and a Tauri desktop app, both thin shells over the same engine.

Dashboard with the Suggested order selected: the Get started steps, and tiles for mods that move and findings needing input in each order

The dashboard on a synthetic mod list: the recommended rules imported, Suggested selected, Apply is the current step, and the tiles compare it with Current.

Mods page: selecting inactive mods to activate

Install

Rimmerge builds and ships for Windows only. See docs/install.md for how to get it (portable zip release, or build from source) and how it finds your RimWorld install, Steam Workshop folder, and ModsConfig.xml.

Quickstart

Four steps, CLI shown here — the desktop app does the same thing with buttons instead of flags:

# 1. Scan: read-only, writes a report into a profile directory.
rimmerge load --profile-dir <profile>

# 2. Review the inbox: one finding per thing worth a decision.
rimmerge ledger --report <profile>/report.json --status needs-input

# 3. Preview a suggested order from the report alone, without your
#    decisions or rules (a quick look, not what `apply` will use).
rimmerge sort --report <profile>/report.json

# 4. Apply: re-derives the order from the profile's real rules and
#    decisions (not the bare preview above) and is the one command
#    that can write ModsConfig.xml. It writes the suggested order by
#    default and lists any hard problems in it first.
rimmerge apply --profile-dir <profile> --dry-run   # preview only
rimmerge apply --profile-dir <profile>              # writes it

Full walkthrough, including the desktop app's own pages: docs/quickstart.md.

Architecture

apps/cli, apps/desktop/src-tauri
        |
    rim-session
        |
    rim-merge
        |
   rim-resolve
        |
rim-analyzer::domain

rim-io implements rim-session's ports — every real filesystem, ModsConfig.xml, RimSort-import, and network adapter lives there. rim-resolve, rim-merge, and rim-analyzer::extract do no IO at all; apps/* are composition roots with no business logic of their own. Full breakdown, including where new code belongs: docs/architecture.md.

Safety guarantees

  • Read-only by default. Scanning, sorting, building the ledger, and verify never write anything.
  • Every write is something you explicitly asked for. apply, mods activate/mods deactivate and order import write ModsConfig.xml. apply --write-merge-mod, and patch export/assign export with --install, additionally write a generated mod folder under <your RimWorld install>/Mods and add its package id to ModsConfig.xml. order export --out writes the one .rml file you name (it refuses to replace an existing file without --overwrite), and the desktop app's Export menu writes the one .rml file you choose. Nothing writes anywhere else.
  • A backup first, every time. Every ModsConfig.xml write takes a timestamped backup before it touches the file; a merge-mod write keeps the previous generation's own folder as a one-deep backup too.
  • Nothing writes while RimWorld looks like it's running, unless you pass --force (CLI) or confirm past the same warning (desktop) — the game overwrites ModsConfig.xml on its own exit, so a concurrent write risks being lost or corrupting the running copy.
  • Two GitHub hosts, on by default and explained on first launch, one switch to turn off. The only outbound connections this tool ever makes are to raw.githubusercontent.com (the rule databases) and api.github.com (a release-version check) — the desktop app checks both automatically (the version check at each launch, the rules refresh at most once a day), but never before its first-run notice is answered, and never before you can turn it off; the large Steam Workshop database is on by default but never fetched automatically, only by a manual Refresh click, rimmerge db refresh, the recommended-databases notice's "Turn on and download" button, or the Dashboard's "Get the recommended rules" step; the CLI never contacts either on its own. One switch skips every request entirely (no URL built, no socket opened), automatic or manual. See docs/privacy-and-network.md.
  • Deterministic output. The same install and the same rules always produce the same report and the same suggested order — no hidden state, no iteration-order dependence.

Documentation

Full index, including reference pages not listed above: docs/README.md.

Contributing

See CONTRIBUTING.md for the build, the gates, the layering rule, and where a mod-specific finding belongs instead of this repo.

Support

Rimmerge is free and open source. If it saves you time, you can support its development on Buy Me a Coffee. Bug reports, rule contributions, and translation fixes help just as much.

Security

See SECURITY.md to report a vulnerability privately, and for the network/filesystem guarantees stated formally.

License

Licensed under either of Apache-2.0 or MIT at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion shall be dual licensed as above, without additional terms or conditions.

About

RimWorld mod load-order sorter, conflict ledger, and merge-patch generator for Windows, with a desktop app and CLI.

Topics

Resources

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages