Guardrails
for your codebase.

Heal learns how to run your environment and mocks its dependencies to build a sandbox that realistically replicates production. Then it hunts for and .

DefectscheckoutBehaviourHigh

An expired discount code shows as applied

Entering SUMMER24 shows “Discount applied” and a lower total. The server refused the code, so checkout charges the full price.

Expected

The code is refused with a message, and the total does not change.

Steps to reproduce
  1. 1Add any item to the cart
  2. 2Enter SUMMER24 and press Apply
  3. 3Go to checkout
How this was proved
checkout/expired-code-is-refused.spec.tsred 2 of 2

See heal run on open-source repos.

Heal built a production-like environment for each repo and uses it to find and validate reproducible defects.

Free for open source.Message @healdevHQ and get free credits to get rid of bugs on your project.

Sandbox your app and find runtime issues

Heal learns how to run your environment. Finds defects. Validates them against the runtime. The best of static analysis, validated dynamically.

Reads your code, maps your architecture.

Features6 features, 29 screens
  • checkout6 screensroutes/checkout.tsx:44
  • billing4 screensfeatures/billing/plans.tsx:12
  • search3 screensfeatures/search/index.ts:8
  • onboarding5 screensroutes/start/[step].tsx:21
  • account4 screensroutes/account.tsx:30
  • admin7 screensapps/admin/src/main.tsx:5

What E2E tests and scanners miss

Untested integrations, edge cases, services disabled in staging, hard-to-mock async services. And everything where you need a runtime.

Heal runs these, on the sandbox:

  • schemathesis
  • ZAP
  • dalfox
  • jwt_tool
  • nuclei
  • semgrep
  • trufflehog
  • sqlmap
  • and more…
  • Edge cases

    E2E runs the happy path against staging. Requests that fail, slow down or come back with a field missing are never staged.

    Walks every flow again with the world failing, and files the screen that says “nothing here” when the server broke.

  • Services turned off in staging

    Payments, mail and third-party calls are switched off.

    Mocks them in a production-like sandbox, so the flows behind them run for real.

  • Validated runtime security issues

    A static scanner reports a pattern in code that may never be reachable, and cannot tell you if it is.

    Fires the real exploit at the sandbox, signed in as two people, and reports only what a test reproduces.

  • Missing routes

    Dead pages, assets that do not load and screens no feature names are nobody’s test.

    Crawls every link once, over the whole running app.

Test what needs testing

shopReading cart/apply-code.ts
find the defects in checkout

I’ll map the product first, then hunt checkout alone. Reading the repos.

Grepsrc/cart

Which env file holds the test logins?

.env.sandbox

Sandbox built. The web app and the API run for real, Postgres is seeded, Stripe is faked. Both checks passed, signed in as the test user. Hunting checkout on 6 lanes.

One defect so far, reproduced twice and re-run red by heal:

An expired discount code shows as applied (Behaviour, High). cart/apply-code.ts never reads the answer to the discount request.

Two more suspicions are still being chased.

fix this defect
Reading cart/apply-code.ts

send · ⇧⏎ newline · / commands · @ files

Point it at your repo.

Connect GitHub and get your report. It runs locally or in the cloud.