new: drive vas from your AI agent over MCP · Cursor, Claude Code, Windsurf
Antigravity
+
Supabase

Antigravity + Supabase Security

Antigravity accelerates Supabase integration, but AI-generated schemas and queries need explicit RLS configuration to protect user data.

Why Antigravity + Supabase?

Antigravity's AI IDE scaffolds Supabase backends quickly, making it a popular pairing for developers who want database and auth without manual setup. Speed is the priority — security is the gap.

Common Vulnerabilities

These are the security issues we find most often in Antigravity apps using Supabase.

critical

Tables Created Without RLS

Antigravity-scaffolded tables default to no Row Level Security. The public anon key grants unrestricted read access to all rows by any visitor.

critical

Service Key Used in Client Code Paths

AI-generated server routes may incorrectly use the service_role key pattern in code paths that are ultimately bundled client-side.

high

Missing User Ownership Checks

Generated RLS policies may authenticate users but not verify data ownership, allowing authenticated users to read each other's records.

high

RPC Functions Without Auth Guards

Database functions created by Antigravity's AI may be invokable without authentication, exposing privileged data operations.

What We Check for Antigravity + Supabase

Table Exposure Test

Attempt to read every public table using only the anon key to identify which tables lack effective RLS.

Service Key Scan

Scan compiled JavaScript for the service_role key — it starts with 'eyJ' and is much longer than the anon key.

RPC Authentication

Invoke each database function without a session token to verify auth is enforced at the function level.

Policy Ownership Logic

Review RLS policies for auth.uid() ownership checks, not just authentication presence.

Quick Security Wins

Apply these fixes right now to improve your security.

Enable RLS on all tables: ALTER TABLE tablename ENABLE ROW LEVEL SECURITY;
Scope reads to owner: CREATE POLICY "read own" ON tablename FOR SELECT TO authenticated USING ((select auth.uid()) = user_id);
Check your .env and bundled JS for the string 'service_role' and remove it from any frontend context
Add SECURITY DEFINER guards or auth checks inside any RPC functions that touch user data
Test policies from the Supabase dashboard Table Editor with RLS preview enabled

The Bottom Line

Antigravity + Supabase gets you to a working app fast. Security requires a deliberate pass: enable RLS, add ownership policies, and scan before any real users touch it.

Secure Your Antigravity + Supabase App

Find Row Level Security misconfigurations, exposed credentials, and other vulnerabilities before attackers do.

Start Security Scan

Frequently Asked Questions

Does Antigravity configure Supabase RLS during scaffolding?

No. Antigravity generates the integration code and schema but leaves RLS configuration to the developer. This is the most common security gap in Antigravity-generated Supabase apps — always enable RLS on every table before deploying.

How can I tell if my Supabase tables are exposed?

Open your browser's developer tools, find the Supabase anon key in your JS bundle, then use the Supabase JS client or curl to query a table without logging in. If you get data back, RLS is not protecting that table.

What is SECURITY DEFINER and when should I use it in RPC functions?

SECURITY DEFINER makes a function run with the privileges of its creator, bypassing RLS inside the function. This is dangerous if the function doesn't validate the caller. Use SECURITY INVOKER instead, or add explicit auth.uid() checks at the top of any SECURITY DEFINER function.

Should I use a separate Supabase project for development and production?

Yes, strongly recommended. Development experimentation on a production Supabase project risks corrupting real user data and exposing production keys. Antigravity makes spinning up a second project fast — use one Supabase project per environment.