Save file ZIP structure¶
Top-level file layout of a Stationeers save ZIP. The archive is a standard ZIP; each entry is plaintext XML, binary voxel data, or a PNG. Sizes in the example column are from an observed mid-sized save and are indicative, not exact.
File table¶
| File | Size (example) | Content |
|---|---|---|
world_meta.xml |
~700 B | Save metadata: world name, version, stats |
world.xml |
~2.6 MB | ALL game data: things, atmospheres, networks, players |
terrain.dat |
~184 KB | Terrain/voxel data (binary) |
preview.png |
~125 KB | Save thumbnail |
screenshot.png |
~139 KB | Screenshot |
The five names are code constants (SaveLoadConstants, 0.2.6403.27689 decompile lines 265202-265210): TerrainFileName = "terrain.dat", MetaFileName = "world_meta.xml", WorldFileName = "world.xml", PreviewFileName = "preview.png", ScreenshotFileName = "screenshot.png". The writer (SaveHelper.Save, line 264972) emits them in the order world_meta.xml, world.xml, terrain.dat, preview.png, screenshot.png, and skips the two PNGs entirely in batch mode (if (!GameManager.IsBatchMode), line 265020), so a save written BY a dedicated server has only the first three members. A save that carries the PNGs was last written by a client.
Mod sidecar entries¶
A save ZIP can carry additional entries beyond the five standard members: mods append their own files at save time. Observed entry listing of a real modded save (DedicatedServer/data/saves/Luna/Luna.save, 2026-07-02, sizes in bytes):
698 world_meta.xml
61514025 world.xml
456908 terrain.dat
149788 preview.png
177904 screenshot.png
779 equipmentplus-active-slots.xml
551 equipmentplus-beam.xml
3667 pwrxmplus-autoaim.xml
4421 pwrgridplus-passthrough.xml
486 pwrgridplus-priority.xml
The last five are per-mod sidecars written by this repository's mods: equipmentplus-active-slots.xml and equipmentplus-beam.xml by EquipmentPlus (ActiveSlotSideCar.SideCarEntryName, HelmetBeamSideCar.SideCarEntryName), pwrxmplus-autoaim.xml by PowerTransmitterPlus (AutoAimSideCar.SideCarEntryName), and pwrgridplus-passthrough.xml / pwrgridplus-priority.xml by PowerGridPlus (PassthroughSideCar.SideCarEntryName, PrioritySideCar.SideCarEntryName). The mechanism, and why it works, is documented in ../GameSystems/SaveZipExtension.md: the game's LOAD path looks up known entry names and silently ignores everything else, while the game's SAVE path rebuilds the ZIP from scratch with only the known members, so a mod must re-append its sidecar on every save (Harmony patch on the private SaveHelper.Save worker).
Consequences for offline save tooling:
- Any tool that repacks a save ZIP MUST copy through unknown entries verbatim (name, order, bytes), or it silently strips mod data. A repack that hardcodes the five standard members destroys the sidecars without any error; the mods then see missing state on next load. This bit in practice on 2026-07-02:
tools/save-edit/stationeers_save.pyrepack()writes only the five standard members, so the save-surgery session used a one-off script that copies every entry through and edits only world.xml, precisely to keep the five sidecars alive. - The sidecar names are chosen by each mod; there is no registry and no namespace rule beyond collision avoidance. Treat "entries I do not recognize" as load-bearing mod data, never as junk.
Verification history¶
- 2026-04-20: page created from the Research migration. Source: F0220 (save file ZIP structure).
- 2026-07-02: re-confirmed the file table against the 0.2.6403.27689 decompile (
SaveLoadConstantsnames,SaveHelper.Savewrite order, batch-mode PNG skip) and added the "Mod sidecar entries" section from the observed Luna.save entry listing during the same day's save-surgery session. Mechanism cross-referenced to../GameSystems/SaveZipExtension.mdrather than duplicated.
Open questions¶
None at creation.