Skip to content
Arttu Jantunen edited this page Nov 2, 2026 · 2 revisions

parityrun proves that a rewrite of your app behaves exactly like the original. It records what your app does (every page, form answer, redirect, database row and file it writes) and then checks a new version against that recording: a port from PHP to JavaScript, TypeScript or Rust, a framework upgrade, or simply the next release. With your own AI tool, it can do the port too, turn by turn, until the new version matches.

In two commands

pip install parityrun
parityrun

Run the second one in your app's folder. The first time, it finds how to start your app and every route in its code, and records what the app does. Every time, it shows where you are and the next command to run:

my-app: 1 of 1 scenario recorded
  3/14 routes visited

Next: parityrun capture
      use the app in your browser: 11 routes not visited yet

No Python? See Installation for a one-line installer.

The pages

Page What it covers
Installation pip, the one-line installers, updating, what else your app and ports need
Getting Started from an existing app to recordings: parityrun, init, capture, routes, code coverage
What Is Compared pages, redirects, databases, files, LLM prompts, outside calls; what is normalised
Porting with an AI Tool parityrun port: the turn-by-turn loop, Claude Code or your own tool
Libraries code with no pages, called function by function through a shim
Project Settings the project folder, impls.json, parityrun_project.py and every setting
Databases SQLite, MySQL, MariaDB, PostgreSQL
Scenarios every scenario key: requests, forms, uploads, captures, polling, LLM replies, CLI steps
Commands every command and option
Examples the notes service, the guestbook site and the cart library, with their ports

What "the same" means

A check proves the new version identical on the recorded scenarios, which visit a share of the routes and (for PHP) run a share of the code that parityrun coverage shows. A path no scenario takes is not proven, so capture until coverage is where you want it. The honest claim parityrun makes is always: identical on N recorded scenarios that cover X % of the original's code.

Clone this wiki locally