Tools / Palworld
Palworld Save Converter rebind any player's character
Move a co-op world to a dedicated server, a server world back to co-op, or move any single player to a new account - without losing the character. Pick who is moving (the host, or the friend who just bought the game on Steam after playing on Game Pass) and where they're going; the converter rebinds their 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 computes the new UID from a SteamID64 - no "join the server first and make a throwaway character" step.
Xbox / Game Pass right now: you can point it at a wgs folder and it is
worth a try, but our own error logs say most Game Pass folders currently fail to extract. That is a
bug on our side, not a problem with your save, and it is being worked on.
The two routes that do work today are here.
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
Close Palworld and stop the dedicated server first, then pick the folder marked
below. Steam co-op saves live in
%LocalAppData%\Pal\Saved\SaveGames\<your-steam-id>\<world-id>\, server worlds in
Pal/Saved/SaveGames/0/<world-id>/, and Game Pass saves under
%LocalAppData%\Packages\PocketpairInc.Palworld_...\SystemAppData\wgs\.
Any parent folder works too - the converter searches inside. The one thing that does not work is
picking a folder below the world, which is the single most common way this goes wrong.
Steam, co-op or dedicated server
SaveGames\
└─ 76561198012345678\ your SteamID64, this parent works too
└─ 8E4A1C7B9D2F0A55\ ← PICK THIS FOLDER
├─ Level.sav must be in here
├─ LevelMeta.sav
├─ WorldOption.sav (may be absent)
└─ Players\ ← NOT this one, one level too deep
└─ a5d406b9....sav
Xbox / Game Pass
SystemAppData\
└─ wgs\ ← PICK THIS FOLDER
├─ containers.index must be in here
├─ 0A1B2C3D4E5F6A7B\ ← NOT this one, one level too deep
│ └─ container.157
└─ 6F7E8D9C0B1A2938\
└─ container.42
Steam save or server save. A Game Pass wgs folder is accepted, but see the note above.
You can also drag the save folder itself onto this box. Read and extracted locally - never uploaded.
2. What we found
3. Pick the character and where it's going
Which character are we moving?
Any player in the world - not just the host. Everyone else carries over untouched.
Where does that character go?
Want this on a real server? Supercraft hosts Palworld →
What travels with the character
A character's progress does not live in the world file alone: it is split between
Players/<uid>.sav (the person) and Level.sav (everything they own or
built), joined only by that 32-hex UID. That is why the hand-rolled version of this move goes wrong:
people copy the world, get a new UID, and the map and tech tree "reset" - the data is still in the
old player file, just no longer linked to them. Rebinding the UID everywhere is what keeps all of
this attached:
- Level, stats and EXP
- Technology points + unlocked technologies and recipes
- Map unlocks and fast-travel points
- Paldeck entries and capture counts
- Lifmunk effigies / relics and notes
- Quests, in-progress and completed
- Inventory, equipment and skins
- Party pals + palbox, including the
<uid>_dps.savsidecar - Guild membership, admin rights and character handles
- Their built structures, chest / booth locks and door-lock whitelists
Everything in that list is a field we read out of a real Palworld 1.0 save
(RecordData in the player file carries the map flags, fast-travel flags, Paldeck,
relics, notes and quest arrays; the world file carries ownership, guild and build data). The first
eight travel inside the renamed player file, which is why the file itself has to come with
you - the last two are rebound in Level.sav.
Each item is preserved when its save structure is recognized and successfully patched - it is not an unconditional guarantee. If a guild or data block can't be parsed (a newer game revision, an unusual save), the converter tells you exactly what it couldn't touch and, by default, stops rather than hand you a half-rebound save. You can choose to convert partially anyway, and the report says precisely what was and wasn't changed.
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-<player>-server-ready.zip
├─ Level.sav ← all UID references rebound, recompressed
├─ LevelMeta.sav ← untouched
├─ Players/
│ ├─ <NEW-UID>.sav ← the rebound character, renamed + rebound
│ └─ <NEW-UID>_dps.sav ← their palbox sidecar, renamed with them
│ (everyone else's files pass through unchanged)
└─ MIGRATION-README.txt ← who was rebound, to what, and the install steps
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.
Going the other way: dedicated server back to single player or co-op
The conversion is not one-directional. People usually arrive here moving a co-op world onto a dedicated server, but the reverse is the same operation with the target changed: a group winds the server down, and one person wants to keep playing the world solo or re-host it as co-op from their own machine.
What changes is only the destination. Going to a dedicated server you send the
character to a Steam-derived ID, because that is the ID the server will look for. Coming
back, you send it to the co-op host slot instead, which is the fixed ID
00000000000000000000000000000001. Everything in the section above still travels:
level, tech unlocks, palbox, map discovery, base ownership.
Two things worth knowing before you do it. Copy the server's world folder while the server is stopped, not while it is running, or you can catch a half-written save. And keep the untouched server copy until you have loaded the local world once and confirmed the character arrived with the right level and Pals, because that copy is your only way back.
Game Pass and Xbox saves to Steam or a dedicated server
Game Pass stores Palworld saves in a wgs folder rather than the normal
SaveGames layout, with opaque names instead of readable world folders. This
converter accepts that layout as input, so you can point it at the wgs folder and
it will try to reassemble the world.
The honest status, as of August 2026: it usually does not work. Counting the failures this tool reports back to us, most Game Pass folders get as far as finding the world and then fail while decompressing it. The fault is ours, in the way we reassemble Microsoft's container files, and a fix is in progress. It costs you nothing to try, because your original save is never modified and nothing is ever uploaded. But if it fails, that is us, not you or your save.
Two routes that do work today:
- Let Palworld convert it. On a PC that also has the Steam
copy of the game, load the world in Palworld once. The game writes it out in the normal
%LocalAppData%\Pal\Saved\SaveGames\layout, and this converter handles that reliably. - Unpack the container yourself. The open-source
PalworldSaveTools
extracts a
wgscontainer into a normal world folder. Bring that folder back here and convert it as usual.
This is the usual path for someone who played on Game Pass, then bought the game on Steam and wants their character rather than a fresh start, or who is moving a Game Pass world onto a dedicated server so the group can keep playing when the host is offline.
One further honest limit, the same one stated in the FAQ below: the converter rebinds the character but never re-serializes the save, so the character's stored platform value is left exactly as it was. We have not confirmed the Game Pass to Steam path end to end on a live server. Keep your original save, and tell us if it does not work for you, because that is the only way this note ever gets to change.
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
How do my friends move their characters? Can you rebind a player who isn't the host?
Yes - step 3 lists every character in the world, not just the host slot. Pick any
player whose Players/<uid>.sav is in your selection and send them to a new UID.
Their character record, pals, palbox, guild membership and every structure, chest lock and door
whitelist they own get rebound; nobody else is touched. (If a character's player file isn't in the
folder you picked, we say so and refuse to pick them - the world's references alone are not a
character.)
I played on Game Pass and bought Palworld on Steam. Can I keep my character?
Pick your character, choose A dedicated server (Steam), and enter your new SteamID64 - the
converter rebinds you to the UID a Steam server derives from it, so level, tech, map, Paldeck, pals
and base stay attached. Two honest caveats: you need the world folder (the host's save; a Game
Pass wgs folder is accepted as input but usually fails today, so convert it via the
Steam copy of the game first), and your player file records a PlayerPlatform enum (e.g.
EPalPlayerPlatform::Xbox) that we do not rewrite - it is a
variable-length string and this converter never re-serializes a save. We have not verified a Game
Pass → Steam move on a live server, so we won't claim it's fine: keep your original save, and
tell us via the feedback link if the character doesn't show up.
What exactly is preserved?
Level and stats, tech points and unlocked recipes, map + fast-travel unlocks, the Paldeck,
effigies/relics and notes, quests, inventory and skins, party pals and palbox (incl. the
_dps sidecar), guild membership, and their built structures / chest locks / door
whitelists. The full list is above. Most of it lives inside the
player file - copying the world without it (or losing the UID link) is exactly how people end up
with a fresh map and an empty tech tree.
The target UID already belongs to someone in the world. What happens?
We tell you before you convert, and the conversion becomes a swap: the two
characters trade UIDs, both keeping their pals, levels and bases. Nothing is deleted. If the target
UID belongs to a player whose .sav file isn't in your selection, we block the
conversion instead of leaving two characters sharing one UID.
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. Game Pass wgs containers are accepted as input, but most of them currently
fail to extract - see the Game Pass section above. 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?
Accepted as input, but honestly: it usually does not work yet. You can pick the wgs
folder and the converter will try to reassemble the world from Microsoft's container format
locally, and it costs you nothing to try because your original is never touched. On our current
error logs most Game Pass folders fail while decompressing, which is our bug and is being fixed.
The reliable route today is to load the world once in the Steam copy of Palworld
and convert the folder the game writes, or to unpack the container with PalworldSaveTools first -
both are spelled out above. (PS5 saves are not accessible at
all - 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.
"not a compressed palworld save, found b'plm' instead of b'plz'"
Your save is fine. That message comes from a tool that only understands the older
compression. Every Palworld .sav carries a three-byte marker: PlZ for
the zlib era, PlM for the Oodle compression used from 0.6 onward including 1.0, and
CNK for the Xbox container, which repeats the real header a few bytes further in. A
tool written before Oodle existed reads PlM where it expected PlZ and
calls the file corrupt or invalid, which it is not.
This converter reads all three, decoding Oodle in the browser, so the file that failed
elsewhere opens here with no conversion step. It writes PlZ back out on purpose:
the game loads both eras and rewrites its own compression on the next save, so zlib output is
the safest thing to hand back. If your save genuinely is damaged rather than just newer, the
corrupted save checker will say so without
changing a byte.
Python tools failing with "Exception: Unknown type: ByteProperty"?
That exception (often on .SaveParameter.Level) is the signature of a pre-1.0
palworld-save-tools parsing a 1.0 save - usually the pip-installed release, which
predates the 1.0 format. Command-line migration scripts built on it hit this until they vendor the
updated library from source. This converter parses 1.0 saves natively in your browser - PlM/Oodle
compression, the new 1.0 fields - so there's no library to update and no
Python environment to fix.
Is this the same as the "palworld host save fix" script?
Same problem, different tool. The classic palworld-host-save-fix scripts rewrite the
host's player ID with a local Python install, and most of them ask you to join the new server once
so a fresh player file exists to overwrite. This converter derives the server-side UID directly from
the Steam ID, so there is no join-first step, nothing to install, and the whole rewrite happens in
your browser. It also reads Palworld 1.0's Oodle saves, which those scripts
predate - and it can rebind any player, not just the host.
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.
Where can I plan breeding for the character I just moved?
Once your character is on the dedicated server, the Palworld 1.0 breeding calculator works out the parent combos, child IVs and egg-hatch times for the exact Pal you want next - updated for the 1.0 breeding rebalance.