Debug production failures locally, even when you can’t reproduce them.

Record production traces with <0.1% overhead. Replay them locally. Step backwards to the root cause.

pip install retracesoftware

PREVIEW RELEASE: Apache-2.0 OSS · <0.1% overhead · Deterministic replay · Python 3.11/3.12 · Backed by PWV

The first reverse debugger for CPython.

Production-safe recording

<0.1% overhead.
Safe to leave always-on.

See benchmarks →

Deterministic Replay

Reproduce the exact execution, every time

Backwards debugging

Step backwards through production crashes. First reverse debugger for CPython.

Captures external interactions

Network/DB/time/file I/O
recorded for replay.

No code changes

Works without rewriting your app.

East set-up

Retrace is a pip-installed agent

Set an env var, run your app, and you’re recording.

QUICK START
Quick start: record once, debug backwards.
Try the included Flask demo, then replay the recorded failure in VS Code.
Step 1 - install
Install
python3.12 -m venv .venv
source .venv/bin/activate

python -m pip install retracesoftware
python -m retracesoftware install

No app rewrite required.
Step 2 - record
Run your app normally with one environment variable.
Record
RETRACE_RECORDING=recordings/flask.retrace \
python examples/flask_demo.py

Network, DB, time and file I/O are captured for replay.
Step 3 - replay
Open the recording in VS Code and debug the original execution.
Replay
code .

# Open recordings/flask.retrace
# Start replay from the Retrace sidebar
# Step forwards and backwards

No live Flask process required.

The replay is deterministic: the debugger runs the recorded execution, not a live process.
Try the 10-Minute Demo. Want to see this end-to-end with a real example?
PROVENANCE ENGINE · EARLY ACCESS
Replay shows you what happened.
Provenance shows you why.

A recording lets you step through the execution. But when you're staring at a wrong value, the real question is: where did it come from?

Retrace's provenance engine traces any value back through the execution — from the point you noticed it, through every transformation, to the original input that caused it.

  • Select any value. Jump to its origin.

    Click a variable in the debugger and instantly see the exact line and inputs that produced it.

  • Chain backwards through transformations.

    Each origin has its own provenance. Keep drilling back until you reach the root cause.

  • Works on every value, not just outputs.

    Intermediate variables, function returns, container mutations — provenance covers everything in the execution.

Now in early access with select design partners.

 

PROVENANCE DRILLBACK

 


Three clicks from ZeroDivisionError to root cause: the API caller sent qty: "0" in the request body. No manual searching. No log correlation.

Q&A Section
Getting started
Is it hard to set up?
No. Retrace is a pip-installed agent. Set an env var, run your app, and you’re recording. No code changes.
Do I need to change my code?
No. Retrace attaches at the Python runtime level and works with your existing app. No logging, decorators, or special hooks.
What Python versions and frameworks work?
Preview supports Python 3.11, with Django/Flask and 60+ popular libraries tested.
Python 3.12 support is in progress, with broader coverage planned before GA.
Production Concerns
Can I run Retrace safely in production?
Yes. Retrace is built for production use.

It records at the Python runtime layer (not ptrace/libc), which keeps it safe for live workloads.
How much overhead does it add?
Measured latency overhead is ~1% or less on typical Django/Flask workloads. Benchmarks are available here.
How does Retrace handle sensitive data?
Retrace records execution and I/O — you control where traces live and who can access them. For stricter environments, traces can stay local/on-prem.
How It’s Different
Why can’t I just re-run the request?
Because many production failures depend on timing, concurrency, external services, or non-deterministic behavior.

A re-run often takes a different path.

Retrace lets you debug the exact execution that happened, after the fact.
How is this different from logging or APM tools?
Logs/APM show symptoms and depend on what you instrument. They can’t reconstruct past state.

Retrace records the real execution and lets you replay it deterministically, so you can inspect the actual code path and state.
Can it catch race conditions and flaky tests?
Yes. Retrace captures timing and thread interactions and replays them deterministically. This helps reproduce race conditions and flaky CI failures by replaying the run that failed.
Open Source & Community
Is it really open source?
Yes. The Record-Replay core is open source under Apache 2.0.
Why is this a preview release?
We’re opening the agent early to gather feedback while we expand Python/library coverage and harden for GA.
How can I contribute?
Try the agent, file issues, and submit PRs on GitHub. Library compatibility reports and docs fixes are great first contributions.
How does it work?

Retrace records external interactions (DB, API calls, file I/O, time) during a real run, then replays them deterministically in your local debugger — no prod access needed.

App runs normally
 
Your Production App running normally
External calls captured automatically
Bug happens Retrace captures it
Debug the exact execution locally
Debug Locally Replay in VSCode
Use cases

Perfect for:

  • Debug production-only bugs you can’t reproduce
    Replay the exact execution that already happened. No repro steps required.
  • Reproduce race conditions and timing-sensitive failures
    Capture and deterministically replay concurrency, async behavior, and thread interactions.
  • Stabilise flaky CI tests
    Replay the exact failing run to understand and fix non-deterministic test failures.
  • Debug systems with external dependencies
    Reproduce failures involving databases, APIs, file I/O, and other external services.
  • Investigate failures after the fact
    Inspect real code paths and state from incidents that are already over.
  • Let AI agents debug your production failures Retrace's DAP integration lets tools like Claude Code and Cursor step through recorded executions programmatically, including backwards.
Open Source
Community Discussion
Documentation
Report Bugs

Get launch updates

One email per month. Demos + release notes. Unsubscribe anytime.

Ready to debug the bugs you can’t reproduce?
Join the future of Python debugging (Preview Release - Python 3.11 & 3.12, <0.1% recording overhead)