Rail Logistics Daemon (RLD)


UPS-first train logistics for megabases: tag stops as providers, requesters, and depots, set thresholds, and RLD dispatches trains for you. Event-driven with no per-tick polling, native chain deliveries, item quality and fluid support, multiple networks, a live dashboard, and one-command in-place LTN migration. Factorio 2.0: stable 1.0.x. Factorio 2.1: 2.0.x BETA — feedback welcome!

Content
5 hours ago
2.0 - 2.1
36
Trains
Owner:
ranger203
Source:
N/A
Homepage:
N/A
License:
MIT
Created:
5 days ago
Latest Version:
2.0.5 (5 hours ago)
Factorio version:
2.0 - 2.1
Downloaded by:
36 users

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:

  1. Disable the LTN dispatcher (LTN's own mod setting) and let the network go quiet.
  2. /convertLTN-to-RLD — dry run: reports every stop, role, and warning. No changes.
  3. /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.
  4. 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+