Changelog

New updates and product improvements

[!NOTE]
This is only relevant for Free Plan customers.

We've relaxed the Database Size limit on the Free Plan to be 0.5 GB per active project, rather than 0.5 GB for your entire Free Plan organization (previously included paused/deleted projects within your billing cycle). This will be beneficial in a few cases:

  • When pausing or deleting projects, they will no longer count towards the Free Plan limit.
  • When launching more than one project on the Free Plan, each project is allowed 0.5 GB Database Size, rather than a total of 0.5 GB (i.e. two projects using 0.25 GB).

Before Every project that has been active at some point in your billing cycle counts towards the 0.5 GB Database Size limit. If you've deleted a project, the average Database Size will still count towards your limit. We sum up the average Database Size of all projects that are/have been active in the billing cycle. Two projects with 0.5 GB Database Size each equal a Database Size usage of 1 GB and therefore exceed the Free Plan quota.

After We only limit active projects to a Database Size of 0.5 GB per project. Deleted or paused projects, even within the billing cycle, do not count towards your Database Size limits. As long as none of your active projects exceeds 0.5 GB Database Size, you'll stay within the Free Plan limits. Two projects with 0.5 GB Database Size each would still be within the Free Plan quota, as no project is exceeding 0.5 GB.

Welcome to 2025. Here’s everything that happened with Supabase in the last month:

Supabase Integrations Page#

We added an Integrations Section to the Dashboard. Inside you’ll find useful features, like our new Postgres modules: Cron Jobs and Queues.

[Changelog]

Fix Security and Performance Issues with AI#

The AI Assistant has a new ability: it can help you understand and resolve Security and Performance issues. The issue context is passed to the assistant, which explains the issue and suggests fixes.

[Check out the Security Advisor]

SQL Editor Inline AI Assistance#

When using the SQL Editor, you can now hit CMD+K to open an inline AI assistant that will help you make changes to your query. It will only make changes to whatever you have selected, but also has the surrounding context and can access schema, policy, and function information, if needed.

[Check out the SQL Editor]

Supabase Branching Available in Vercel Integration#

Vercel Branching Integration now works with Vercel Marketplace managed projects. You can synchronize environment variables for newly created branches to your Vercel projects, no matter whether the project was created directly in Supabase or through a Vercel dashboard.

[Changelog]

Database Connection Settings Redesigned#

The “Connect” dialog has moved to the top of the Dashboard. You can access your database connection settings from anywhere. The “Connection String” tab includes guidance on when to connect via direct connection, transaction pooler, and session pooler.

[Dashboard]

Query Cloudflare D1 from Your Supabase Database#

Cloudflare D1 is a serverless SQLite service. You can now query it from your Supabase database using our Wrappers service, along with other services like BigQuery, ClickHouse, Firebase, and Snowflake.

[Docs]

Quick Product Announcements#

Dashboard

  • The Supabase Dashboard is now responsive. This is just a first step towards a more complete mobile experience. [Link]
  • Granular Disk Size usage break down by Database/WAL/System [Changelog]

Edge Functions

  • Use a custom NPM registry for Edge Function dependencies [Changelog]

Logs

Connection Pooler

  • Supavisor Session Mode on port 6543 will be deprecated on February 28, 2025 [Changelog]

Auth

  • Slack v1 OAuth has been deprecated in favor of Slack (OIDC) [Changelog]

This discussion was created from the release Developer Update - December 2024.

TypeScript users, here's a cool new feature! Starting from v2.48.0, defining custom types for JSON fields in supabase-js and using them with the JSON selector is now easier, making your code more type-safe and intuitive.

Quick Example#

Define your custom JSON type:


_34
type CustomJsonType = {
_34
foo: string;
_34
bar: { baz: number };
_34
en: 'ONE' | 'TWO' | 'THREE';
_34
};
_34
_34
export type Database = MergeDeep<
_34
DatabaseGenerated,
_34
{
_34
your_schema: {
_34
Tables: {
_34
your_table: {
_34
Row: {
_34
data: CustomJsonType | null;
_34
};
_34
// Optional: Use if you want type-checking for inserts and update
_34
// Insert: {
_34
// data?: CustomJsonType | null;
_34
// };
_34
// Update: {
_34
// data?: CustomJsonType | null;
_34
// };
_34
}
_34
}
_34
Views: {
_34
your_view: {
_34
Row: {
_34
data: CustomJsonType | null;
_34
};
_34
}
_34
}
_34
}
_34
}
_34
>

What You Get#

Now, when you query your data:


_15
const res = await client
_15
.from('your_table')
_15
.select('data->bar->baz, data->en, data->bar');
_15
_15
if (res.data) {
_15
console.log(res.data);
_15
// TypeScript infers the shape of your JSON data:
_15
// [
_15
// {
_15
// baz: number;
_15
// en: 'ONE' | 'TWO' | 'THREE';
_15
// bar: { baz: number };
_15
// }
_15
// ]
_15
}

Get Started#

Start using this feature with our guides:

Supabase CLI 2.7.0 adds support for bundling Edge Functions with static files.

You can access bundled files via Deno's file-system APIs. Here's an example function that serves a PDF file.


_14
import fs from 'node:fs'; // This should be the first import to prevent other modules to trying to use their own polyfills.
_14
_14
_14
Deno.serve(async () => {
_14
return new Response(
_14
await Deno.readFile("./my-book.pdf"),
_14
{
_14
headers: {
_14
"Content-Type": "application/pdf",
_14
"Content-Disposition": 'attachment; filename="my-book.pdf"',
_14
},
_14
},
_14
);
_14
});

Use cases#

  • Use custom Wasm modules in your Edge Functions (check this guide for more details on how to write & use wasm modules in Edge Functions)
  • Create paywalls for serving digital content like ebooks
  • HTML email templates for sending emails using Edge Functions

How to configure#

You will need to add static files to the function's directory to bundle them. Then, in the supabase/config.toml file for the project, add these lines:


_10
[functions.buy-book]
_10
static_files = [ "./functions/buy-book/my-book.pdf" ]

You can specify an array of files or use a glob pattern (eg: "./functions/email-templates/*.html")

Check the CLI configuration reference for more details: https://supabase.com/docs/guides/local-development/cli/config#functions.function_name.static_files

Note: This feature is currently not available with branching and will be added with the next stable release of the CLI.

If you're only using Transaction Mode on Connection Pooler port 6543 or already using Session Mode on port 5432 then no action is required.

On February 28, 2025, Supavisor (Supabase's Connection Pooler) is deprecating Session Mode on port 6543. After this date, port 6543 will only support Transaction Mode while port 5432 continues to support Session Mode.

We’re making this change because Session Mode is already available on port 5432 and this streamlines our connection pooler’s ports and their respective modes.

Required steps:

  1. Update your application/database clients to use port 5432 for Session Mode.
  2. In your project’s Database Settings (”Connection pooling configuration”), set “Pool Mode” to “Transaction” and click “Save” (please keep in mind that this will restart all your connections connected to the Pooler).

Please reach out to our support if you have any questions or concerns regarding this change.

UI Overhaul for Log Explorer log details#

https://github.com/user-attachments/assets/1f752ebc-a814-4f1c-845f-4659a0dc87d3

The changes here addresses some UX friction whereby depending on the query, the detail panel of the log would be hard to read. We've hence updated the log detail drawing to add better spacing, the option to expand rows, and also use our TimestampInfo tooltip in the UI as well!

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

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

Toggle for enabling connection via S3 protocol in Storage#

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

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

Credit Balance Top Up#

Screenshot 2025-01-13 at 14 43 06

It is now possible to top up your credit balance through your organization's billing settings. Read more about this in our discussions page here

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

Link: https://supabase.green/dashboard/org/_/billing

Other bug fixes and improvements#

Auth

  • Fix impersonation and searching users with single quotes (PR)

Advisors

  • Add "Ask Assistant" CTA to advisor issues (PR)

SQL Editor

  • Persist last selected database (PR)

Logs Explorer

  • Add copy as CSV + JSON options (PR)

Edge Functions

  • A number of general improvements (more details in the PR) (PR)

Cron

  • Add last and next run for cron jobs (PR)

It is now possible to top up your credit balance through your organization's billing settings. On successful payment, an invoice will be issued and you'll be granted credits. Credits will be applied to future invoices only and are not refundable. The topped up credits do not expire.

Screenshot 2025-01-13 at 14 43 06 Screenshot 2025-01-13 at 14 47 01

This can be useful in many scenarios:

  • Issues with recurring payments (i.e. due to Indian banking regulations)
  • More control about how often your credit card gets charged
  • Easier for some accounting departments
  • Yearly upfront payments

If you run out of credits while you are still on a paid plan, your credit card will be charged as usual.

If you are interested in larger (>$1,000) credit packages, please reach out.

If you are using our TypeScript SDK with automatically generated types, you are in for a treat. Starting version 2.47.12, our @supabase/supabase-js SDK will correctly validate all query filter values in eq, neq and in methods. Including not only primitives, but enums as well. In both tables, views, and arbitrarily-nested relations.

When using enums, LSP auto-completion also works out-of-the-box now.

Want to start using them? See our guides for how to get started: https://supabase.com/docs/guides/api/rest/generating-types https://supabase.com/docs/reference/javascript/typescript-support

Some organizations require using all modules from a private NPM registry for security and compliance reasons. Edge Functions now supports configuring a private registry to load all NPM modules using the NPM_CONFIG_REGISTRY environment variable.

You can define a private registry in the project's .env file or directly specify it when running the deploy command:


_10
NPM_CONFIG_REGISTRY=https://custom-registry/ supabase functions deploy my-function

You will need Supabase CLI version 2.2.8 or higher to use this feature.

Note that Edge Functions also supports importing private NPM packages (which can be published on any registry).

Check the Managing dependencies guide to learn more about how to configure and use external dependencies in your Edge Functions.

Improved mobile navigation for the dashboard#

https://github.com/user-attachments/assets/a2e1c815-6d65-486f-ae77-1d5993377c40

We've heard many feedback around mobile support for the dashboard and we're taking the first step towards supporting that 📱🙂 While this PR doesn't completely optimize the mobile UX for the dashboard, navigating around the dashboard on mobile is now supported! We'll definitely be looking into optimizing other parts of the dashboard for mobile use so stay tuned! 😉

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

Link: https://supabase.com/dashboard

Inline completions via Assistant in SQL Editor#

image

In hopes to make the Assistant's UX more seamless while in the SQL editor, we've added support for adjusting your SQL snippets inline while in the SQL editor without having to open the Assistant panel. Highlight the section that you'd like to edit, and hit CMD / CTRL + K to pop open the inline prompt 💬 Less clicking, more typing!

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

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

Improve date time editing in Table Editor Grid#

We've also seen a couple of feedback around supporting copying and pasting raw date time values from the Table Editor. We've previously been using the browser native date time input field which we've realised have been less than optimal for the following reasons:

  • Adjusting the value typically takes several clicks which can feel frustrating
  • The precision of time values in JS does not match the precision of time values in Postgres
  • The UX varies a lot across browsers since each browser has their own implementation of the native date time input

As such we've decided to move towards supporting editing your raw values for date, timestamp, and timestamptz type fields, with a helper tooltip to show the time formatted in UTC and your relative timezone. This UX also allows us to support setting values to NULL which we struggled to do so gracefully with native browser date time inputs. Hope this helps make editing your data via the Table Editor easier 🙏🙂 More screenshots available in the attached PR below!

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

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

Support for bulk delete users#

Also another feature that we've heard many requests for - you can now delete your users in bulk! Select the users that you'd like via the checkboxes and a button will appear to allow you to delete them all. There is, however, a temporary limitation that you may only delete up to 20 users at once, but we'll be looking into lifting this limitation eventually 🙂

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

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

Other bug fixes and improvements#

General

  • Add ability for Assistant to retrieve database functions within a schema (PR)
  • Limit local storage memory to 20 chat messages for Assistant (PR)
  • Support scrolling up in chat while a new response is being streamed (PR)
  • Adjust warnings for destructive prompts via the Assistant (PR)
  • Assistant to adhere to Supabase Linter rules when generating responses (PR)

Table Editor

  • Add dropdown menu item to copy table name (PR)

Build in a weekend, scale to millions