Updated 28 Oct 2026 · built from Supabase's own changelog and docs, read 28 Oct 2026 · not a test

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:

DateWhat happens (Supabase's changelog)
28 Apr 2026Opt-in setting at project creation
30 May 2026New default for all new projects (gradual rollout)
30 Oct 2026Enforced 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

  1. 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.
  2. 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:
    {
      "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;"
    }
    The hint names the role and the exact GRANT that's missing Verified.
  3. 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).
  4. 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):
    select grantee, privilege_type
    from information_schema.role_table_grants
    where table_name = 'your_table';
    No rows for authenticated on 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 anon out unless logged-out visitors are meant to read that table. A profiles or invoices table usually shouldn't be readable by anon Inferred.
  • 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 anon is your public key Verified, Securing your API.
  • Don't "fix" it by granting everything. Granting all tables in the schema to anon at 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.

From now on, every time you create a new table in the Supabase public schema, put explicit GRANT statements in the same migration as the table, its row level security and its policies. Grant select, insert, update and delete to authenticated and service_role only where the app needs them. Grant select to anon only for tables that logged-out visitors are meant to read. Never turn row level security off and never grant to all tables in the schema at once. Now check the table [your_table], which returns error 42501 "permission denied for table": add the missing grants, keep RLS on, and list the grants and policies you added.

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

Keep going

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/