
RunicStorage
Multi-access chests with shared server inventory authority, SmartSort, chest rules, Quick Stack, restock, search, and protected inventory trash.Runic Storage 2.1.3
Multiple players can open and use a placed chest at the same time. All supported chest transfers, nearby crafting withdrawals, production changes, and chest rules use one server inventory authority. Opening a chest no longer takes inventory ownership away from another player.
Quick Stack reports moved and remaining item counts, or explains why nothing could move. It uses existing matching contents and configured Quick Stack Rules; a SmartSort label alone does not create a routing rule. Full matching chests do not make unrelated empty chests eligible.
Open shared chests display received inventory changes on the next frame. Manual actions get priority over queued background production, and a temporary busy response retries promptly. Transactions still require server confirmation, but no longer wait for per-action character checkpoints or forced server disk synchronization. Network, processing, and ordinary file-write latency can remain.
SmartSort respects optional Runic Production links: input chests receive only materials accepted by their linked workstations. Output and replenishment chests are excluded completely. A protected role takes precedence over an input role. Input chest labels and existing contents are preserved; explicit Quick Stack Rules still apply.
Controls
| Action | Default control |
|---|---|
| SmartSort preview / confirm within 30 seconds | Left Alt + O, then repeat |
| Quick Stack one carried stack | Ctrl + Shift + left-click |
| Quick Stack All | Left Alt + Q |
| Restock | Left Alt + R |
| Search | Left Alt + F |
| Sort open chest | Left Alt + S |
| Store All | Left Alt + A |
| Consolidate carried stacks | Left Alt + C |
| Select carried items for trash | Shift + Alt + right-click |
Normal chest controls support deposits, withdrawals, splitting, merges, swaps, Take All, and Stack All. Conflicting requests are checked against the current stack; the second request cannot consume the same last item twice. The lid stays open while any authorized viewer remains.
SmartSort previews are read-only. Confirmation rechecks contents and rules before committing the whole plan. Configured chest rules, reserves, protected slots, and capacity still constrain the plan.
Open Quick Stack Rules to configure accepted/remembered items, categories, exclusions, priority, custom groups, and labels. Labels retain side placement, color, bend/wrap, and emoji options. Search and hover do not remove items.
Inventory Trash keeps its confirmation dialog and protections for equipped items, quest items, hotbar cells, and RunicInventory locks. Disabling Storage leaves normal chest interactions available, including newly placed chests. Runic only routes the chest view it opened; native and third-party chest views retain their normal controls.
Settings are in BepInEx/config/chazman.RunicStorage.cfg. Remove the separate SmartSort test plugin before using Runic Storage. For manual installation, keep Translations beside the DLL.
Normal Runic inventory actions, crafting, and building do not force a character save or disk-sync checkpoint. Ordinary game saves, autosaves, and their indicators keep their normal behavior. Pending receipts remain in memory and are included in ordinary character saves. A crash before the next character save can lose or duplicate recent transfers; an OS crash or power loss can also lose or reorder recent buffered server writes. Server confirmation, permissions, inventory revisions, and live request deduplication still apply.
Native chest compatibility
Ordinary chest transfers and mods using Valheim's Container inventory callbacks remain visible immediately. Changes to an enrolled chest are merged into its latest contents rather than overwritten by an older Runic snapshot. Deposits retain item metadata and expanded inventory rows. Unenrolled chests keep native saving and opening behavior.
Runic's coordinated operations still share current quantities. Unknown mods can perform their own transfers outside that coordination; simultaneous withdrawals can follow native race behavior. These transfers do not add a character-save checkpoint or wait for a disk flush. Custom inventory implementations that bypass Container callbacks and ZDO inventory replication need their own adapter. Initial enrollment asks a connected owner for fresh contents for at most 250 ms, then uses the native replicated snapshot. Unloaded owners and ownership changes do not keep enrollment pending indefinitely. Once enrolled, the existing ledger remains authoritative. No per-action character save is added.
Quick Stack and Restock can use ready chests while other nearby chests enroll. An unavailable snapshot returns offered items; try again once that chest is available. Optional quick-slot protection recognizes saved Runic role/quiver rows and the EquipmentAndQuickSlots API without requiring those mods.
Dismantling removes the native world object immediately and releases its contents as ground items. Removing an old recovery chest is terminal: it releases its contents without making another chest or refunding construction materials. Large inventories and drawers recover in bounded batches using ordinary item stack limits, preserving item data. An unfinished recovery resumes after a server restart. No per-action character save or forced world save is added.
Multiplayer and upgrading
Each Runic mod works independently with BepInEx. Runic Storage is not required by Crafting or Production, and no other Runic mod is required. Install the same chosen modules and builds on the server and participating clients, then restart. All required synchronization code is included in each DLL; installing several modules shares one service.
Back up the world, characters, configurations, and the server's RunicOperations/<world UID> folder together. The ledger is authoritative after enrollment. Do not delete it, restore only the world, or downgrade an enrolled world without restoring the matching backup. Existing native chest contents and production links are imported on first use. Chest ledger schemas 2-7 are read; schema 7 is written. Older 2.0.x DLLs cannot read schema 7. Restore the complete pre-update world, ledger, and character backup together if rolling back.
Supported storage includes placed, static chests using Valheim's standard Container component and the Makail ItemDrawers adapter. Drawer assignments and large quantities are preserved; configured prefab allowlists still apply. SmartSort does not reorganize drawers. Carts, ships, graves and other custom inventory implementations retain their own interactions.
Wards, private chests, range, item identity, capacity, and configured item protections still apply. Multiple viewers do not block transfers. If a player runs out of inventory space, an accepted delivery remains pending in the current session until space is available. Pending transfers included in an ordinary character save can resume in the original world; unsaved transfers have no crash-recovery guarantee. Do not remove a saved pending character receipt.
The server's ranges and access policies govern accepted operations. Keep participating clients' corresponding settings aligned so previews match server decisions. Version 2.1.2 reads character receipt versions 2, 3, and 4 and continues writing version 4 with original inventory slots. Returned offered items use those slots when available; occupied slots are preserved and normal available space is used instead. Versions before 2.0.7 cannot read version 4 receipts, including completed receipts. Restore matching character, world, and operation-ledger backups together when rolling back; completing a transfer alone does not make its receipt readable by older versions.
Language and support
Keep the Translations folder beside the DLL. Missing translations fall back to English.
Runic Mods Discord · Support My Work Emoji artwork: Twemoji, copyright Twitter, Inc. and other contributors, CC BY 4.0, from jdecked/twemoji. The graphics license is embedded in the DLL.

