Prisoners Xor Guide
Ren’Py save file encryption, save locations, backup, and transfer — explained for the Prisoners browser build.
This page answers the question that comes up most often once a player gets attached to a particular Prisoners run: “where is my save actually stored, and what is this Xor thing I keep seeing in the file format?” The short version: Ren’Py applies a soft XOR encoding to its save files so that a casual file-open in Notepad does not reveal the dialogue or the choice history. It is not a security feature. It is a thin privacy layer. Everything you need to know — what XOR does, where Prisoners stores your saves in the browser, how to back them up, and how to move them between devices — is below.
1. What does “Xor” mean in a Ren’Py save?
XOR is short for exclusive-or, a one-line bit operation that flips a byte when the corresponding key bit is 1 and leaves it alone when the key bit is 0. Applied byte-by-byte, it is the simplest reversible “scrambling” there is: scrambled = plaintext XOR key, and the unscramble is the same operation done again, plaintext = scrambled XOR key.
Ren’Py uses XOR with a key derived from the game name (and, in older versions, the Python version) before writing the .save file to disk. Two practical consequences:
- It is symmetric. The same key that scrambles the save unscrambles it. There is no separate private key, no password, and no server.
- It is not a security boundary. The XOR layer makes a save unreadable in Notepad, but anyone with the engine source can recover the original data. The intent is “do not let a curious user accidentally spoil their own run by opening the save file in a text editor,” not “protect the save from a determined attacker.”
For a single-player visual novel like Prisoners, that is the right trade-off. The save is yours, the file format is documented, and the engine can always round-trip it back to plain text. If you have seen community tools that “decrypt” Ren’Py saves, they are usually just running the documented XOR step — the encryption is not the hard part; the parsing of the variable table after XOR is the hard part.
2. Where are Prisoners browser saves stored?
When you play Prisoners through this portal, the actual game runs in an iframe that loads the Ren’Py web build from s.prisonersvn.com. Your saves are written to IndexedDB on that origin, not to prisonersvn.com and not to any server. The portal page itself never reads or writes your game save.
To see the saves yourself:
- Open the build in your browser, either in the iframe on the home page or directly at
s.prisonersvn.com. - Press F12 (or right-click → Inspect) to open DevTools.
- Go to Application → Storage → IndexedDB.
- Look for the
renpydatabase on thes.prisonersvn.comorigin. Inside it, the object store that holds save slots is where your1.savethrough9.save(and any quick-saves) live.
IndexedDB is per-browser and per-origin. Your saves do not sync between Chrome and Firefox, between your laptop and your phone, or between your normal profile and a private/incognito window. If you switch devices, you will start a fresh playthrough unless you export and re-import the save yourself (next section).
3. How to back up your Prisoners browser saves
The same DevTools panel that lets you see the saves lets you copy them out:
- Open the build and the IndexedDB panel as in section 2.
- Expand the
renpydatabase and the object store that contains the save slots. - Right-click the
1.save…9.saveentries you want to keep and use your browser’s Export / Copy option (Chrome and Firefox both expose a per-entry export). - Save the exported file somewhere outside the browser — a folder on disk, a USB stick, a cloud drive. The exported file is still XOR-encrypted, so it is safe to keep on a shared device.
Restoring is the reverse: open the same build on the same browser, open DevTools → IndexedDB, and Import the file back into the same object store. Refresh the page and the save slot will appear in the in-game save menu.
Edge cases. If you back up across major Ren’Py engine versions, the slot may fail to load if the engine’s save format changed — Prisoners is on a recent Ren’Py version, so backups made on the current build round-trip cleanly. If you are moving between a desktop Ren’Py install and the web build, the formats are not bit-identical: desktop saves live under %APPDATA%\\RenPy\\<game>\\ (Windows) or ~/.renpy/<game>/ (macOS/Linux), and the web build expects IndexedDB — the same logical data, but a different storage layer.
4. How to transfer a save between devices
There is no cloud save. There is no account. Transferring a Prisoners save between, say, your laptop and your phone is a four-step manual move:
- Export on the source device. Open the build, open DevTools → IndexedDB →
renpy→ save object store, export the.saveentries you want to move. - Move the file. Email it to yourself, AirDrop it, or drop it in any cloud drive you already use. The file is still XOR-encoded, so the in-transit copy is not a privacy risk.
- Open the build on the target device. Visit the build URL once and let it create the IndexedDB database. The exact database has to exist before you import, or the import will silently fail.
- Import on the target device. Same DevTools panel, same
renpydatabase, same object store — import the file back in. Refresh the page. The save slot will appear in the in-game save menu.
This works between any two browsers, any two devices, and any two operating systems, as long as both are running the same Ren’Py engine version. The maintainer of this portal does not run a save-sync service and does not have access to your saves — the move is entirely between your two devices.
5. The endings tracker on this site is not your game save
The home page has a small progress grid that lights up which of the 7 endings you have reached. That data is not a game save. It is a tiny JSON object stored in your browser’s localStorage under the key prisonersvn_endings_v1, and it only contains the IDs of the endings you have already seen. It is written by a small client-side script in the footer of the home page; the portal server never sees it.
Concretely:
- Endings tracker — lives in
localStorageonprisonersvn.com, only tracks ending IDs, can be reset from the tracker UI or by clearing site data. - Game save — lives in IndexedDB on
s.prisonersvn.com, contains the full playthrough state, is what the in-game save/load menu reads and writes.
Clearing one does not touch the other. If you want to wipe the tracker to start the progress grid from zero, use the Reset button on the home page. If you want to wipe the game save, use the in-game Preferences → Delete All Saves option, or clear IndexedDB on the build origin.
6. What this guide is, and is not
This page is an educational explainer. It does not provide a save-decryption tool, an unlock-everything tool, or a “force every ending” tool, and the maintainer does not distribute one. The Prisoners story is short — about an hour for a first run, three to four hours for all 7 endings — and is fully completable on the default difficulty without touching the save files.
The community resources most often referenced for Ren’Py internals are:
- The Ren’Py open-source SDK itself, which documents the save format in the engine source.
unrpa, a community tool for unpacking Ren’Py.rparesource archives. It is useful for inspecting how the engine lays out game assets, not for altering your saves.- The Ren’Py Discord and forum threads, where engine developers answer format questions in public.
If your goal is to back up a save you are proud of before a risky choice — this guide has you covered. If your goal is to see every ending without playing through seven times, the legitimate path is a second, third, and fourth playthrough with different choices; the dynamic relationship system makes each run feel meaningfully different.
7. Related pages
- Prisoners Visual Novel home — play in browser, character profiles, endings tracker, FAQ.
- All 7 endings — ending names, what triggers each, and the tracker that records your progress.
- FAQ — gameplay, content warnings, browser troubleshooting.
- Contact — bug reports, broken-link reports, and questions about this guide.