Files
factorio-clusterio/plugins/subspace_storage
bbassieandClaude Opus 5.5 3227179613 Build the web interface and plugins with Vite
Replace webpack and Module Federation with Vite 8. The controller build
emits one entry per shared module (lib, web_ui, typebox, antd, react,
react-dom, react-router) and lists them in manifest.json. The controller
turns that into an import map in index.html, and plugins are built as
ES modules that import the shared modules by name and are loaded with
import().

The shared Vite setup lives in @clusterio/web_ui/vite.mjs. Plugins use
clusterioPlugin(), which exposes index, package.json and web/index under
the same keys the webpack template used. The --dev and --dev-plugin
flags now run the Vite dev server in middleware mode with hot module
replacement.

Browser polyfills move from web_ui to lib, which is the code that needs
them, and lib sets the process and Buffer globals itself.

Refs #1127

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:52:10 +00:00
..
2026-09-11 22:43:57 +02: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.