Six MIT tools that make RLS the default plus the whole multi-tenant SaaS, already built.
Open source, MIT, no signup. Each one makes the safe path the default — across RLS, auth, migrations, and abuse.
Auth + one table with RLS + a test that proves isolation. Clone it and start on your product.
Use this template → FREE · npm supabase-saas-kitThe CLI: scaffold a project, check your env + Supabase connectivity, and generate RLS-safe migrations.
npx supabase-saas-kit new → FREE · npm + Action~1.4k ↓/mo · Jul 2026 airlock-rlsStops the classic Supabase leak: a table shipped public. Fails the build when RLS is off or a policy is USING (true). Its paid tier, Airlock Monitor, is below.
Catches a server secret about to ship in the browser bundle. Fails the build on NEXT_PUBLIC_ secrets; warns on unauthed mutations and unverified webhooks.
Catches a migration that quietly turns RLS off in prod. Fails the build on a new table without RLS, a disabled policy, or a dropped one. No database needed.
npx airlock-migrate → FREE · npm airlock-ratelimitDrop-in rate limiting that doesn't punish families — keys authenticated requests by user, not shared IP. Token bucket, zero deps, typed.
npm i airlock-ratelimit →Same database, same tenant, same goal. One policy leaks, one blocks — and you can run the same request as the other tenant to prove the row was there all along.
Run the live demo →The paid line is the whole app, already built. One payment, yours forever — no subscription, no seat renewals, no expiring licence.
The whole app, built and proven — start on your product, not on plumbing. Pro adds billing (Paddle), an admin panel, and web push.
✓ Tenant isolation, proven live — watch a cross-tenant leak get blocked →npm test outputsrc/app/ (app)/ notes · settings · billing (auth)/ login · signup · reset admin/ platform admin panel api/ notes · billing · webhooks · push src/lib/ auth/ require-workspace · rls.test.ts billing/ paddle · webhook · plan admin/ queries · suspend push/ webpush · notify supabase/ server · client · admin supabase/migrations/ 8 numbered RLS SQL e2e/ Playwright specs
$ npm test ✓ lib/auth/rls.test.ts isolation ✓ lib/auth/rls.meta.test.ts every table has RLS ✓ lib/billing/webhook.test.ts signed ✓ lib/auth/csrf.test.ts ✓ api/webhooks/paddle/route …7 more files Test Files 11 passed (11) Tests 59 passed RLS isolation suite runs green on a local DB.
/admin: workspace + user counts, active subscriptions, suspend a tenantSTACK Next.js 16 · React 19 · TypeScript 5 · Supabase · last updated July 2026
DELIVERY Read access to the private GitHub repo. Enter your GitHub username on the receipt page and the invite lands in your inbox — clone and go. Seats = invites; the licence covers unlimited projects you own or build for clients.
UPDATES Repo access doesn't expire. Every future update lands in the same repository you already have. No renewal, no upgrade fee.
REFUND 14 days, money back, no hard feelings. Read the policy.
Checkout blocked by an adblocker or a corporate proxy? Email support@shipsealed.com and you'll get a direct link.
Airlock Monitor watches the database once real customers are in it.
CI checks the migrations you write. Airlock Monitor checks everything else your live database exposes — the surfaces that leak without a migration ever touching them. It re-audits every morning and emails you the moment one opens.
USING(true) / WITH CHECK(true)
Storage buckets left public
Realtime tables readable by anon
SECURITY DEFINER functions that bypass RLS
Views running as owner, ignoring RLS
Findings come ranked CRITICAL → LOW, plus a monthly report of what's still open. The first scan runs the moment you connect a project.
Subject: Airlock detected 2 NEW RLS exposure(s) in acme-prod
• invoices — table in "public" has RLS DISABLED — every
row is exposed to the API roles
• notes — [SELECT] any authenticated user reads all rows
(cross-tenant) — USING(true)
These rows are reachable with the anon key. Fix the migration
or add an allow-rule for intentionally-public policies.
rls.test.ts (isolation) and rls.meta.test.ts (every table has a policy)rls.test.ts + rls.meta.test.tsThe common RLS gotchas on one page: the policies, the tests, and the footguns that ship a table exposed.
No spam, unsubscribe anytime.
Auth, RLS and the tests that prove isolation, already built.
Re-audits your live database every morning and emails you the moment something opens.