Muhammad Ali ImranThe journey

← Works

rev

Every crash comes with a full flight recorder.

A language-agnostic runtime recorder. Prefix any command with rev, and when it crashes you can scrub backward and forward through the entire execution in a terminal UI.

  • Native Windows debugger engine built on CreateProcessW and DebugActiveProcess, plus a ptrace backend on Linux.
  • Memory state deltas stored as a Merkle DAG in SQLite, so history costs very little disk.
  • rev --init quietly shims virtual environments and package.json scripts, so every run is recorded without changing how you work.
  • Export the full program state at any step to JSON.

The pitch

Your program crashed. You add a print statement, run it again, wait, add another print statement, and run it again. rev is for the moment you get tired of that.

Prefix any command with rev:

rev python main.py

It records the run silently. If the program crashes, you land in a terminal UI where you can scrub backward and forward through its whole execution, inspect variables at any step, and read the syscall report.

Under the hood

  • On Windows, a native debugger engine built on CreateProcessW, DebugActiveProcess and structured exception handling, with no heavy dependencies.
  • On Linux, a ptrace backend with full syscall interception.
  • Memory is tracked in differential pages at step boundaries, using VirtualQueryEx on Windows and soft-dirty page bits on Linux, and stored as a cryptographic Merkle DAG in SQLite to keep history small.

Like Git, but for regret

rev --init sets a project up so every run is recorded without you thinking about it. It shims the local Python virtual environment and rewrites package.json scripts, so npm run dev is quietly recorded too. rev --uninit puts everything back exactly as it was.