Free · npm + GitHub Action

Is your Supabase app leaking?

Two things leak most in Supabase apps: the service_role master key shipped to the browser, and tables anyone can read without logging in. Paste your app's URL — this checks both in seconds, reads only what any visitor's browser can see, and never shows your data. No signup.

Reads only what any visitor could: your JavaScript (for a leaked key) and the tables your anon key can reach (row counts only). Nothing is stored; your row data is never read or shown.

Prefer the terminal, or want it in CI? Same engine:

$ npx airlock-rls --site https://your-app.com

✗ 1 problem(s):
    ✗ https://your-app.com/app.js  Supabase service key exposed in the
      browser — it bypasses ALL Row Level Security. Rotate it now.

RLS audit failed: 1 problem(s) found.  (exit 1)

On a clean site it stays quiet:

$ npx airlock-rls --site https://your-app.com
✓ No problems.  RLS audit passed.  (exit 0)

Why a leaked service key is the worst case

What the scan does

Found one? Rotate the key in your Supabase dashboard (Settings → API), move it to a server-only environment variable, and never prefix it for the browser. Then re-run the scan to confirm it's sealed.

Open source, and it proves what it claims

Airlock is MIT-licensed and tested. The same engine also runs the full RLS audit — disabled RLS, permissive policies, public storage buckets, and functions that bypass RLS — and can prove a leak by reading your tables with the anon key.

One scan tells you today. Airlock watches it forever.

A key you rotated today can leak again on the next deploy. Airlock Monitor re-checks your app on a schedule and alerts you the moment something reopens — the service key, RLS drift, a newly public table.

See Airlock Monitor →