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.
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)
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.
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.
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 →