# RimSort: a mod manager for RimWorld that the community can build on

> RimSort is a free and open source mod manager for RimWorld, written in Python with a PySide6 interface, distributed as zipped builds for Windows, Linux, and macOS. The project is built around a strict Python pin, a justfile that runs its own linters in a container, and a translation workflow that treats localisation as a first-class contribution.

**RimSort/RimSort** — RimSort is an open source mod manager for the video game RimWorld. There is support for Linux, Mac, and Windows, built from the ground up to be a reliable, community-managed alternative to RimPy Mod Manager.

- Repository: https://github.com/RimSort/RimSort
- Website: https://rimsort.github.io/RimSort/
- Stars: 1,310 · Forks: 168
- Language: Python
- License: GPL-3.0
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/rimsort-rimsort

## Why a second mod manager exists

RimSort is a free and open source multi-platform mod manager for the video game RimWorld, and the description makes its purpose explicit: built from the ground up to be reliable and community managed, and presented as an alternative to RimPy Mod Manager.

That framing matters because mod managers for a single game are a category where reliability is the whole product. A mod manager that gets the load order wrong, or that misreads a mod's dependencies, corrupts a save, and a save in RimWorld can be a hundred hours of play. The reliability claim is therefore the entire pitch, and the open source claim is the mechanism, since a community can inspect and fix the thing that manages their saves.

The scope is deliberately narrow. It is a mod manager for one game, not a general launcher, and the repository reflects that with directories like app/, libs/, submodules/, and packaging/. The primary language is Python, the licence is GPL-3.0, the home page is rimsort.github.io/RimSort, and the last push to the repository was on 2026-10-15.

The release naming shows the two-channel model. There is v1.15.0 from 2026-10-04 and v1.14.1 from 2026-09-23 as the stable line, and an Edge Build marked as unstable from 2026-10-13. Shipping an unstable channel alongside the stable one is a common pattern for a desktop application with a large user base, because the user base cannot easily be asked to update every time something breaks.

## Installing, and the macOS wrinkle

Installation is a download, not a package manager step, and the platform differences are the thing to read carefully.

You visit the Releases page and download the latest zipped release for your operating system. For Windows and Linux, you unzip the download and run the RimSort executable inside the unzipped folder. For macOS, you have to grab the appropriate release for your CPU, with x86_64 for an Intel CPU Mac and ARM64 for an Apple M1 or M2 Mac, and you may need to follow special instructions to get around Gatekeeper errors.

The Gatekeeper note is the practical detail. A macOS application that is not notarised will be blocked on first launch, and the documented workaround involves allowing the application through the system settings. That is a common friction point for any cross-platform tool that is not signed, and the fact that the project links to a specific documentation page for it rather than leaving users to guess is a good sign.

The zipped, folder-based distribution is also a deliberate choice rather than an installer. There is no setup wizard, no registry entries, and no admin rights needed, which on Windows matters for a tool that many people run in a portable fashion alongside the game. The wiki is pointed to for more detailed instructions, and the README says explicitly to check the wiki for a solution before filing an issue, which tells you where the maintainers think most problems get answered.

## The dependency list, which is where the design shows

The pyproject.toml is worth reading because the pinned dependency set describes exactly what the application does.

The user interface is pyside6 at 6.11.2, which is the Qt binding for Python. The web scraping layer is aiohttp at 3.14.5 with beautifulsoup4 at 4.15.0 and lxml at 6.1.3, which is what you need to read mod pages and workshop listings. The version control and repository layer is pygit2 at 1.20.1 and pygithub at 2.10.0, so the app can work with git checkouts of mods and with GitHub-hosted content. The game integration is steam at 1.4.4 plus steamfiles, which is a git dependency on a RimSort fork of that project.

The dependency management library is the giveaway about what this tool actually is. msgspec at 0.22.0, with networkx at 3.7 and toposort at 1.10, are the components of a dependency resolver. A mod manager for a game with thousands of mods, each declaring its own dependencies, needs to compute a load order, and networkx gives you the graph and toposort gives you the ordering. That is the core of the product.

The rest of the list supports the rest of the job. rapidfuzz at 3.14.3 and natsort at 8.4.0 are for fuzzy and natural sorting of mod names, which is what a user sees when the list is long. sqlalchemy at 2.1.1 is the database, and platformdirs at 4.13.0, psutil at 7.2.2, and watchdog at 6.0.0 handle paths, process inspection, and file watching. click at 8.5.0 is the CLI framework, loguru at 0.7.3 is the logging, and zstandard at 0.25.0 is for compressed mod archives.

The one line that constrains everything is requires-python = "==3.14.*". That is an exact pin on a minor version, not a floor, and it is a strong statement about the project's priorities. It means a user on Python 3.13 cannot run it from source at all, and it means the project can use the newest language features and newest library versions without maintaining compatibility shims.

## The justfile, and running the same checks CI runs

The project uses just rather than make, and the file is a tour of its own quality process.

The default target just lists all recipes, which is the just convention for a self-documenting task runner. The run recipe is uv run python -m app, the test recipe is uv run pytest with the options --doctest-modules and --no-qt-log, and there are test-verbose and test-coverage variants that add coverage reports in XML, HTML, and terminal form with the missing lines shown.

The doctest-modules flag is worth a second look. It means the docstrings in the code are executed as tests, which for a project with a large library layer in libs/ is a cheap way to keep the documentation honest.

The linting is where the project shows its care. There is a superlinter image variable pinned to ghcr.io/super-linter/super-linter:slim-v9.0.0, with a comment noting it matches the CI version, and the recipe list for it names the linters that run inside: ruff, ruff-format, mypy, jscpd, bash and shellcheck, shfmt, and json. Running the same container locally that CI runs is a specific choice to avoid the usual drift where a developer's machine passes and CI fails, and the copy and paste detection in that list is notable, since duplicated code in a mod manager is often where subtle ordering bugs hide.

The file also handles the Windows difference explicitly, with set windows-shell pointing at powershell.exe and a comment that multi-line recipes use unix and windows guards with shebang overrides where needed. That is a project that has to build and test on three operating systems and has had to solve the shell difference rather than pretend it does not exist.

Elsewhere in the repository there is check_deferred_imports.py, a script that checks something the project considers worth enforcing, and translation_helper.py, which supports the localisation workflow.

## Localisation, packaging, and the build pipeline

Two parts of the repository are worth looking at because they show the project's maturity.

The first is translation. The README asks interested contributors to check the Translation Guidelines, and there is a translation_helper.py script and a locales/ directory, with googletrans in the dev dependency group. The .devcontainer/ and .python-version files sit alongside. A mod manager used by a global community needs localisation, and the tooling for it is treated as part of the product rather than an afterthought. The dev dependency on googletrans also suggests a machine translation path for new locales, with human review on top, which is how a project of this size keeps translations current without a large translation team.

The second is packaging. There is a rimsort.nuitka-package.config.yml, and nuitka at 4.3 is in a separate build dependency group, which is the giveaway. Nuitka compiles Python to a native binary rather than shipping an interpreter and a zip of source, and that is exactly what you want for a desktop application distributed as a zipped folder per platform. The version in the project metadata is deliberately fake, with the comment that the version is set in a version.xml file and a TODO to switch to tracking the version dynamically, and the release script is distribute.py.

There are also update.bat and update.sh at the top level, the pair of updater scripts you would expect for a cross-platform application, plus setup_steam_recovery_script.js and setup_web_channel_script.js, which handle the two ways a user can install the game, through Steam and through the web channel.

The themes/ directory holds the interface themes, and the .githooks/ directory alongside .jscpd.json and the two markdownlint configurations shows a repository with a defined set of contribution gates: ruff for Python, markdownlint for the docs, jscpd for duplication, and pre-commit via .pre-commit-config.yaml in the dev group.

## Conclusion

Adopt RimSort if you play RimWorld across platforms and want a mod manager that is open source and community managed rather than a closed application. Do not adopt it if you need to run it on a Python version other than 3.14, because the project pins requires-python to exactly 3.14. Verify first that the game and mod list format it expects match your current RimWorld install before you point it at your save.

## FAQ

### What is RimSort and what is it an alternative to?

RimSort is a free and open source multi-platform mod manager for RimWorld, built from the ground up to be reliable and community managed, and it is presented as an alternative to RimPy Mod Manager. It supports Linux, Mac, and Windows.

### How do I install RimSort?

Download the latest zipped release for your operating system from the Releases page. On Windows and Linux, unzip it and run the RimSort executable inside the folder. On macOS, pick the x86_64 build for an Intel Mac or ARM64 for an Apple M1 or M2, and you may need to follow the special instructions to get around Gatekeeper errors.

### Which Python version does RimSort require?

Exactly Python 3.14, with requires-python set to ==3.14.* in the project metadata. It is an exact minor pin rather than a floor, so the project can use recent language features without compatibility shims, and a source build on an older Python is not possible.

### How does RimSort compute mod load order?

The dependency set points to how: networkx provides the dependency graph, toposort provides the ordering, and msgspec handles the data. The mod pages themselves are read with aiohttp, beautifulsoup4, and lxml, and the project also uses pygit2 and pygithub for git checkouts and GitHub content.

### How do I run the RimSort tests and linters?

Through the justfile. just test runs uv run pytest with doctest modules enabled, just test-coverage adds coverage reports, and the lint recipe runs super-linter in the same container image that CI uses, covering ruff, ruff-format, mypy, jscpd, shellcheck, shfmt, and json.

## Sources

- [License: GPL-3.0](https://github.com/RimSort/RimSort/blob/main/LICENSE)
- [Project website](https://rimsort.github.io/RimSort/)
- [README](https://github.com/RimSort/RimSort/blob/main/README.md)
- [Releases](https://github.com/RimSort/RimSort/releases)
- [RimSort/RimSort on GitHub](https://github.com/RimSort/RimSort)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/rimsort-rimsort
