Supabase's 30 Oct change: new tables need a GRANT
If your app was built with Lovable, Bolt or another AI builder on top of Supabase, here's what changes on 30 October 2026, how to tell if it hit you, and the fix. Short version: your existing tables keep working; the next new table won't, until it gets a GRANT.
The short answer: on 30 Oct 2026 Supabase applies its new default to all existing projects. New tables in the public schema are no longer exposed to the Data API (the REST and GraphQL layer that supabase-js calls) until you add an explicit Postgres grant. Existing tables keep their grants. A missing grant returns error 42501 "permission denied for table". Fix it with a least-privilege grant, keep row level security on Verified, Supabase changelog, read 28 Oct 2026.
What changes on 30 October
Until now, Supabase granted select, insert, update and delete on every new table in public to the anon, authenticated and service_role roles, so a table was reachable from your app the moment it was created. Supabase is turning that off Verified:
| Date | What happens (Supabase's changelog) |
|---|---|
| 28 Apr 2026 | Opt-in setting at project creation |
| 30 May 2026 | New default for all new projects (gradual rollout) |
| 30 Oct 2026 | Enforced on all existing projects. Tables without explicit grants stop being reachable via the Data API |
What doesn't change, per Supabase: existing tables "keep their current grants and stay reachable"; row level security works the same; tables in storage, auth, realtime and custom schemas are untouched; and apps that only use a direct Postgres connection (psql, an ORM, a connection string on a server) are not affected Verified. Supabase's reason: AI tools, scripts and agents now create tables without a human reviewing the change, and default grants made it easy to expose a table before it was secured.
Who's affected
Supabase says you need to act if your app reads or writes public tables through the Data API (supabase-js, any client library, or requests to /rest/v1/ or /graphql/v1), or if your migrations or "AI coding tool" create tables without GRANT statements and expect them to be reachable Verified.
That describes most apps built with AI on Supabase: the browser talks to …supabase.co/rest/v1/ directly, and the AI writes the migrations. In our own test on 16 Oct 2026, Lovable's app ran on Lovable Cloud (Supabase-compatible) and Bolt's on Bolt Database (Supabase) Observed. Lovable also lets you connect a Supabase project you own, where it designs the schema and runs migrations Verified, Lovable docs.
What we haven't verified: whether the managed backends (Lovable Cloud, Bolt Database) get the change on the same date, and whether Lovable or Bolt now add grants automatically. If you connected your own Supabase project, assume it applies. Either way, the check below takes two minutes.
Base44's app in our test used Base44's own built-in database, not Supabase Observed, so this change only matters there if you connected Supabase yourself.
How to tell if it hit you
- The symptom: a feature that uses a table created on or after 30 Oct doesn't load or doesn't save, while older features work. Supabase says clients often report the error as a 401 or 403 Verified, Supabase troubleshooting doc.
- Where to look in the browser: open developer tools (F12), Network tab, reload, and click the failing request to
…supabase.co/rest/v1/plus a table name. A missing grant looks like this:
The{ "code": "42501", "message": "permission denied for table your_table", "hint": "Grant the required privileges to the current role with: GRANT SELECT ON public.your_table TO anon;" }hintnames the role and the exactGRANTthat's missing Verified. - Don't confuse it with a policy error. The same code 42501 with the message "new row violates row-level security policy" is a row level security problem, not this change. We saw that one in Lovable's and Bolt's apps when user B tried to write a row as user A, which was the app working correctly Observed, 16 Oct 2026 (two-account test).
- Where to look in Supabase: Supabase says the Security Advisor flags affected tables and shows the fix SQL, and the Table Editor shows a Data API exposure badge Verified. To see a table's grants, run this in the SQL Editor (from Supabase's troubleshooting doc):
No rows forselect grantee, privilege_type from information_schema.role_table_grants where table_name = 'your_table';authenticatedon a table your signed-in users need = missing grant.
The fix: GRANT, and keep RLS on
Supabase says to treat these three steps as one unit, in the same migration: grant, enable RLS, add policies. "If the grant is missing, Postgres rejects the query before RLS comes into play" Verified.
-- 1. Grant only what each role needs (from Supabase's changelog)
grant select on public.your_table to anon; -- only if logged-out visitors should read it
grant select, insert, update, delete on public.your_table to authenticated;
grant select, insert, update, delete on public.your_table to service_role;
-- 2. Keep row level security on
alter table public.your_table enable row level security;
-- 3. Add the policies you need
create policy "users can read their own rows"
on public.your_table
for select
to authenticated
using (auth.uid() = user_id); - Least privilege. Leave
anonout unless logged-out visitors are meant to read that table. Aprofilesorinvoicestable usually shouldn't be readable byanonInferred. - Grants don't replace RLS. Supabase's docs: grants control whether a role can reach a table, RLS controls which rows. A table exposed through the Data API without RLS can be accessed by any role with matching grants, and
anonis your public key Verified, Securing your API. - Don't "fix" it by granting everything. Granting all tables in the schema to
anonat once also opens any table where RLS was never switched on Inferred.
Example prompt for Lovable, Bolt or your coding agent
An example we wrote, not a tested recipe. Replace the brackets, paste it in, then reload the page with the Network tab open and confirm the 42501 is gone.
Supabase also suggests updating your AI tool's system prompt, or using its agent skill, so grants are added by default.
Want someone to check your live app?
The Launch Check ($29) opens your live app in a real browser on desktop and on a phone, signs up as a new user and goes through up to 25 pages. For Supabase apps it checks whether your tables can be read with the public key from your site and whether the 30 Oct change affects you. You get a private report with a copy-paste fix prompt for each problem within 48 hours. It's separate from our rankings: your app is never ranked, and payment never changes a tool's score or tier.
See the Launch Check →Honest limits
- This guide is built from Supabase's own pages, read 28 Oct 2026. We have not run the change on a test project; docs and rollout plans can change.
- Not verified: how Lovable Cloud and Bolt Database handle the change, or whether those builders add grants for you.
- The SQL is copied from Supabase's changelog and docs; the prompt is our example. Grant only what your app needs.
Sources
- Supabase changelog: Breaking Change: Tables not exposed to Data and GraphQL API automatically (dates, who's affected, fix SQL, 42501 example)
- Supabase docs: Securing your API (grants vs RLS, "Grant access explicitly")
- Supabase docs: Database API 42501 errors (401/403, checking a table's grants)
Keep going
- The two-account test: can user A see user B's data? Includes the public-key check for Supabase tables.
- The 12-step pre-launch checklist, built from the bugs our tests found.
- What each builder made in our test: Lovable review · Bolt review
- All guides · Disclosures
Evidence labels: Verified = read on the named official page on 28 Oct 2026 (links above). Observed = seen in our own v1 run on 16 Oct 2026. Inferred = our reading. What the labels mean. Supabase didn't pay us and there are no affiliate links on this page.
FAQ
What does the Supabase change on 30 October 2026 do?
From 30 Oct 2026, Supabase applies its new default to all existing projects: new tables you create in the public schema are no longer reachable through the Data API (the REST and GraphQL layer that supabase-js calls) until you add an explicit Postgres GRANT. Existing tables keep their current grants and keep working. Row level security is unchanged. Source: Supabase changelog 45329, read 28 Oct 2026.
Will my Lovable or Bolt app break on 30 October?
Not on the day, according to Supabase: existing tables keep their grants. The risk starts the next time a table is created in the public schema without a GRANT, for example when you ask your AI builder for a new feature. That table exists but the app gets error 42501 "permission denied for table". Whether Lovable Cloud and Bolt Database projects get the change on the same date, and whether those builders now add grants for you, we have not verified.
How do I know if error 42501 is the GRANT problem?
Open your browser developer tools, Network tab, and look at the failing request to …supabase.co/rest/v1/ plus a table name. If the response has code 42501 and the message "permission denied for table", a grant is missing, and the hint names the GRANT you need. If the message is "new row violates row-level security policy", it is a row level security policy problem, not this change. Supabase says clients often report 42501 as a 401 or 403.
How do I fix error 42501 permission denied for table in Supabase?
Grant only the privileges each role needs on that table, keep row level security on and add policies, in the same migration. For signed-in users that is usually grant select, insert, update, delete on public.your_table to authenticated. Grant to anon only if logged-out visitors should read the table. Supabase documents this under "Grant access explicitly" in its Securing your API guide.
Does this affect apps that don't use Supabase?
No. It is a Supabase Data API change. Supabase says apps that only talk to Postgres over a direct connection (psql, an ORM or a server with a connection string) are not affected, and tables in the storage, auth, realtime and custom schemas keep their current grants and defaults.
How to cite
VibeTierList, "Supabase's 30 Oct change: new tables need a GRANT", updated 28 Oct 2026. https://vibetierlist.com/guides/supabase-oct-30-data-api-change/