Change your Data. Leave every other byte alone.
A small command-line tool for Phigros players. It reads your cloud save, shows your Data and changes only the numbers you ask for. It makes a backup, shows a preview, and checks the cloud after every upload.
Data 705 KiB · 0 MiB · 0 GiB · 0 TiB · 01 PiB
Decrypted gameProgress. The money values come from a real run; the bytes around them are illustrative.
Before you start
Tested end-to-end on the Global edition in September 2026. CN players can use it with --server cn.
You need
- Bun 1.1+ or Node.js 18.3+
- Your cloud save, synced from the game at least once
- The game's
.userdatafile, a small JSON file it keeps in its app data after you sign in with TapTap
git clone https://github.com/SvnFrs/phigros-data-editor.gitcd phigros-data-editor && bun install.userdata contains your sessionToken. Anyone who has it can act as your account. Never share it or commit it.
phigros-data-editor reads only that token. The repo ignores .userdata and backups/ by default. You can also pass the token in PHIGROS_SESSION_TOKEN so it doesn't have to sit in a file.
A run, start to finish
Each step only runs when you type the next command. Nothing is uploaded until you add --apply.
-
Read
Read-onlyDownloads your save, writes a backup to
backups/and prints your Data. Check it against the number the game shows.bun bin/phigros-data-editor.js .userdataServer global (https://kviehlel.cloud.ap-sg.tapapis.com/1.1) Save updated 2026-09-16T14:36:33.806Z Backup backups/backup-1789571645191.zip Entries gameKey v3, gameProgress v4, gameRecord v1, settings v1, user v1 Money 705 KiB, 0 MiB, 0 GiB, 0 TiB, 0 PiB
-
Preview
Dry runSet any unit from 0 to 1023. Units you leave out keep their value. Without
--applyyou only see the result.bun bin/phigros-data-editor.js .userdata --pib 1Money 705 KiB, 0 MiB, 0 GiB, 0 TiB, 0 PiB Dry run: money would become 705 KiB, 0 MiB, 0 GiB, 0 TiB, 1 PiB. Re-run with --apply to upload.
-
Apply
Writes to the cloudPatches only the money bytes, proves nothing else changed, uploads, then downloads the save again to check it.
bun bin/phigros-data-editor.js .userdata --pib 1 --applyPatch self-check passed, only the money bytes changed Upload done, reading the save back from the cloud Money 705 KiB, 0 MiB, 0 GiB, 0 TiB, 1 PiB Verified.
Then, in the game: download your save from the cloud. If the game uploads your local save first, it overwrites the change.
What it won't do
Your save is your progress. These are the checks that stop a run before it can damage it.
-
Touch someone else's save
It confirms your token with the server, asks only for saves owned by that account and checks the owner again. A query that isn't filtered by user also returns strangers' saves.
-
Upload without
--applyA normal run only reads. Money flags on their own give you a preview.
-
Change bytes you didn't ask for
It re-reads the patched archive and compares it with the original. Every other entry, and every byte outside the money range, must be identical.
-
Skip the backup
Every run saves the current cloud copy to
backups/before doing anything else, and a restore backs up again before overwriting. -
Restore the wrong backup
Backups from another account, or with a checksum that doesn't match, are refused.
-
Report success without checking
Downloads are checked against the cloud's MD5. After an upload, the save is read back and compared with what you asked for.
Undo a change
Every run leaves a .zip and .json pair in backups/. Point --restore at one to see what it contains, then add --apply to put it back.
Before uploading the backup, it saves your current cloud save too, so a restore can itself be undone.
bun bin/phigros-data-editor.js .userdata --restore backups/backup-1789571645191bun bin/phigros-data-editor.js .userdata --restore backups/backup-1789571645191 --applyOptions
| Option | What it does |
|---|---|
| --kib --mib --gib --tib --pib <n> | Set that unit to n, from 0 to 1023. Units you leave out keep their current value. |
| --apply | Write to the cloud. Without it, nothing is uploaded. |
| --restore <backup> | Upload a backup instead of editing. The path works with or without .zip. |
| --server <global|cn> | Which game edition's server to use. Default: global. |
| --backup-dir <dir> | Where backups are written. Default: backups. |
| --force | Allow writing a gameProgress format newer than v4, the latest one checked. |
| -h, --help | Show all options. |
When a run stops
Each error explains what went wrong. Here's what to do next.
- session token rejected by …
- The token doesn't belong to that server, or it expired. Check
--server(Global is the default), or sign in again in the game and copy a fresh.userdata. - no cloud save found for this account
- Sync your save to the cloud in the game, then run the command again.
- network error contacting …
- The request never reached the server. Run the same command again.
- gameProgress vN is newer than the verified v4
- The game changed its save format. Reading still works; don't write until the new layout has been checked.
- file upload failed, cloud save unchanged
- Nothing changed in the cloud. Try again later.
- cloud save does not match the requested money
- Put the previous save back with the
--restore … --applycommand in the message.