Valheim
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
Downloads
117
Size
16KB
ADDatHost Valheim hosting
30% off
Edited · Nov 2, 2026

World Snapshot

Save a copy of the parts of a multiplayer world you have actually visited, as a new local world, without needing the server's files.

World Snapshot is a client-side BepInEx plugin. While you play on a dedicated server or a friend's hosted game, it keeps track of which zones the server has fully streamed to your game. When you run the snapshot command it writes those zones, together with the world seed, world modifiers and boss progression, as a brand new world in your worlds_local folder. The game's own save code does the writing, so the result is a normal Valheim world you can host or play in single player.

Zones you never visited are left ungenerated. When you load the snapshot they are created fresh from the seed, so the map still looks like the original world, it just won't have anyone's builds in places you never went.

Nothing is installed on the server. The server cannot tell the plugin is running.

Please ask the server owner before copying a world you don't own. Their builds are their work.


Requirements

  • Valheim (built and tested against version 1.0.21, world save format 42)
  • BepInExPack Valheim
  • The in-game console. If F5 does nothing, add -console to the game's launch parameters (Steam: right-click Valheim > Properties > Launch Options, mod managers have a launch parameter setting too).

Install on your own game only. Other players and the server do not need it.


Quick start

  1. Join the server.
  2. Walk, sail or ride through every area you want to keep. A zone counts as captured once you have been within sync range of it for 5 seconds. Standing in the middle of a base for half a minute captures the whole base.
  3. Press F5 and type snapstatus at any time to see how many zones and objects you have.
  4. When you're done, type snapshot. The new world is saved as <worldname>-snapshot.
  5. Leave the server. The world now appears in Start Game > Select World, and a dedicated server can host it with -world "<worldname>-snapshot".

Capture and save in the same session. Your game forgets everything it received from the server the moment you disconnect.


Console commands

Command What it does
snapshot Save a snapshot named <worldname>-snapshot. If that exists already, -2, -3 and so on are appended. Existing worlds are never overwritten.
snapshot MyName Save with a custom name. Refuses if a world with that name exists.
snapstatus Show the server world's name and seed, how many zones are captured or pending, how many objects you hold, and the current sync range.
snapmark Mark every zone currently in sync range as captured right now, skipping the wait. Useful for a quick grab, but see "Partially loaded zones" below.
snapreset Forget all captured zones and start over.
snapdwell Show the current dwell time and the allowed range.
snapdwell <seconds> Set the dwell time. Any number from 0 to 600 seconds, decimals allowed (for example snapdwell 5 or snapdwell 2.5). Saved to the config file, so it sticks between sessions.

None of these are cheat commands, so devcommands is not required.


Configuration

The config file is BepInEx/config/com.iterrorbilly.worldsnapshot.cfg.

Setting Default Meaning
DwellSeconds 5 Seconds you must stay in sync range of a zone before it counts as captured. Raise it for very dense bases on a slow connection. Lower it if you are mostly sailing past things you only need roughly. Accepts 0 to 600. Can also be changed in-game with snapdwell <seconds>.

What ends up in the snapshot

Inside captured zones

  • Every building piece, with its damage and support state
  • Chests, with their contents
  • Item stands, armor stands, signs, wards, beds, portals
  • Smelters, kilns, fermenters, beehives, cooking stations, with whatever is in them
  • Terrain modifications: flattening, raising, paths, cultivated soil
  • Planted crops and trees, tamed and wild creatures, dropped items, carts and ships
  • Dungeon interiors and other location contents, if you entered or stood near them

World-wide

  • The seed, so terrain and biomes match
  • World modifiers (combat difficulty, raids, portal rules, etc.)
  • Boss kills and other progression keys
  • The world ID. Because it matches the original, your character's explored map and pins carry over when you load the snapshot.

Not included

  • Anything in zones you never loaded. Those regenerate from the seed with default spawns.
  • Other players' characters, inventories and skills. Those live in player files, not the world.
  • Admin, ban and permitted lists. Copy those from the server yourself if you need them.

Known limitations

Partially loaded zones. The server streams objects to you over a few seconds. If you mark a zone before that finishes, the snapshot will be missing whatever hadn't arrived. The dwell timer is there to avoid this. Prefer letting the timer do its job over using snapmark.

Stale objects. You hold whatever version of an object you last received. If a friend empties a chest while you are far away, your copy still shows it full. Revisit areas shortly before taking the snapshot if freshness matters.

Zones around the edge. The plugin only keeps zones the server sent in full. Objects you could see in the distance but never walked up to are dropped on purpose, so they don't get doubled when the game regenerates that zone later.

Location markers. Boss altar and trader locations are placed again from the seed when the snapshot first loads. For worlds created on a similar game version they land in the same spots as the original.

Memory. Your game keeps every object it has ever received during the session. Long capture runs across a huge world will use more RAM than a normal play session. This is the game's normal behavior, the plugin just makes use of it.


Troubleshooting

snapstatus says "Not in a world." You are on the main menu or still loading. Try again once your character is standing in the world.

"You are hosting this world yourself." The world is already yours. It is in worlds_local already and nothing needs copying.

"No zones captured yet." You haven't stood still long enough anywhere. Wait a few seconds or run snapmark.

The command is unknown. The plugin did not load. Check BepInEx/LogOutput.log for a line containing World Snapshot. If the line says the game API changed, the plugin needs an update for your game version.

"Snapshot FAILED" or missing files. Look in Player.log (in %USERPROFILE%\AppData\LocalLow\IronGate\Valheim) for Error saving world and include the lines around it, plus your game version, when reporting the problem in the mod page comments.

I don't see it in my mod manager's list. If you copied the DLL in by hand, mod managers won't list it. Install through the mod manager instead so you can toggle it on and off.


How it works, for the curious

Valheim sends every networked object (ZDO) inside your sync range to your client, and your client keeps them until you disconnect. The plugin:

  1. Tracks which zones have been in the near sync range long enough, using the server's own simulation distance setting.
  2. On snapshot, temporarily swaps in a new World record with the server's seed and ID, marks the captured zones as already generated, and calls the game's regular world save routine.
  3. Filters the save data so only objects inside captured zones are written. Everything else is dropped, which prevents duplicate trees and rocks when the hosting server generates those zones later.

Because the game's own serializer is used, the output is always in the save format of the game version you are running.


Building from source

The project is a single C# file plus a project file. It compiles against the DLLs in your own game install, so no game files are redistributed.

  1. Install the .NET SDK 8 or newer.
  2. Edit the ValheimDir and BepInExDir paths at the top of WorldSnapshot.csproj.
  3. Run dotnet build -c Release. The Thunderstore-ready zip appears in dist/.

Changelog

See CHANGELOG.md.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.