Load Order
When more than one asset pack is enabled, Railroader loads them in a consistent order each session, so a pack can rely on the packs it builds on being loaded first. This page explains how that order is decided and how to influence it with the load hints in Info.json.
How the order is decided
Section titled “How the order is decided”Railroader builds a graph of every enabled pack and the ordering constraints between them, then loads them in an order that satisfies every constraint. A pack loads after:
- every pack it requires (
dependencies.required), - every optional dependency that happens to be installed (
dependencies.optional), - every pack named in its
load.afterthat is installed,
and before every pack named in its load.before that is installed.
Ties among packs left unordered by all of the above are broken by load.priority (lower loads first; default 0), then by identifier. The result is deterministic: the same set of packs always loads in the same order.
Dependencies vs. load-order hints
Section titled “Dependencies vs. load-order hints”These are two different things, and choosing the right one matters:
- A dependency (
dependencies) says the other pack must be present (required), or checks its version — and, as a side effect, loads your pack after it. A missingrequiredpack disables yours. - A load-order hint (
load.after/load.before) only affects order. A pack named in a hint that isn’t installed is ignored, and your pack still loads.
Use a hint when you want to override or extend another mod if the player has it, without forcing them to install it. Use a required dependency when your mod genuinely can’t work without the other.
rr/game and rr/shared
Section titled “rr/game and rr/shared”Every pack is automatically loaded after rr/game — the base game — which itself loads after rr/shared, the shared content pack. So rr/shared is always loaded before any mod; you never need to list it just for ordering.
Even though ordering doesn’t require it, we recommend every mod declare an rr/game version requirement in dependencies.required, for example "rr/game >=0.6.0". That way your mod won’t load against a game version it wasn’t built and tested for, instead of loading and misbehaving in ways that are hard to diagnose.
When a hint can’t be honored
Section titled “When a hint can’t be honored”Load-order hints are advisory. If two packs’ hints contradict each other — for example, each asks to load after the other — Railroader can’t satisfy both, so it drops the conflicting hint (and logs a notice) rather than refusing to load. load.priority never overrides a dependency or a hint; it only breaks ties between packs that are otherwise unordered.
A genuine dependency cycle — two packs that require each other — is an error, and the packs involved are disabled.
Example
Section titled “Example”A compatibility patch that should load after a visuals mod when it’s present, but works fine without it:
{ "identifier": "myhandle/visuals-patch", "version": "1.0.0", "name": "Visuals Compatibility Patch", "load": { "after": ["otherauthor/enhanced-visuals"] }}Because enhanced-visuals is only named in load.after — not in dependencies — this patch still loads (and simply has nothing to override) for a player who doesn’t have the visuals mod.
© 2026 Giraffe Lab LLC. All rights reserved.