Run EXPLAIN on your Supabase schema at 100,000 rows. In the browser, before you ship.
FAILSEQ_SCAN_AT_SCALEsrc/query.ts:5supabase.from('posts').select('id, title, created_at').eq('author_id', authorId).order('created_at', { ascending: false }).limit(20)
100,000 rows scanned → 10
create index "posts_author_id_idx" on "public"."posts" ("author_id")rows scanned vs table size, measured at each size (log scale) — current · with fix
Try it on your schema
starting Postgres in your browser (PGlite)…
Nothing to install, no database connection: the whole pipeline runs in a Web Worker on a real Postgres 18 (PGlite), and your schema never leaves this tab.
Deterministic: same input, same report, byte for byte, here and in the CLI. Structural checks are splinter's (Supabase Advisor); fixes are applied to the sandbox and re-explained before they are called fixes.
How it works, the numbers behind it and the CLI / GitHub Action: README · github.com/yilinguo121/pggate (FSL-1.1-MIT).