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.
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.
Steam save, server save, or Game Pass wgs folder.
Read and extracted locally - never uploaded.
2. What we found
3. Convert
Who becomes the local co-op host? That character is rebound to the fixed co-op host slot; everyone else carries over unchanged.
Want this on a real server? Supercraft hosts Palworld →
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)
- Copy the world folder with the game closed / server stopped.
- Start the dedicated server, join once with the host's account, stop the server - this creates
Players/<new-uid>.sav. - Run palworld-host-save-fix (or PalworldSaveTools' "Fix Host Save") with the old UID
00000000000000000000000000000001and the new UID from step 2. - 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.