Web Analytics Made Easy - Statcounter

Tools / Palworld

Palworld Save Converter co-op ↔ dedicated server

Move a local co-op world to a dedicated server - or a server world back to co-op - without anyone losing their character. The converter rebinds the host character, pals, palbox, guild, built structures, chest locks and door-lock whitelists, entirely in your browser. It reads Palworld 1.0's Oodle format and Xbox Game Pass containers, and it computes the new server UID from the host's SteamID64 - no "join the server first and make a throwaway character" step.

Your save never leaves your browser. Reading, decompressing, patching and re-zipping all happen in this tab (File API + WebAssembly) - there is no upload endpoint on this page. Verify with the network tab open. Your original files are never modified; you download a converted copy.

Your save never leaves your browser In-place patch - never re-serialized Only cells equal to the old UID change

1. Point it at the save

Steam co-op saves live in %LocalAppData%\Pal\Saved\SaveGames\<your-steam-id>\<world-id>\. Game Pass: pick the wgs folder under %LocalAppData%\Packages\PocketpairInc.Palworld_...\SystemAppData\. Server worlds: Pal/Saved/SaveGames/0/<world-id>/. Pick the world folder or any parent - the converter finds the world inside. Close Palworld / stop the server first.

Why the host loses their character - and what actually gets rewritten

Local co-op always stores the host under the fixed UID 00000000000000000000000000000001. A dedicated server instead derives every player's UID from their SteamID64, so after copying the world over, the server cannot match the host to that slot and offers them a fresh spawn. The character isn't gone - roughly two hundred references across the save just point at the wrong ID.

This converter rebinds all of them: the character record in CharacterSaveParameterMap, the player file itself (renamed to the new UID), pal ownership (current owner, ownership history, nickname authorship), palbox container slots, the guild (member list, admin, character handles, name authorship), the dimensional pal storage sidecar (_dps.sav), every built structure's builder ID, chest / cooler / booth privacy locks, signboards, dropped-death-bag ownership, and door-lock password whitelists. Each 16-byte cell is located structurally and only patched when it exactly equals the old UID - the save is never re-serialized, so everything else is untouched by construction.

The layouts come from the open-source Palworld save-tools ecosystem: cheahjs/palworld-save-tools, xNul/palworld-host-save-fix and PalworldSaveTools (all MIT), with Oodle decompression by ooz-wasm (GPL-3.0, source at that link). Thank you - this tool exists because that research is public.

No "join the server first" step

The classic host-save fix requires starting the server, joining once to generate a throwaway character, and reading the new UID off that file. But the server's UID derivation is deterministic: CityHash64 of the SteamID64 rendered as UTF-16, folded to 32 bits (low32 + high32 × 23), padded with zeros. Your SteamID64 is literally the folder name your co-op save sits in (SaveGames\<SteamID64>\<world>), so the converter fills it in automatically and computes the exact UID the server will assign - verified against live Palworld 1.0 dedicated servers. If your server runs without Steam authentication (-nosteam), tick the NoSteam box and the alternate derivation is used.

What a conversion produces

your-world-server-ready.zip
├─ Level.sav              ← all UID references rebound, recompressed
├─ LevelMeta.sav          ← untouched
├─ Players/
│  └─ <NEW-UID>.sav       ← the host's character, renamed + rebound
│     (everyone else's files pass through unchanged)
└─ MIGRATION-README.txt   ← exact install steps for your server

Upload the zip's contents so Level.sav lands in Pal/Saved/SaveGames/0/<server-world-id>/. Before uploading anything, it's worth running the folder through the Save Migration Doctor - it checks the structural traps (nesting, truncated files, backup folders) that this converter assumes are already right.

Manual route (no JavaScript, open-source tools)

  1. Copy the world folder with the game closed / server stopped.
  2. Start the dedicated server, join once with the host's account, stop the server - this creates Players/<new-uid>.sav.
  3. Run palworld-host-save-fix (or PalworldSaveTools' "Fix Host Save") with the old UID 00000000000000000000000000000001 and the new UID from step 2.
  4. Replace the server's world with the fixed copy. Keep a backup of everything.

FAQ

Is my save really not uploaded?

Really. Decompression (including 1.0's Oodle format via WebAssembly), the rewrite, and the zip download are all local. There is no conversion endpoint on this page - the network tab shows zero requests carrying your save.

Which save formats are supported?

PlM (Oodle - Palworld 0.6 through 1.0), PlZ single and double zlib (pre-0.6), CNK-wrapped Xbox exports, and Game Pass wgs containers as input. Output is PlZ, which every Palworld version reads and transparently upgrades on its next save.

My friends played in the co-op world too. Do their characters survive?

Yes, untouched. Co-op guests already have real Steam-derived UIDs - identical to what the server assigns them - so only the host needs rebinding. The converter passes their files through as-is.

Do door locks and chest locks really carry over?

Yes. Password-lock whitelists store each allowed player's UID (player_infos in the lock module), and chests/coolers/booths carry a private_lock_player_uid. Both are rebound - this is the part most converters skip, and it's why doors sometimes "forget" the host after a manual migration.

What about the Dimensional Pal Storage (global palbox)?

The <uid>_dps.sav sidecar is renamed with the character and every ownership reference inside is rebound.

Xbox / Game Pass?

Supported as input: pick the wgs folder and the converter reassembles the world from Microsoft's container format locally. (PS5 saves are not accessible - Sony provides no way to read them.)

Something acts odd after migrating - a pal stands around confused.

Drop it and pick it back up - that re-registers its container slot. If the report showed a "data block could not be fully parsed" warning, that block was deliberately left untouched rather than risk corruption; the same drop-and-pickup fixes it.

Does this configure the server too?

No - this page is about the save. For settings, build a clean PalWorldSettings.ini with the Settings Generator or upgrade an old one with the 1.0 Config Migration Doctor.