Changelog

New updates and product improvements

Here’s a recap of everything we announced during Launch Week and the month of March:

Supabase MCP Server

We are launching an official Supabase MCP server. You can use this server to connect your favorite AI tools (such as Cursor or Claude) directly with Supabase.

[Link] [GitHub]

Supabase UI Library

lw14-ui-email

A set of convenient components built on shadcn that can be dropped into any Next.js, React Router, Tanstack Start, or vanilla React application. This initial release includes the following components:

[Link]

Supabase Studio Improvements

lw14-dashboard-updates-email

We shipped a number of Supabase Studio improvements and new features. Here’s a quick rundown of what’s new:

  • Tabs!: The Table Editor and SQL Editor now have tabs!
  • Customizable Reports: create reports to show data exactly how you want to see it
  • SQL Blocks in Custom reports: use SQL Snippets in blocks inside your custom reports
  • Inline SQL Editor: use a mini SQL Editor anywhere in the Dashboard
  • Multiple AI Assistant chats: maintain history of your Assistant chats
  • Logs improvements: more detailed inspect panel, and stacked charts

[Link] [GitHub]

Edge Functions Deploy from the Supabase Dashboard

lw14-dashboard-updates-email

You can now create, test, edit, and deploy Supabase Edge Functions directly from the Supabase Dashboard.

[Link]

Realtime Broadcast from Database

Send messages based on changes in the Database, directly from the Database itself. Scale to support sending Database change messages to tens of thousands of users.

[Link]

Declarative Schemas

Use declarative schemas to define your database structure in a clear, centralized, and version-controlled manner.

[Link]

Postgres Language Server

Postgres Language Server provides a collection of language tools and a Language Server Protocol (LSP) implementation for Postgres, focusing on developer experience and reliable SQL tooling. Today, we support autocompletion, syntax error highlighting, type-checking, and a linter.

[Link]

Quick Product Announcements

  • We expanded our official Third-party Auth integrations to include Clerk. We also made Third-party Auth cheaper so that it has pricing parity with Supabase Auth. [Link]
  • We have added Deno 2.1 support for Supabase Edge Runtime. With Deno 2.1, you can use built-in tools to scaffold a new project, manage dependencies, run tests, and lints. [Link]
  • You can now automate generation and updates of embeddings in your database. [Link] [Docs]
  • Geo-aware routing for Supabase API Load Balancer optimizes requests performance for your globally distributed users. [Link]
  • Dedicated Poolers are now available in Supabase for everyone on the Pro Plan and above. [Blog] [Link]
  • The Supabase docs now support type hints. [Link]

Launch Week Hackathon Winners

  • AI RPG - An Interactive storytelling platform that enables players to create and play through AI-generated narrative adventures. [Tweet]
  • AI Travel Concierge - An app that helps you travel by suggesting destinations and attractions and planning them. [Tweet]
  • CiteAnalytics - A web analytics tool that tracks when LLM visits your website. [Tweet]
  • play.theplaylist - Create YouTube playlists with an interactive UI and easily share it with friends. [Tweet]
  • sendit - A social media content creation tool to refine posts using AI. [Tweet]
  • StoryTime - Generate educational stories for kids using AI. [Tweet]
  • Supabadge - Generate your own beautiful Supabase event badge! [Tweet]
  • SupaQuery - Supabase SQL editor with Vim support. [Tweet]
  • QuickAudit - An app that logs every DB change (INSERT/UPDATE/DELETE) for auditing. [Tweet]
  • Today’s Diary - A diary app with a minimalistic UI that lets you exchange diary entries with another random user every day. [Tweet]

Made with Supabase

  • MagiCan - Finalist of our Lovable x Supabase hackathon. An infinite canvas platform that revolutionizes collaborative storytelling and project planning with advanced AI capabilities. [Website]
  • Next.js + Stripe + Supabase A Production-Ready Template - Start building with authentication and payments in minutes. [GitHub] [Website]
  • Hono Supabase Auth Example - This example shows how to use Supabase Auth both on the client and server side with Hono. [GitHub]
  • Discover exactly when you can achieve financial independence with FireCalculator a precision calculator and visualization tools. [Website]

Community Highlights

  • Implementing multi-tenancy into a Supabase app with Clerk [Link]
  • Supabase Just Dropped Their Own Fullstack UI Library! [YouTube]
  • Generating and Storing Google Gemini Embeddings with Vercel AI SDK and Supabase [Link]
  • Secure Your Next.js App: Email & Google Authentication with Supabase, PostgreSQL RLS, and Triggers [Link]
  • Supabase just dropped an official MCP Server [YouTube]

This discussion was created from the release Developer Update - March 2025.

What better way to wrap up Launch Week 14 than a summary of what was shipped to the dashboard (as well as several other goodies that we also shipped behind the scenes 😉)

Manage your Edge Functions directly from the dashboard

image

You can now create and update your Edge Functions directly from the dashboard! We've introduced a new "Code" tab to the Edge Functions details page, which makes it possible to view and edit your Edge Function source code, then deploy the changes.

PRs:

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

Test your Edge Functions from the dashboard too!

image

To put the cherry on top, we've also introduced an Edge Function tester (which is basically a simplified version of Postman) that can be used to send requests to an Edge Function for testing. Access this UI by hitting the "Test" button while in an Edge Function 🙂

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

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

Tabs for the Table Editor and SQL Editor

For those who've been with us since the very beginning, you might remember that we used to have tabs in the Table Editor which we eventually removed 😉 We're bringing this nifty UX back with a better UX too, and also introducing this into the SQL Editor as well! Conveniently go between tables across schemas, or flip between snippets without having to navigate through your list of queries (especially if you've got tons of them!)

These are currently behind their own feature previews at the moment, which you can access by clicking on your Profile picture in the top navigation bar. Feel free to let us know what you think!

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

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

Support for multiple Assistant chats

image

We've added the ability to create and store multiple chats per project! Switch contexts without losing your conversation with the Assisant, and come back easily from where you left off thereafter too! Chats are also now scoped per project, so switching project also switches the chat.

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

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

Account Information has now been replaced with Account Identities and it'll display what identities are linked to your account (either Email and/or GitHub, or SSO). We've also added support for changing your account's email address if you've got an Email identity with us.

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

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

Support saving preference for navigation side bar expand behaviour

We've received multiple feedback from users regarding the expansion behaviour of the side navigation bar while in a project, and realised there was an almost even split between individual preferences on how the side bar should behave (keep expanded, keep closed, or expand on hover). As such, we've decided to make this behaviour controllable to your own preference, available now in the account preferences page 😄

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

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

Other bug fixes and improvements

Account

  • Fix selection of single date for audit logs not returning any results (PR)

AI Assistant

  • Cache results in browser for the queries that are generated and ran (PR)

Table Editor

  • Fix exporting tables with large amount of rows (PR)
  • Fix updating a foreign key type while trying to add a foreign key at the same time (PR)

Logs

  • Update Field Reference for logs to show parameters for Shared and Dedicated Pooler (PR)

Reports

  • Add Dedicated Pooler connections to Database report (PR)

Storage Explorer

  • Fix switching buckets while uploading files to not upload to the bucket that was switched to (PR)

Database

  • Use TimestampInfo to show relative date and times for database backups (PR)

Project Integrations

  • Add Notion FDW (PR)
  • Add Clerk FDW (PR)

We will be enforcing stricter limitations on the v0 and v1 GET Project Logs endpoint:


_10
GET /v1/projects/{ref}/analytics/endpoints/logs.all
_10
GET /v0/projects/{ref}/analytics/endpoints/logs.all

The restrictions are as so:

  • If neither ?iso_timestamp_start= nor ?iso_timestamp_end= is provided, the queried timestamp range will be the last 1 minute.
  • If either ?iso_timestamp_start= or ?iso_timestamp_end= is provided, the queried timestamp range will be a 1 minute window either before or after the provided query parameter.
  • If both ?iso_timestamp_start= and ?iso_timestamp_end= are provided, the maximum allowed queried timestamp range is 24 hours. The size of the permitted window may be subject to change in the future.

This change will go into effect at 2 April 12pm SGT (4am UTC).

Starting on April 4th, 2025, we will be enhancing the routing behavior for experimental routing on eligible Data API requests. This change affects GET requests to Data APIs only; the routing behavior for all other requests remains unchanged:

Current behavior: Round-robin distribution among all databases (primary and all read replicas) in your project

New behavior: Geo-routing that directs requests to the closest available database

This enhancement delivers a better experience for your users by minimizing latency to your project. You can maximize these benefits by strategically placing Read Replicas close to your major customer locations.

For more information on geo-routing and experimental routing, please visit our documentation

Today we’re announcing the official release of Dedicated Pooler - a PgBouncer instance co-located with your Postgres database for lower latency, better performance, and higher reliability.

This is available today for paid plans on the Supabase platform while free and paid plans continue to benefit from our Shared Pooler via Supavisor.

Why Dedicated Poolers

We created Dedicated Poolers to give you the ultimate flexibility in choosing the right connection type for your specific use case.

Now you have three options for connecting to your database and you can mix and match depending on your use case:

  1. Direct connections (All Plans): Recommended for when you are connecting using servers.
  2. Shared Pooler (All Plans): Recommended for when you are connecting using serverless functions (like Next.js or AWS Lambda) and/or IPv6-only networks.
  3. Dedicated Pooler (Paid Plans): Recommended for when you are connecting using serverless functions and you start to scale up. Available on Pro Plan and above.

How It Works

  • Dedicated Pooler (IPv6 Only) - Only transaction mode is available. For IPv4-only networks, purchase the IPv4 add on or use the Shared Pooler.
  • Shared Pooler (IPv4 + IPv6) - Both transaction and session modes are available. Use this Pooler only for networks that don't support IPv4 or if you need prepared statements.
  • Dedicated Pooler Prepared Statement Support (Coming Soon) - We plan to support prepared statements in transaction mode by upgrading all PgBouncer instances to version 1.21+.

Get started by navigating to your project’s Connect settings or learn more about Dedicated Poolers by reading the announcement or going through the docs.

On April 21, we are restricting certain SQL actions you can perform in your database’s auth, storage, and realtime schemas.

Why are we making these restrictions?

Supabase Auth, Storage, and Realtime services each rely on their respective schemas in order to function properly.

These restrictions prevent unintended side effects like third-party tooling and user defined changes altering schemas or their objects, such as migration tables and database functions, that could disrupt or break functionality.

What this means for your project

On April 21, you will no longer be able to perform the following actions on the auth, storage, and realtime schemas:

  • Create tables and database functions
  • Drop existing tables or database functions
  • Create indexes on existing tables
  • Perform destructive actions (i.e. INSERT, UPDATE, DELETE, TRUNCATE) on the following migration tables:
    • auth.schema_migrations
    • storage.migrations
    • realtime.schema_migrations
  • Revoking privileges on tables in these schemas from API roles (e.g. anon)

However, you will still have permissions to perform the following actions:

  • Create foreign keys referencing tables in the auth, storage, and realtime schemas
  • Create RLS policies and database triggers on the following tables:
    • auth.audit_log_entries
    • auth.identities
    • auth.refresh_tokens
    • auth.sessions
    • auth.users
    • storage.buckets
    • storage.migrations
    • storage.objects
    • storage.s3_multipart_uploads
    • storage.s3_multipart_uploads_parts
    • realtime.messages

How to determine if you’re affected?

  • Run the following query to check if you created any tables in the auth, storage, and realtime schemas:

_14
SET search_path = '';
_14
SELECT oid::regclass AS table_name
_14
FROM pg_class
_14
WHERE
_14
(relnamespace = 'auth'::regnamespace AND relowner != 'supabase_auth_admin'::regrole)
_14
OR (relnamespace = 'storage'::regnamespace AND relowner != 'supabase_storage_admin'::regrole)
_14
OR (
_14
relnamespace = 'realtime'::regnamespace
_14
AND relowner NOT IN (
_14
SELECT oid
_14
FROM pg_roles
_14
WHERE rolname IN ('supabase_admin', 'supabase_realtime_admin')
_14
)
_14
);

  • Run the following query to check if you created any database functions in the auth, storage, and realtime schemas:

_14
SET search_path = '';
_14
SELECT pg_catalog.format('%s(%s)', oid::regproc, pg_get_function_identity_arguments(oid::regproc)) AS function_name
_14
FROM pg_proc
_14
WHERE
_14
(pronamespace = 'auth'::regnamespace AND proowner != 'supabase_auth_admin'::regrole)
_14
OR (pronamespace = 'storage'::regnamespace AND proowner != 'supabase_storage_admin'::regrole)
_14
OR (
_14
pronamespace = 'realtime'::regnamespace
_14
AND proowner NOT IN (
_14
SELECT oid
_14
FROM pg_roles
_14
WHERE rolname IN ('supabase_admin', 'supabase_realtime_admin')
_14
)
_14
);

What you need to do

If any of the above queries return a result, you must move them to either the public schema or a schema that you’ve created. Otherwise, they will be deleted.

  • Here’s how you can move a table to another schema:

_10
CREATE SCHEMA IF NOT EXISTS my_custom_schema;
_10
ALTER TABLE storage.my_custom_table SET SCHEMA my_custom_schema;

  • Here’s how you can move a database function to another schema:

_10
CREATE SCHEMA IF NOT EXISTS my_custom_schema;
_10
ALTER FUNCTION storage.custom_function() SET SCHEMA my_custom_schema;

Additionally, if you're using Migrations or Branching, you'll need to patch your migrations to move these objects to your own schemas. E.g. if you have a migration 20250101000000_add_custom_table.sql like so:


_10
-- ...
_10
CREATE TABLE auth.my_custom_table (
_10
-- id int8 ...
_10
);
_10
-- ...

Then you need to edit it locally into:


_10
-- ...
_10
CREATE SCHEMA IF NOT EXISTS my_custom_schema;
_10
CREATE TABLE my_custom_schema.my_custom_table (
_10
-- id int8 ...
_10
);
_10
-- ...

Then you'll need to repair the migration history on the linked project:


_10
supabase migration repair --status reverted 20250101000000
_10
supabase migration repair --status applied 20250101000000

Here’s everything that happened with Supabase in the last month:

Deploy Edge Functions from the Supabase dashboard

Write your Edge Function in the dashboard using the AI Assistant and deploy it directly.

[Link]

Deploy Edge Functions from the CLI

Write your Edge Function locally and deploy it using the CLI and without having to install Docker.

[Link] [GitHub]

Deploy Edge Functions using the API

AI tools and other products that integrate with Supabase can now deploy Edge Functions using the Supabase API.

[Link] [GitHub]

Connect AI tools and LLMs to Supabase

We’ve published documentation on how to use the Model Context Protocol (MCP) to connect external AI tools to Supabase. Use natural language commands to perform operations in Supabase.

[Link] [Docs]

Third-party Auth is now less expensive

We’ve increased the MAU quota for using third-party authentication providers so it’s easier (and more cost-effective) to start using Supabase with an existing project that uses another auth provider.

[Link]

New billing documentation

Better explanations for how bills are computed, upgrading/downgrading subscriptions, and concepts such as Credits or Spend Caps.

[Docs]

Using Postgres as a Graph Database

pgRouting is a Postgres extension that can be used to add basic graph functionality to Postgres.

[Blog Post]

Quick Product Announcements

  • Invoke the SQL Editor from anywhere in the Supabase Dashboard [Link]
  • Read HubSpot data from within Postgres using the new FDW [Link]
  • Read Notion data from within Postgres using the new FDW [Link]

Made with Supabase

  • Stripe SaaS OSS with Supabase. Launch Full-Stack Apps 100x Easier.[GitHub] [YouTube]
  • Atomic CRM. The Open-Source CRM Toolkit for Personalized Solutions [GitHub] [Website]
  • GymBrah. Run your fitness business without chaos [GitHub][Website]
  • SQL Noir. Learn SQL by solving crimes [GitHub] [Website]

Community Highlights

  • Global Community Meetups [Sign up here]
  • The easiest way to get started selling SaaS with Polar [Repo]
  • Supabase 2025 Full Free Course [YouTube]
  • Build the Reddit Clone with Supabase [YouTube]
  • How to Use Cursor Agent and Supabase to Maximize Productivity [YouTube]
  • Multilingual transcription Telegram bot using Supabase and ElevenLabs Scribe API [Demo][YouTube]
  • Using Remotion Lambda with Supabase [Docs]

This discussion was created from the release Developer Update - February 2025.

You can now try Deno 2.1 locally with Supabase CLI. The goal of local preview is to identify any regressions or missing functionality before we upgrade hosted version to Deno 2.1.

The hosted version still uses Deno 1.4+, and if you deploy functions written with Deno 2.1, some of the features may not work.

UPDATE 04/09/25: hosted version is now using Deno 2.1 - https://github.com/orgs/supabase/discussions/37941

How to try


_10
[edge_runtime]
_10
deno_version = 2

  • All your existing functions should work as before.

*To scaffold a new function as a Deno 2 project:


_10
deno init --serve hello-world

  • Open supabase/config.toml and add the following:

_10
[functions.hello-world]
_10
entrypoint = "./functions/hello-world/main.ts"

  • Open supabase/functions/hello-world/main.ts and modify line 10 to:

_10
if (url.pathname === "/hello-world") {

Please give it a try and report any bugs and feedback.

We are happy to announce that we are simplifying our pricing further by greatly increasing our Third-Party Auth quotas and aligning them with our regular auth quotas.

Free PlanPro PlanTeam Plan
Before50 included50 included, then $0.00325 per MAU50 included, then $0.00325 per MAU
After50,000 included100,000 included, then $0.00325 per MAU100,000 included, then $0.00325 per MAU

With Third-Party Auth, Supabase allows you to use a different Auth provider alongside Supabase Auth and have an integrated experience, without being forced to adopt Supabase Auth straight away. This is especially useful if you'd like to start using Supabase with an existing project that uses a different auth provider.

This change is effective immediately.

Inline Editor (Feature Preview)

We're introducing a new inline editor that you may toggle through Feature Previews! 🙂 The inline editor can be used to run SQL wherever you are in the dashboard without taking you away from what you're doing. As usual, we'd love to hear what you think about this so please do feel free to share with us the good and (perhaps more importantly) the bad about this functionality right here in our GitHub discussions! 🙏 More details and information about this is also available there 😄

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

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

Other bug fixes and improvements

General

  • Fix Assistant's usability for local / self-host environment (PR)

Auth

  • Add context menu support for users to copy email or delete user (PR)
  • Add link to open user logs in the Auth logs (PR)

Billing

  • Support adding additional billing email address (PR)
  • Add Logdrain Egress to Total Egress per day usage chart (PR)

Edge Functions

  • Redirect back to main page of edge functions if navigating to a slug that doesn't exist (PR)

Advisors

  • Remove unnecessary 2dp precision for ms values in Query Performance (PR)
  • Fix retrieving indexes in use for a selected SELECT query (PR)

Schema Visualizer

  • Support downloading current view as PNG (PR)

Storage

  • Fix List view footer showing up top instead of the bottom, covering the first item in the list (PR)

Logs

  • Allow users to click on a property of a selected log and add it to search (PR)
  • Remember last visited route in the Logs section (PR)

Reports

  • Add Supavisor connections to database reports (PR)

Build in a weekend, scale to millions