Factorio 2.1 users — beta: RLD 2.0.5 is a beta release for Factorio 2.1. It is the identical, play-tested code of 1.0.4, ported after a full API audit against 2.1.12 — but it has not yet been play-tested on 2.1 itself. If anything misbehaves — especially a train leaving a held/quarantined state on its own — please report it on the discussion board.
Factorio 2.0 players automatically stay on the stable RLD 1.0.x line.
Rail Logistics Daemon (RLD)
Automatic train logistics that stays fast at megabase scale. Tag train stops as providers, requesters, or depots, set thresholds, and RLD dispatches trains to move cargo from where it's produced to where it's needed. Items, fluids, and item quality are all first-class; multiple independent networks via ID masks.
Why RLD
UPS above all. Every design decision defers to performance:
- Event-driven engine — no per-tick polling of trains, stops, or deliveries.
- Dirty-flagged scanning with an adaptive slice: per-tick cost stays flat as the base grows, and stops where nothing is happening are re-read less often.
- Sliced dispatch cycle — matching work is spread across the interval instead of landing on one tick. On a 2,000-stop base this cut the worst tick from 17.9ms to 11.5ms with no change in average cost.
- No pathfinding in the match loop — candidates rank by cheap straight-line distance; real pathfinding only builds a committed route.
- Native chain deliveries — a freed train goes straight to its next delivery instead of returning to a depot (unless low on fuel; default gate 30%). Higher train utilization = fewer trains = more UPS.
Features
- Full per-stop control: provide/request thresholds (stack-based, absolute, or fluid), priorities, train-length limits, locked slots, max trains.
- Classic depots with depot-only refueling; closest-free-depot return routing.
- RLD Manager — a tabbed dashboard (Stations, Depots, Trains, Deliveries, History, Alerts, Help). Costs nothing while closed; snapshots, never polls.
- Three-way dispatcher control — On, Pause (hold new orders, trains stay put), or Full Stop (trains return to depot). Live "deliveries in flight" and "trains still traveling" counts tell you when the network is quiet and safe to modify.
- Stops explain themselves — hover any train stop to see the netted amount on its wire, whether it's requesting or offering, and how far it is from the threshold that triggers a delivery. A miswired station is obvious at a glance.
- Alerts that clean up after themselves — starvation, no-path, duplicate names, delivery timeouts, and held trains. Alerts resolve when the problem is fixed, and a train held too long gets re-flagged so it isn't forgotten.
- Status lamps on every stop, event-driven.
Moving off LTN? Migrate in place
RLD includes a guided, one-command in-place migration for bases built on
LTN (Logistic Train Network) — made for megabases where rebuilding isn't an option:
- Disable the LTN dispatcher (LTN's own mod setting) and let the network go quiet.
/convertLTN-to-RLD— dry run: reports every stop, role, and warning. No changes./convertLTN-to-RLD run— swaps each LTN stop for the RLD equivalent at the same
position, preserving all circuit wiring, translating thresholds, priorities,
network IDs, and requester setpoints.- Verify (a full report lands in
script-output/rld-migration-report.txt), then
remove LTN.
The migration reads each stop's stored combinator configuration directly — thresholds
and roles survive even for stops that are idle mid-conversion. The dry run also flags
trains still carrying cargo and providers that would convert cleanly but have nothing
visible on their wire (and so would never dispatch).
Commands
| Command | What it does |
|---|---|
/convertLTN-to-RLD [run] [collapse] |
Dry-run / perform the LTN migration |
/rld-status [adopt-report] |
Engine state; adopt-report lists trains stuck outside the dispatch pool |
/rld-set <setting> <value> |
Change any RLD runtime setting from console/RCON (no args lists current values) |
/rld-alerts |
Print current alerts |
/rld-release [train_id] |
Release held/quarantined trains |
/rld-ups [N] |
Per-phase timing breakdown for the next N dispatch cycles |
/rld-check-duplicate-names |
List stops sharing a name within a network |
/rld-recycle-trains |
Re-arm automatic trains so they pick up RLD scheduling |
/rld-reenable-depots |
Re-enable depots RLD auto-disabled after a no-path |
/rld-fix-depot-roles |
Clear stray Enable Requester/Provider from depot combinators |
/rld-selftest, /rld-delivery-test |
Config and end-to-end delivery self-tests |
Notes
- Single-surface dispatch (deliveries don't cross surfaces).
- Factorio 2.0+