Changelog

New updates and product improvements

With @supabase/supabase-js@2.75.1 and a CLI version > 2.53.1, the type-generation and runtime support for embedded functions / computed relationships has been improved. The introspection now includes SetofOptions metadata via the supabase/postgres-meta#971, and the client library types in supabase-js now provide stronger type inference and compile-time errors for invalid function usage.

πŸ” What’s new

  • Functions returning SETOF or table types are now correctly inferred as embedded relationships (arrays) when used in .select() queries (computed relationships). Supported via SetofOptions from introspection. note: If you define a function in Postgres with RETURNS SETOF … ROWS 1, the tool-chain (introspection + type generation) will infer this as a single object instead of an array.

  • TypeScript errors at call-site when you attempt to call a function with wrong or conflicting parameters. For example:


    _10
    const res = await supabase.rpc('postgrest_unresolvable_function', { a: 'test' });
    _10
    // Error: Could not choose the best candidate function between: public.postgrest_unresolvable_function(a => integer), public.postgrest_unresolvable_function(a => text).

    This kind of error helps you catch ambiguous overloads that the introspection cannot decide between.

  • Additional error cases like:


    _10
    const res = await supabase.rpc('blurb_message', {});
    _10
    // Error: Searched for the function public.blurb_message with parameter or with a single unnamed json/jsonb parameter, but no matches were found in the schema cache.

    This corresponds to underlying PostgREST error codes PGRST202 / PGRST203.

Important caveats:

Nullable embed relationships by default: When you embed a function (computed relationship) in a .select() query, the generated type will treat the function result as possibly null, since it may not return any rows.

You can override the nullability globally using a DeepMerge override when generating types using the CLI. Example:


_17
import { MergeDeep } from 'type-fest'
_17
import { Database as DatabaseGenerated } from './database-generated.types'
_17
_17
export type Database = MergeDeep<
_17
DatabaseGenerated,
_17
{
_17
public: {
_17
Functions: {
_17
my_function: {
_17
SetofOptions: {
_17
isNotNullable: true
_17
}
_17
}
_17
}
_17
}
_17
}
_17
>

This approach mimics defining custom JSON types via MergeDeep.

However, when a function has multiple overloads or multiple SetofOptions variants (for example one overload returns from someTable β†’ someOtherTable, another returns someTable2 β†’ someOtherTable), a global override may become ambiguous:


_10
function_name:
_10
| { ..., SetofOptions: { from: 'someTable', to: 'someOtherTable' } }
_10
| { ..., SetofOptions: { from: 'someTable2', to: 'someOtherTable' } }

In such cases, the recommendation is to use the !inner hint in the query itself so the inference knows the result won’t be null:


_10
client
_10
.from('table')
_10
.select('field1, computed_relationship!inner(id)')
_10
// Inferred type:
_10
// { field1: string, computed_relationship: { id: string } }
_10
// rather than default:
_10
// { field1: string, computed_relationship: { id: string } | null }

βœ… What you should do

  1. Upgrade to @supabase/supabase-js@2.75.1 (or higher)
  2. Ensure you are using the CLI at version > 2.53.1 so that SetofOptions metadata is correctly included in the generated types.
  3. Regenerate your types (e.g., npx supabase gen types typescript …) after introspection so that functions with SETOF return types are captured with the proper metadata.

πŸ”— References

Another brief summary of changes that went into the dashboard over the past 2 weeks πŸ™‚πŸ™

Update to the Authentication Users page

image

You may have already noticed but we've recently had to make some changes to the Users page under the Authentication section, specifically around how users are fetched and searched πŸ™ The reason behind the change is primarily technical which is summarized nicely in this tweet here, but TLDR the query which the dashboard was running to retrieve users from the database wasn't performant in particular if your project had a large number of users.

Understandably this makes the UX less than ideal consequently, in particular with sorting since users are no longer sorted by "Created at" by default which was helpful for seeing new users who signed up to your application. While this is still possible by swapping the search mode to "Unified search", it was pretty inconvenient since the search configurations aren't persisted across sessions (we definitely hear all feedback as promised! πŸ™πŸ™‚)

As such and we've recently shipped an update that moves search configuration into the URL (so that refreshing keeps you in the same state), but also persist the search mode in local storage to ensure that it's restored whenever you return to the Users page.

There's definitely more than we can do here and we're actively looking into this! In the meantime, feel free to leave any thoughts or feedback in this discussion here! πŸ™‚πŸ™

PR:

Link: https://supabase.com/dashboard/project/_/auth/users

Other bug fixes and improvements

Account

  • Add settings to disable hotkeys in dashboard (PR)

General

  • Add more context for common issues in session expired dialog (PR)
  • Add visibility toggle for password input field in sign in page (PR)
  • Consolidate information in Connect dialog to reduce cognitive load (PR)

Assistant

  • Add support for rating individual assistant responses (PR)
  • Add error handler for when conversation gets too long (PR)
  • Add support for switching models for Assistant (PR)

Edge Functions

  • Add Hide / Show anonymous key CTA in Edge Function details page "Invoke function" section (PR)
  • Opt to ignore "Cannot find modules" errors in Edge Functions code editor (PR)
  • Omit quotes when pasting contents of a .env file into Edge Functions secrets (PR)

Realtime

  • Add Assistant CTA to set up realtime for project (PR)
  • Add max events per second configuration in realtime settings (PR)

Reports

  • Add timezone to tooltips (PR)

Settings

  • Improve clarity in Postgres upgrade callout regarding objects that need to be removed (PR)

Table Editor

  • Fix occasional duplicate rows issue when exporting table into CSV (PR)

SQL Editor

  • Mitigate "Unable to find snippet" issue Part 1 (PR)
  • Mitigate "Unable to find snippet" issue Part 2 (PR)

What's changed?

The Supabase MCP server is now hosted as a remote (HTTP) MCP server at the following URL:


_10
https://mcp.supabase.com/mcp

Or if you are developing locally using the CLI, you can access the MCP server at:


_10
http://localhost:54321/mcp

This makes it easier and more secure to connect your MCP clients with Supabase while expanding the number of clients Supabase can connect to.

Why remote MCP?

Up until now you had to run Supabase MCP locally via an npx command:


_10
npx -y @supabase/mcp-server-supabase@latest ...

Running the MCP server this way came with a lot of pain points:

  1. Limited MCP clients: Most web-based AI agents (like ChatGPT) are limited to HTTP-based MCP servers due to the environments they run in.
  2. Authentication was clunky: You needed to manually generate a personal access token (PAT) in order to authenticate with your Supabase account which added friction to the setup experience and had weaker security (it was easy to accidentally commit this to source control).
  3. Setup was tricky: You needed Node.js installed to run the server, needed to make sure your environment was configured correctly with the right version, and you needed to modify the command slightly based on the operating system you were running.

Now with remote MCP, you are able to connect Supabase with many more MCP clients, you authenticate using a much simpler browser-based OAuth 2 flow, and setup is much easier. We also built an interactive widget to help you connect popular MCP clients to Supabase and customize the URL to your preferences (like project-scoped mode and read-only mode).

Security reminder

A friendly reminder to never connect MCP to production data! Supabase MCP was designed from the beginning to assist with app development and shouldn't be connected to production databases. See our post on Defense in Depth for MCP Servers.

More info

Read more about all the features in the Remote MCP blog post!

We recently rolled out a change that updates pgmq version from 1.4.4 to 1.5.1 for new projects created with release version https://github.com/supabase/postgres/releases/tag/17.6.1.016 and newer.

There is a potential breaking change for users of the delay parameter as discussed here https://github.com/pgmq/pgmq/releases/tag/v1.5.0 for versions 1.5.0 and newer

However, there is a temporary issue with upgrade of existing projects with just the pgmq extension. At the moment if you trigger an upgrade, your pgmq extension will remain on version 1.4.4 until we fix this upgrade issue. We'll report back here when this is fixed. It will likely be fixed by an upstream contribution or fix of the extension itself, and a release of a version newer than 1.5.1

Again, once this issue is resolved we'll update this changelog issue, although users should still be aware of the potential breaking change

Another brief summary of changes that went into the dashboard over the past 2 weeks, but before that...

Supabase Select just wrapped up over the weekend!

image

If you might have missed it or want to get involved - Livestreams are available on the Supabase Youtube channel, or on our site here! A huge thank you to everyone in the community for joining us on this journey thus far - and as always let us know any feedback / ideas / thoughts, anything! We promise we look at every message that comes in πŸ™‚πŸ™

Assistant Improvements

image

We've been shipping some incremental improvements to the Assistant which involves both better response speeds, better quality outputs, and better UX with a more action-oriented approach (along with some style refinements to messages and tools)! πŸ€–πŸ™‚

These are all in hopes to support you while building out with Supabase and we're still looking into how we can make the experience even better for you! Feel free to leave any feedback or ideas in this thread on how we can further improve the Assistant πŸ˜„πŸ™

PR:

Link: https://supabase.com/dashboard/project/_

Contextual error handling in Table Editor

Enabling users to self-debug when running into issues have been at the forefront of our priority recently - this is just a small addition to that topic in which we're opting to provide contextual errors in the table editor, specifically when applying filters πŸ™‚πŸ”

Hopefully these will provide better clues while working with the Table Editor instead of just merely showing "Failed to retrieve rows" - and we're hoping to expand this further too to cover more cases! πŸ™

PR: https://github.com/supabase/supabase/pull/39004

Link: https://supabase.com/dashboard/project/_/editor

Other bug fixes and improvements

General

  • Improve clarity of errors for organization member invite flow (PR)
  • Fix deleting project not refreshing list of projects on home page (PR)

Table Editor

  • Fix "New table" button not working if on an unknown table (PR)
  • Improve stability of tab state syncing between URL params and local storage (PR)
  • Use session storage as default cache for tab state (PR)
  • Ensure CSV chunk uploads handle rate limits properly (PR)
  • Refrain from applying a default sort on JSON columns (PR)
  • Flatten copy cell and row actions in context menu (PR)

Storage Explorer

  • Fix long bucket names blocking bucket actions (PR)

Integrations

  • Fix webhooks HTTP headers for edge functions not loading Auth headers on first open (PR)

Advisors

  • Query performance improve layout of metadata in query details panel (PR)
  • Query performance consolidate time consumed and total time columns (PR)
  • Query performance make query pattern expandable (PR)
  • Query performance improve time consumed text to be more human readable (PR)

Reports

  • Improve tooltip UX (PR)
  • Make chart highlight actions configurable per chart (PR)
  • Use is instead of matches in API filters (PR)
  • Fix max pooler connections tooltip (PR)
  • Always show tooltip values (PR)

What Changed

We've consolidated all Supabase JS client libraries into a unified monorepo at supabase/supabase-js.

For Package Users πŸ‘₯

Nothing changed for you! Continue installing packages as usual:


_10
npm install @supabase/supabase-js
_10
npm install @supabase/auth-js
_10
npm install @supabase/storage-js
_10
etc.

For Contributors πŸ› οΈ

All development now happens in the monorepo:

Old repositories (will be archived soon):

  • supabase/auth-js
  • supabase/postgrest-js
  • supabase/realtime-js
  • supabase/storage-js
  • supabase/functions-js

New location: All libraries are now under packages/core/ in supabase/supabase-js

Benefits

  • Fixed versioning - all packages share the same version for compatibility
  • Atomic changes - fix bugs across libraries in single PRs
  • Better testing - immediate integration testing without manual releases
  • Unified tooling - consistent build, test, and release processes

Getting Started

  1. Fork and clone: github.com/supabase/supabase-js
  2. Read the guides: Complete documentation in the new repository
  3. Use Nx commands: npx nx test auth-js, npx nx build storage-js, etc.

Documentation

All documentation is now in the monorepo:

Questions?

Another brief summary of changes that went into the dashboard over the past 2 weeks! πŸ™‚

Couple of improvements to the Query Performance Advisor

image

We've been shipping incremental improvements to the Query Performance Advisor in hopes to simplify the usability of the report despite all the information present on the page πŸ™πŸ™‚ There's quite a few tidbits there so check out the advisor and let us know what you think! Huge shoutout to @kemaldotearth for this one! πŸ˜„

PRs:

URL: https://supabase.com/dashboard/project/_/advisors/query-performance

Configure to save Auth Audit Logs in project's database

image

We've added a new page under the Auth section "Audit Logs" which will allow you to toggle disabling writing Auth audit logs to your project's database. The Auth audit logs will still be available in the auth logs but doing so will then prevent the audit logs from taking up your project's database space, which subsequently reduces your database storage costs. Read more about this in our docs here!

PR: https://github.com/supabase/supabase/pull/37409

URL: https://supabase.com/dashboard/project/_/auth/audit-logs

Other bug fixes and improvements

Table Editor

  • Shift refresh button to top nav for better visibility (PR)
  • CSV imports will show row number with the error to give a more actionable message (PR)
  • Fix default value placeholder for fields with foreign keys (PR)
  • Add support for expanding rows into a side panel for foreign tables (FDW) (PR)
  • Add contextual errors for foreign tables if failed to fetch rows (FDW) (PR)

Integrations

  • Fix webhooks HTTP headers for edge functions not loading auth headers on first open (PR)

Reports

  • Chart highlight actions can be configured per chart (PR)

On July 24, 2025 Supabase deployed an updated version of our Data API (Postgrest) v13 that came with a more strict approach to JWT validation.

Some customers experienced issues when using custom JWT.

Recently, we published updates to our documentation at https://supabase.com/docs/guides/auth/jwts#verifying-with-the-legacy-jwt-secret-or-a-shared-secret-signing-key and https://supabase.com/docs/guides/auth/signing-keys#getting-started that give instructions on how to re-import the custom signing key, which will resolve this issue going forward.

Here's a brief summary of the changes that went into the Supabase dashboard over the past two weeks between the 18th of August to 1st September 2025! πŸ™ As always - we promise that we read through every feedback that comes to us so don't hesitate to share any ideas or thoughts! πŸ˜„

Set expiration dates for Personal Access Tokens

https://github.com/user-attachments/assets/7ba131ff-3fd6-4454-9d6f-85cd1049773a

You can now set an expiration date when creating Personal Access Tokens! Expiration can be configured using preset durations, a custom date (up to 1 year), or set to never expire. Feel free to leave any thoughts or feedback in our discussion here!

PR: https://github.com/supabase/supabase/pull/37908

Link: https://supabase.com/dashboard/account/tokens

Sync tooltips in Reports across all charts

Screenshot 2025-09-01 at 23 33 07

You can now sync either chart headers and/or tooltips in your project's built-in reports to better visualize your data across different metrics at a specific point in time! This can be toggled with the settings button in the built-in reports pages (although the tooltip value break downs are available from the Team plan and above πŸ™‚)

PR: https://github.com/supabase/supabase/pull/37866

Link: https://supabase.com/dashboard/project/_/reports

UI update to Auth RLS policies page

image

As part of an ongoing effort to improve consistency of the dashboard layouts across all pages, the UI of the Auth Policies page has been updated, and the changes further emphasizes tables with RLS disabled with an amber accent. Let us know what you think! πŸ™‚πŸ™

PR: https://github.com/supabase/supabase/pull/38204

Link: https://supabase.com/dashboard/project/_/auth/policies

UI update to Integrations page

image

Similar to the above, the project Integrations page has also gotten an update to bring the UX and layout closer to other parts of the dashboard. Cron and Queue integrations have also been updated to use the Data Grid for listing cron jobs and queues πŸ˜„

PR: https://github.com/supabase/supabase/pull/38113

Link: https://supabase.com/dashboard/project/_/integrations

Assistant UI Refinements to improve transparency of tool calls

Screenshot 2025-09-01 at 23 50 42

We've made some adjustments to the UI of the Assistant as well as the prompt rendering to improve readability, but importantly also looked into enhancing the transparency of tools calls by the Assistant which aims to reveal the thought process of the Assistant.

We're constantly trying to improve the Assistant's response quality and are currently still in the process of tweaking things in hopes to support you working with Supabase and Postgres better! πŸ’ͺ🏻 If you might have any ideas or feedback from using the Assistant, don't hesitate to leave them in this thread! πŸ˜„

PR: https://github.com/supabase/supabase/pull/38228

Link: https://supabase.com/dashboard/project/_

Other bug fixes and improvements

Account Preferences

  • Updated layout of account preferences pages to improve consistency of IA (PR)
  • Support for updating profile's username and primary email (PR)

AI Assistant Shoutout to @taishikato for the contributions here - we really appreciate it! πŸ™‚πŸ™

  • Added support for editing messages to the Assistant (PR)
  • Added support for deleting messages to the Assistant (PR)
  • Added support to stop Assistant responses mid stream (PR)

Table Editor

  • Fix CSV import for Postgres array types (PR)
  • Fix copy action copies whole cell value even if only a subset of the value is highlighted while editing cell (PR)

SQL Editor

  • Search list items now have context menu support (PR)
  • Fix searching doesn't show snippets that are within folders (PR)

Storage Explorer

  • Prevent creating folders of the same name but different casing (PR)
  • Fix editing a bucket not selecting the right unit if a bucket had a file size limit greater than 1KB (PR)

Reports

  • Updated chart colors to improve contrast (PR)

General Shoutout to @saeris for multiple contributions towards cleaning up our code base with replacing deprecated components and improving our UI consistency across the dashboard! Thank you so much! πŸ˜„πŸ™

  • General cleaning up of deprecated components + improving UI consistency (Changes)
  • Added table view for organizations project's page (PR)
  • QOL UX improvement to tables by adding shadows on inner scroll if there's more contents available (PR)

You can now set an expiration date when creating Personal Access Tokens. Expiration can be configured using preset durations, a custom date (up to 1 year), or set to never expire.

Additionally, token usage is now tracked (with updates up to every 15 minutes), making it easier to identify unused tokens and safely remove them.

https://github.com/user-attachments/assets/7ba131ff-3fd6-4454-9d6f-85cd1049773a

March Beta 2021

Apr 6, 2021

Launch week, Storage, Supabase CLI, Connection Pooling, Supabase UI, and Pricing. Here's what we released last month.

This is also available as a blog post and a video demo.

Supabase Storage

Need to store images, audio, and video clips? Well now you can do it onΒ SupabaseΒ Storage. It's backed by S3 and our newΒ OSS storage APIΒ written in Fastify and Typescript. Read the full blog post.

Connection Pooling

TheΒ SupabaseΒ API already handles Connection Pooling, but if you're connecting to your database directly (for example, with Prisma) we nowΒ bundle PgBouncer. Read the full blog post.

React UI Component Library

We open sourced our internal UI component library, so that anyone can use and contribute to theΒ SupabaseΒ aesthetic. It lives atΒ ui.supabase.ioΒ . It was also the #1 Product of the Day on Product Hunt.

CLI

Now you can runΒ SupabaseΒ locally in the terminal with supabaseΒ start. We have done some preliminary work on diff-based schema migrations, and added some new tooling for self-hostingΒ SupabaseΒ with Docker.Β Blog post here.

OAuth Scopes

Thanks to a comunity contribution (@_mateomorris and @Beamanator), Supabase Auth now includes OAuth scopes. These allow you to request elevated access during login. For example, you may want to request access to a list of Repositories when users log in with GitHub. Check out theΒ Documentation.

Kaizen

  • You can now manage your PostgREST configuration inside the Dashboard.
  • Our website has been redesigned. Check out our new Homepage and Blog, and our new Database, Auth, and Storage product pages.
  • We refactored some of our Filter methods to make them even easier to use. Check out the Full Text Search refactor.
  • We have added several new sections to our Docs including: Local Dev, Self Hosting, and Postgres Reference docs (all still under development).

Supabase is an open source Firebase alternative. We've now been building for one year. Here's what we released last month.

This is also available as a blog post and a video demo.

Dashboard Sidebars

We've improved the UX of our Dashboard with sidebars in every section, including the Table view, the Auth section, and the SQL Editor.

SQL Autocomplete

Writing SQL just got 10x easier. We added autocomplete to the SQL editor, including table & column suggestions.

Auth Redirects

Redirect your users to specific route within your site on signIn() and signUp().

Redirect your users after sign up

Learning Resources

We've released a new Resources section in our docs, as well as two new Auth modules: GoTrue Overview and Google OAuth.

New Region

Launch your database in South Africa.

Kaizen

New year, new features. We've been busy at Supabase during January and our community has been even busier. Here's a few things you'll find interesting.

This is also available as a blog post and a video demo.

Count functionality

Anyone who has worked with Firebase long enough has become frustrated over the lack of count functionality. This isn't a problem with PostgreSQL! Our libraries now have support for PostgREST's exact, planned, and estimated counts. A massive thanks to @dshukertjr for this adding support to our client library.

New Auth Providers

We enabled 2 new Auth providers - Facebook and Azure. Thanks to @Levet for the Azure plugin, and once again to Netlify's amazing work with GoTrue to implement Facebook.

Auth Audit Trail

We have exposed the audit trail directly in the dashboard, as well as the GoTrue logs. Great for security and debugging.

Auth UI widget

In case our Auth endpoints aren't easy enough already, we've built a React Auth Widget for you to drop into your app and to get up-and-running in minutes.

New auth.email() function

We added a helper function for extracting the logged in user's email address.

New Regions

Launch your database in London or Sydney!

Launch your database in London or Sydney

Copy rows as Markdown

You can now copy SQL results as Markdown - super useful for adding to blogs and issues.

React server components

If you're excited by React Server components then check out the Supabase + Server Components experimental repo. https://github.com/supabase/next-server-components

Learn

We know that Auth can be a bit daunting when you're just starting out, so we have created some intro videos to get you up to speed in no time:

Kaizen

  • Performance: We migrated all of our subdomains to Route53, implementing custom Let's Encrypt certs for your APIs. As a result, our read benchmarks are measuring up 12% faster.
  • Performance: We upgrade your databases to the new GP3 storage for faster and more consistent throughput.

After 10 hectic months of building, Supabase is now in Beta.

This is also available as a blog post and a video demo.

Supabase is now in Beta

We spent months working on Performance, Security, and Reliability. Read more on our Beta Page.

This image shows our Beta Page

Improve your docs inline

Add comments and descriptions to your Tables directly from our auto-generated docs.

Table View now has realtime changes

Any updates that happen to your database are reflected in the Table View immediately.

Table Pagination

Our table view now has pagination - better for working with large data sets.

Supabase raised a Seed Round

We raised $6M from Y Combinator, Mozilla, and Coatue. You can read more on TechCrunch.

Kaizen

  • Supabase is now 26% faster in regions which support Graviton (1460 reqs/s up from 1167 reqs/s)
  • We launched a new region in Sao Paulo.
  • Postgres Array Support. You can now edit Native Postgres array items in the grid editor or the side panel.
  • We added better support for your custom Database Types.
  • Fixed some buggy keyboard commands. We're continuously improving key commands in the Table editor.

We've been building for 9 months now, are we're getting even closer to Beta.

This is also available as a blog post and a video demo.

Add users

You can now add users manually from your dashboard.

User admin

You can also perform admin functions on existing users - send password reset emails, magic links, and delete users.

Even more powerful SQL Editor

Last month we announced an improved SQL Editor, and this month we've taken it even further. The SQL Editor is now a full Monaco editor, like you'd find in VS Code. Build your database directly from the browser.

Status page

We added a Status Page which tracks the uptime and latency of the Supabase platform.

Kaizen

  • We completed a security audit by DigitalXRAID.
  • Email confirmations now enabled by default for signups.
  • Updated Benchmarking Suite to include more realistic workloads, on various different servers (results published soon).
  • You can now set/edit/remove Foreign Keys via the table editor.

We're now 8 months into building Supabase. We're focused on performance, stability, and reliability but that hasn't prevented us from shipping some great features.

This is also available as a blog post and a video demo.

Supabase.js 1.0

In the lead-up to our Beta launch, we've released supabase-js version 1.0 and it comes with some major Developer Experience improvements. We received a lot of feedback from the community and we've incorporated it into our client libraries for our 1.0 release.

Check out the blog post to learn more.

More powerful SQL Editor

Although it was only intended to be a temporary feature, the SQL Editor has become one of the most useful features of Supabase. This month we decided to make give it some attention, adding Tabs and making it full-screen. This is the first of many updates, we've got some exciting things planned for the SQL Editor.

Keyboard shortcuts for Power Users

For the heavy table editor users, we've gone ahead and added a bunch of key commands and keyboard shortcuts so you can zip around and manipulate your tables faster than ever.

One of the most requested Auth features was the ability to send magic links that your users can use to log in. You can use this with new or existing users, and alongside passwords or stand alone.

Kaizen

  • We have new and improved docs.
  • We converted realtime-js to TypeScript.
  • Dashboard Performance: we heavily optimised our dashboard routes.
  • With the help of the community, we closed a lot of issues during Hacktoberfest.
  • We have started benchmarking all the open source tools we use. We'll publish the results this month.

Build in a weekend, scale to millions