
Supported libraries
Skene reads the writes your code makes into Supabase. For each one it records the target table, the columns it sets, and where in the control flow the write sits. That index, checked against your schema, is what every PR gets compared to.
Supabase client writes
supabase.from('events').insert({ ... })
supabase.from('events').upsert({ ... })
supabase.rpc('record_event', { ... })
Both the browser and server supabase-js clients are covered. Skene resolves the table name, the columns in the payload, and the conditions the call sits behind.
Server-side inserts
Writes that run on the server, in route handlers, edge functions, or background jobs, are read the same way. Skene follows the call to the table it targets.
Postgres functions and triggers
Events recorded through a Postgres function or a database trigger are matched to the table they write into, so an event that fires inside the database is checked against the schema like any other write.
How it maps to your schema
Skene reads your Supabase schema read-only and lines each write up against the table it lands in: the columns exist, the types match, the event still fires under the same conditions. A renamed column or a payload the table cannot store shows up on the PR.
What is next
- Install Skene: pick a surface
- What Skene catches: the five failure modes
- Configuration: allowlist, ignore patterns