Files
factorio-clusterio/plugins/subspace_storage
bbassieandClaude Opus 5.5 11e067a933 Keep auto paused instances paused
Every RCON command makes an auto paused Factorio server run one tick, so
subspace_storage's 1 s inventory update and 5 s ping, plus a
statistics_exporter gather on every Prometheus scrape, kept a server with
nobody online running at about 1.3 ticks per second.

The instance now records the auto_pause server setting it was started
with and exposes autoPaused, true while that setting is on and no players
are online, along with an autoPauseChanged hook. subspace_storage skips
its timers while paused and sends a ping and inventory as soon as a player
joins. statistics_exporter gathers once after the game pauses and keeps
serving those values until it resumes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:40:30 +00:00
..
2026-10-28 23:40:30 +00:00
2026-10-28 23:40:30 +00:00

Clusterio Subspace Storage Plugin

Plugin for the Subspace Storage mod.

Installation

Run the following commands in the folder Clusterio is installed to:

npm install @clusterio/plugin-subspace_storage
npx clusteriocontroller plugin add @clusterio/plugin-subspace_storage

Substitute clusteriocontroller with clusteriohost or clusterioctl if this a dedicate host or ctl installation respectively.

Controller Configuration

subspace_storage.division_method

How to divide items between instances when there isn't enough in storage to give everyone what they ask for. One of simple, dole or neural_dole. With simple requests are served in full on a first come first served basis until the storage runs out. With dole a per item division factor is kept that halves the amount handed out each time a request can't be met and slowly recovers when requests succeed, which spreads the remaining items between instances at the cost of draining the last of an item slowly. neural_dole does the same with a small neural network estimating a fair share from the recent request history.

Defaults to simple.

subspace_storage.log_item_transfers

Log every item transfer in and out of the storage to the controller console at verbose level.

Defaults to false.

Instance Configuration

subspace_storage.log_item_transfers

Log every item transfer in and out of the storage to the host console at verbose level.

Defaults to false.

Development: inventory updates

The Node sender is in instance.ts; the Factorio receiver is UpdateInvData in the separate mod repository's src/control.lua. Check both ends when changing inventory synchronization.

Each entry is [name, count, quality] and replaces the absolute count for that name/quality pair; it is not an amount to add or subtract. With full=true, the receiver clears the previous inventory before applying entries, so an empty full snapshot clears all old state. Without full=true, entries update only the listed pairs; omitted pairs retain their previous values, and an explicit zero records a zero count.

A new or restarted instance needs a complete snapshot before incremental updates. Keep a complete inventory cache separate from any latest-delta cache: one delta is not enough to initialize a new receiver, and changes across several update windows must not overwrite each other before delivery. Verify empty snapshots, zero counts, multiple qualities, and consecutive deltas when changing this path.