# Prince of Persia: PrinceJS in a browser or SDLPoP on desktop?

Canonical: https://playable.wtf/guides/prince-of-persia-versions/

Written: 2026-10-17

PrinceJS starts in a browser and preserves level settings in a link. SDLPoP is an installed DOS-based port with exact-state quicksaves and replays.

## Choose how you want to practice

Choose [PrinceJS](https://playable.wtf/games/oklemenz-princejs/) for a direct browser start and documented phone controls. Choose [SDLPoP](https://playable.wtf/games/nagyd-sdlpop/) for an installed DOS-based port with exact-state quicksaves and replays. These projects follow the first Prince of Persia, not The Shadow and the Flame or The Sands of Time.

The original game's attraction is deliberate movement: crossing a room means judging a run, jump or sword exchange. Jordan Mechner built its animation from filmed human motion. Both routes retain that emphasis on timing; the meaningful choice is how you want to practice and preserve progress.

Choose a session and save style

| Project | Start with | Progress |
| --- | --- | --- |
| [PrinceJS](https://playable.wtf/games/oklemenz-princejs/) | A browser; no original-file import | A URL containing level and starting conditions. |
| [SDLPoP](https://playable.wtf/games/nagyd-sdlpop/) | The linked package for your computer | Classic level saves, exact-state quicksaves and replay files. |

## Start PrinceJS

Open [princejs.com](https://princejs.com/), press to start, and use Enter to continue. The project's standard level range is 1–14. On a phone, use landscape; its touch guide shows how dragging between regions chains a running jump into a grab.

PrinceJS keyboard reference

| Input | Action |
| --- | --- |
| Left / Right | Move; advance or retreat with sword drawn |
| Up | Jump, climb or block an attack |
| Down | Crouch, descend or sheathe sword |
| Shift | Grab a ledge, drink or strike |
| Space / Enter | Show time / continue |

For a pad, consult [PrinceJS's controller map](https://github.com/oklemenz/PrinceJS#play-online): its action buttons differ from SDLPoP's. Converted custom levels also have a specific limit: special events are unsupported.

## Install and control SDLPoP

The [download page linked by SDLPoP](https://www.popot.org/get_the_games.php?game=SDLPoP) offers version 1.23 for Windows/Linux and 1.20 for macOS. Choose by platform, and keep the complete package together. The Mac disk image is an older release, so a feature mentioned in current development documentation may not be in that package.

On Windows, run `prince.exe`. Linux builds run `./prince`; the [README](https://github.com/NagyD/SDLPoP/blob/v1.23/README.md#running-the-game) also gives platform build instructions. The source tree and compiled downloads are different starting points.

Arrows move, Up jumps or climbs, Shift acts and strikes, and Shift plus Left/Right takes careful steps. In combat, Up blocks and Down sheathes. Esc pauses. SDLPoP's gamepad defaults use Y for Up, A for Down and X or triggers for Shift.

## Preserve a level or an exact moment

In PrinceJS, copy or bookmark the current address. It records level, maximum health, remaining minutes and guard strength; it is not an exact mid-jump snapshot. Restore by opening that address. A plain link to the homepage does not carry your progress parameters.

SDLPoP's **Ctrl+G** save works on levels 3–13 and resumes at the beginning of the saved level; use **Ctrl+L** during the intro to load it. **F6** quicksaves the exact state and **F9** restores it. Replays use `.P1R` files in `replays/`, and mod saves remain with their mod.

Check the quickload setting before using it to rehearse a difficult room. SDLPoP's [configuration](https://github.com/NagyD/SDLPoP/blob/v1.23/SDLPoP.ini) enables a penalty that can deduct up to one minute when quickloading. That makes a restored position different from a promise of cost-free retries. Keep a backup before experimenting with save or mod settings.

## Keep practice settings consistent

Choose a consistent ruleset while learning. SDLPoP's configuration separates gameplay fixes from the base behavior, with `use_fixes_and_enhancements` controlling the group. Individual changes can affect jumping and enemy behavior. A trick learned under one setup may therefore need different timing under another.

If a pad behaves strangely in SDLPoP, its README points to a controller mapping file configured through `SDLPoP.ini`. Start with keyboard input to distinguish a mapping problem from the game's deliberate movement. For browser pairing and activation, see the [controller guide](https://playable.wtf/guides/browser-game-controller-setup/).

For a short phone session, PrinceJS's documented touch regions make it the relevant option here. For practicing one troublesome jump, SDLPoP's exact-state save is the stronger reason to install it. Neither choice requires you to treat a URL bookmark, a native save and a replay as interchangeable files.

## Project reading

- [Jordan Mechner · the original Prince of Persia](https://www.jordanmechner.com/en/games-movies/prince-of-persia/)
- [PrinceJS · controls, mobile input and URL progress](https://github.com/oklemenz/PrinceJS#readme)
- [SDLPoP · controls, saves and running the game](https://github.com/NagyD/SDLPoP/blob/v1.23/README.md)
- [SDLPoP · linked platform downloads](https://www.popot.org/get_the_games.php?game=SDLPoP)
- [SDLPoP 1.23 · quickload penalty and gameplay settings](https://github.com/NagyD/SDLPoP/blob/v1.23/SDLPoP.ini)
