Supabase has reached General Availability

Learn more

Changelog

New updates and product improvements

Join us for a Special Announcement April 15-19

Special Announcement April 15-19

We’re making a Special Announcement on April 15th with a few more surprises throughout the week. Claim your ticket today so you don’t miss out and enter for a chance to win a set of AirPods Max.

Claim your ticket

Increased Supavisor connection pooler limits

Increased Supavisor connection pooler limits

We’ve increased the Supavisor client connection limits, the number of concurrent clients that can connect to your project’s pooler, for projects on Small, Medium, Large, and XL compute instances while pricing remains unchanged.

Announcement

Conversational AI assistant now available in SQL Editor

Conversational AI assistant in SQL Editor

Introducing a conversational AI assistant in the SQL Editor to help you write and iterate on your queries. This is currently under a feature preview and can be enabled with instructions here.

Announcement

Supavisor pooler port 6543 is transaction-mode only

Supavisor pooler port 6543 is transaction-mode only

We’re simplifying Supavisor connection pooler ports and modes so that port 6543 is only transaction mode and port 5432 continues to be only session mode. If you have pool mode set to session we recommend you switch to pooler port 5432 and set the mode to transaction.

Pull request

Migration to v2 platform architecture

v2 platform architecture migration

You may have noticed improved performance from your database over the last couple of weeks. We made some architectural changes to free up resources for your Postgres instance by removing Storage, Realtime, and Pgbouncer from your instance and each are replaced with an equivalent multi-tenant solution, including our new Supavisor connection pooler.

Announcement

Implementing semantic image search with Amazon Bedrock and Supabase Vector

Semantic image search with Amazon Bedrock and Supabase Vector

In this post we'll be creating a Python project to implement semantic image search featuring Amazon Bedrock and Amazon Titan’s multimodal model to embed images and Supabase Vecs client library for managing embeddings in your Supabase database with the pgvector extension.

Blog post

Quick Product Announcements

  • [Postgres Tooling] vector (pgvector) upgraded to v0.6.2 enables faster HNSW index builds using more parallel workers [Commit]
  • [Postgres Tooling] pg_cron upgraded to v1.6.2 enables sub-minute schedules [Pull request]

Made With Supabase

  • location-tRacer - Supabase Realtime live location sharing app [GitHub]
  • Talk to your docs - An example agent providing help on your GitHub documentation [GitHub]
  • Feedbase - Open-source solution for collecting feedback & communicating updates [GitHub]
  • Wacky Wordcraft - Create wacky stories with some help from AI [Twitter]
  • Capgo - Instant updates for Capacitor apps. Ship updates, fixes, changes, and features within minutes [Website]

Community Highlights

  • Building an Investor List App with Novu and Supabase [Blog post]
  • 3 reasons you should use Postgres Functions and Transactions [Video]
  • Add image support to Flutter web application with Supabase Storage [Video]
  • How to set up a secure Supabase project [Blog post]
  • Dynamic Role and Permission Management in Supabase: Enhancing Security and Flexibility [Blog post]
  • Simulate Supabase Postgres RLS (Row Level Security) [Blog post]
  • Monitor Supabase databases and Edge Functions [Blog post]

This discussion was created from the release Platform Updates: March 2024.

Overview

This post explains how authorization works for Realtime Broadcast and Realtime Presence.

This allows you (the developer) to control access to Realtime Channels. We use Postgres Row Level Security to manage access. Developers create “Policies” which allow or deny access for your users.

Usage

Creating Realtime Policies

In your Supabase Studio

  1. Select Authentication
  2. Select Policies
  3. Change the schema to he the realtime schema
  4. Click Create a new policy
Studio guidance

Now if we wanted to create channels that are only usable by authenticated users we would have the following rules:

Channels rule to connect the channel


_27
-- Set permissions for channels
_27
CREATE POLICY authenticated_read_channel
_27
ON realtime.channels FOR SELECT
_27
TO authenticated
_27
USING ( true );
_27
_27
-- Set permissions for broadcasts
_27
CREATE POLICY authenticated_read_broadcast
_27
ON realtime.broadcasts FOR SELECT
_27
TO authenticated
_27
USING ( true );
_27
_27
CREATE POLICY authenticated_write_broadcast
_27
ON realtime.broadcasts FOR UPDATE
_27
TO authenticated
_27
USING ( true );
_27
_27
-- Set permissions for presences
_27
CREATE POLICY authenticated_read_presence
_27
ON realtime.presences FOR SELECT
_27
TO authenticated
_27
USING ( true );
_27
_27
CREATE POLICY authenticated_write_presence
_27
ON realtime.presences FOR UPDATE
_27
TO authenticated
_27
USING ( true );

The Policies screen will now have the policies you set for each table

Screenshot_2024-04-03_at_22 39 03

Since you are using RLS policies you can do more complex examples.

In a scenario where you have a schema with a table for rooms and one that creates an association between rooms and users.

example_schema

Example schema to be used in RLS policies

We can build more complex RLS rules using this information:


_62
-- Set permissions for channels
_62
CREATE POLICY authenticated_read_channel
_62
ON realtime.channels FOR SELECT
_62
TO authenticated
_62
USING (
_62
exists(
_62
select 1
_62
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_62
where ru.user_id = auth.uid()
_62
and r.name = realtime.channel_name()
_62
)
_62
);
_62
_62
-- Set permissions for broadcasts
_62
CREATE POLICY authenticated_read_broadcast
_62
ON realtime.broadcasts FOR SELECT
_62
TO authenticated
_62
USING (
_62
exists(
_62
select 1
_62
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_62
where ru.user_id = auth.uid()
_62
and r.name = realtime.channel_name()
_62
)
_62
);
_62
_62
CREATE POLICY authenticated_write_broadcast
_62
ON realtime.broadcasts FOR UPDATE
_62
TO authenticated
_62
USING (
_62
exists(
_62
select 1
_62
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_62
where ru.user_id = auth.uid()
_62
and r.name = realtime.channel_name()
_62
)
_62
)
_62
_62
-- Set permissions for presences
_62
CREATE POLICY authenticated_write_presence
_62
ON realtime.presences FOR UPDATE
_62
TO authenticated
_62
USING (
_62
exists(
_62
select 1
_62
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_62
where ru.user_id = auth.uid()
_62
and r.name = realtime.channel_name()
_62
)
_62
);
_62
_62
CREATE POLICY authenticated_read_presence
_62
ON realtime.presences FOR SELECT
_62
TO authenticated
_62
USING (
_62
exists(
_62
select 1
_62
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_62
where ru.user_id = auth.uid()
_62
and r.name = realtime.channel_name()
_62
)
_62
);

And we can imagine other use cases like checking the role of the user to match a certain value:


_14
-- Policy where only authenticated users with the role admin would be able to broadcast
_14
_14
CREATE POLICY authenticated_write_broadcast
_14
ON realtime.broadcasts FOR UPDATE
_14
TO authenticated
_14
USING (
_14
exists(
_14
select 1
_14
from public.rooms r join public.rooms_users ru on r.id = ru.room_id
_14
where ru.user_id = auth.uid()
_14
and r.name = realtime.channel_name()
_14
and ru.role = 'admin'
_14
)
_14
);

Creating Authorized channels

Now using your service_role token you can create a channel against our API and this will enable authz checking for channel_1:


_10
curl -v -X POST 'https://<project_ref>.supabase.co/realtime/v1/api/channels'\
_10
--header 'apikey: <service_role_token>'\
_10
--header 'Content-Type: application/json'\
_10
--data-raw '{ "name": "channel_1" }'

Testing Authorization

Now to test it we can use a quick deno script by creating a index.ts


_21
// Run with deno run --allow-net --allow-env --allow-read --allow-ffi index.ts
_21
import { createClient } from "npm:@supabase/[email protected]";
_21
const url = "https://<project_ref>.supabase.com";
_21
const apikey = "<api_key>";
_21
_21
const client = createClient(url, apikey);
_21
_21
const channel = client.channel("channel_1", {
_21
config: { broadcast: { self: true } },
_21
});
_21
channel
_21
.on("broadcast", { event: "test" }, (payload) => console.log(payload))
_21
.on("presence", { event: "join" }, (payload) => console.log(payload))
_21
.on("presence", { event: "leave" }, (payload) => console.log(payload))
_21
.subscribe((status: string, err: any) => {
_21
if (status === "SUBSCRIBED") {
_21
console.log("Connected!");
_21
} else {
_21
console.error(err);
_21
}
_21
});

This will return an error with the message You do not have permissions to read from this Channel

But if we change our code to pass along an authenticated user, then we will be able to connect and receive / send messages.


_28
import { createClient } from "npm:@supabase/[email protected]";
_28
const url = "https://wqcmxcvbtvplofojjnqw.supabase.co";
_28
const apikey = "<api_key>";
_28
_28
const client = createClient(url, apikey);
_28
_28
await client.auth.signInWithPassword({
_28
email: "<email>",
_28
password: "<password>",
_28
});
_28
_28
client.realtime.setAuth(
_28
(await client.auth.getSession()).data.session.access_token
_28
);
_28
const channel = client.channel("channel_1", {
_28
config: { broadcast: { self: true } },
_28
});
_28
channel
_28
.on("broadcast", { event: "test" }, (payload) => console.log(payload))
_28
.on("presence", { event: "join" }, (payload) => console.log(payload))
_28
.on("presence", { event: "leave" }, (payload) => console.log(payload))
_28
.subscribe((status: string, err: any) => {
_28
if (status === "SUBSCRIBED") {
_28
console.log("Connected!");
_28
} else {
_28
console.error(err);
_28
}
_28
});

Do not forget that RLS policies can use other tables in them so this will give you all the flexibility you need to better fit your use case but be aware of the performance impact of heavy RLS queries or non-indexed fields

Migrating from Public Channels

We infer the behaviour you desire by checking if the realtime.channels table includes an entry for the given channel name meaning that migrating from an unprotected channel to one that follows this new method you would need to:

  • Create your RLS rules according to your use case for the realtime.channels, realtime.broadcasts and realtime.presencestables
  • Create a new entry with the channel name using the client lib or calling the endpoints directly.

New Endpoints

Due to this new changes, if you want to use this feature, you will need to preemptively create a channel. For this effect we have added new endpoints for Realtime.

This endpoints will respect RLS rules from the given Bearer token.


_17
List all channels
_17
Method: GET
_17
URL: https://<project_ref>.supabase.co/realtime/v1/api/channels
_17
_17
Create channels
_17
Method: POST
_17
URL: https://<project_ref>.supabase.co/realtime/v1/api/channels
_17
body: `{"name":"<channel_name>"}`
_17
_17
Update an existing channel
_17
Method: PUT
_17
URL: https://<project_ref>.supabase.co/realtime/v1/api/channels/<channel_name>
_17
body: `{"name":"<new_channel_name>"}`
_17
_17
Delete existing channel
_17
Method: DELETE
_17
URL: https://<project_ref>.supabase.co/realtime/v1/api/channels/<channel_name>

Client library

We’re working on the next version actively so we can provide a good developer experience.

Please check the latest next version at https://www.npmjs.com/package/@supabase/realtime-js?activeTab=versions

This library provides an easy way to manage your channels (CRUD operations). Be aware that for channel creation you need to add either use the service_role key or create the RLS policies to allow channel creation:


_10
CREATE POLICY authenticated_all_channels_write
_10
ON realtime.channels FOR INSERT
_10
TO authenticated
_10
WITH CHECK ( true );

The operations are:


_10
new RealtimeClient('').createChannel(name: string)
_10
new RealtimeClient('').deleteChannel(name: string)
_10
new RealtimeClient('').updateChannel(name: string, new_name: string)
_10
new RealtimeClient('').listChannels()

All this requests will also respect the user doing the RLS call, meaning that the listChannels method will only show the allowed channels based on the calling user policies.

Finally this is still heavily WIP as we want to ensure that we provide a good developer experience hence being in next instead of a new release or a RC.

How it works (technically)

Connection context

When you connect with Realtime we set a connection configuration with your JWT, Channel Name and Headers using the following query:


_10
SELECT
_10
set_config('role', $1, true),
_10
set_config('realtime.channel_name', $2, true),
_10
set_config('request.jwt', $4, true),
_10
set_config('request.jwt.claims', $6, true),
_10
set_config('request.headers', $7, true)

This query is only run when you connect to a channel.

Applying RLS Policies

To achieve RLS checks on your Realtime connection we created new tables in the realtime schema to which you will be able to write RLS rules against it to control your channel features.

Relevant tables that you can use for your RLS checks

Screenshot_2024-04-03_at_19 12 19

The rules will be applied to three elements:

  • channels - determines if the user is able to connect to the channel created
  • broadcasts - determines if the user can receive or send broadcast messages
  • presences - determines if the user can receive and post presence messages

Which means that your RLS rules should be able to comply with the following rules:

  • Channel
    • With a channel set in the context, if user select query returns the channel, they have read permissions
    • With a channel set in the context, if user update query changes the check column, they have write permissions
    • Without a channel set in the context, if user is able to insert into realtime.channels they have write permissions
  • Broadcasts - will always require a channel in the context
    • If user select query returns the row associated with the channel in the context, they have read permissions
    • If user update query is able to update check column in row associated with the channel in the context, they have write permissions
  • Presence - will always require a channel in the context
    • If user select query returns the row associated with the channel in the context, they have read permissions
    • If user update query is able to update check column in row associated with the channel in the context, they have write permissions

We will explore some examples in the section below named How to use

Do not use it with Postgres Changes

We still do not have this fully implemented for Postgres Changes but be aware that we use the same Channels concept so this changes can impact the Postgres Changes feature.

Avoid using this method whenever you want to use Postgres Changes meaning that you should avoid creating a Channel for Channels that use Postgres Changes.

Call for feedback

Please do try out this feature and provide your feedback, we hope to be able to provide all the answers and we hope you will enjoy this feature.

Supavisor, Supabase's multi-tenant connection pooler deployed to regional clusters, became production ready back in December 2023. You can read the announcement here.

Since then, we've migrated Supabase projects from PgBouncer, single tenant connection pooler deployed to the project's instance, to Supavisor.

However, we kept the previous client connection limits from PgBouncer during the transition across all compute instances.

Today, we're happy to announce that we've increased this limit for compute instances Small, Medium, Large, and XL so your projects can take advantage of additional client connections while pricing remains unchanged. These new limits have already been applied to all existing projects and any new projects spun up.

Here's a quick breakdown:

Compute SizePrevious Client LimitsNew Client Limits
Small200400
Medium200600
Large300800
XL7001,000

For a more complete breakdown of your compute instance resources head over to the Compute Add-ons page.

Update to the UI for RLS policies

image

We've been looking into improving the UX for the RLS policy UI after going through feedback of the community's struggles with RLS in general, and this is the next step that we're taking to streamline the UX.

What we're calling as a "hybrid" editor (for now), you'll be able to see the corresponding SQL query for creating or updating your RLS policies while you're editing the policy via the input fields. And if you'd like even greater control, there's always the "Open in SQL Editor" button as an escape hatch where you can edit the SQL query in its entirety.

Templates are now right beside the editor as well, so you no longer have to click back and forth between templates and the editor.

We've always seen the dashboard as more than just a database adminstration tool, but also potentially an educational platform for developers to pick up the SQL language as they build out their database, and we hope that the changes here will help make that even easier.

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

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

Connection pooler on port 6543 is set to transaction mode permanently

Screenshot 2024-03-25 at 19 28 35

Previously, connection pooler's port 6543 can be set to either transaction or session mode under your project's database settings. This change makes it easier to distinguish between pooler modes and ports by only enabling transaction mode on port 6543 while maintaining session mode on port 5432.

If your using port 6543 and your project's pooler mode is transaction then you won't be able to set the mode to session. You can use port 5432 for session mode.

If your using port 6543 and your project's pooler mode is session then we strongly advise that you use port 5432 for session mode and change the mode to transaction. Once this setting is saved you won't be able to set session mode on port 6543.

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

Link: https://supabase.com/dashboard/project/_/settings/database#connection-pooler

Other improvements and bug fixes

[General]

  • Home page connect modal fix broken link under pooler mode to Database Settings [PR]
  • Fix toast messages to handle really long messages, and support closing them in such scenarios [PR]

[Auth]

  • Fix applying table privileges to incorrect table if there any more than 1 table with the same name in different schemas [PR]

[Table Editor]

  • Prevent updating RLS via GUI for tables under protected schemas [PR]
  • Support updating column "is unique" when editing table in side panel [PR]
  • Fix support NULL values when importing data via CSV text [PR]
  • Ensure that table and column names are trimmed for whitespaces when saving [PR]

[Storage Explorer]

  • Fix delete bucket modal styling when bucket name is long [PR]
  • Fix deleting parent folder not deleting child folders despite child folders being empty [PR]

[Database Pages]

  • Fix inability to manage foreign keys [PR]
  • Validate enumerated types to ensure names do not conflict with native PG data type names [PR]
  • Validate enumerated types to ensure names do not conflict with native PG data type names [PR]
  • Fix Stripe foreign data wrapper to support selecting a rowid_column, addresses the issue of not being able to update stripe foreign tables [PR]

In our previous platform architecture, our Storage, Realtime, and connection pooler (PgBouncer) services were bundled together, with a single instance of each service per project.

For our v2 architecture, we’ve “unbundled” these services, moving to a multi-tenant model, where a single instance of each service serves many projects:

This frees up as much resources as possible for your Postgres databases, while enabling us to offer more resource intensive features for these services, and opens the door to capabilities such as zero-downtime scaling.

With Supavisor replacing PgBouncer, along with some other key optimizations, the final pieces of our v2 architecture are now ready.

We’ve already fully rolled out our v2 architecture to paid plan projects. You now have more resources available, for the same price that you’ve been paying.

Free plan gradual rollout (20 March 2024 onwards)

  • 20 March 2024: Newly created or unpaused projects will use v2 architecture
  • 28 March 2024: Existing projects will start being migrated to v2 architecture

This will be a gradual rollout - we will email you at least one week before your project is scheduled to be migrated.

Your action for projects scheduled to be migrated

For newly created or unpaused projects on the Free Plan, no action is required.

For existing projects on the Free Plan, up to a few minutes of downtime is expected for the migration. For each of your projects, we’ll identify the 30-minute maintenance window where your project had the least database queries over the previous 10 weeks.

You have two choices:

  • Automatic Migration: If you don't take any action, we plan to do the migration automatically during that maintenance window with the least historical activity.
  • Manual Migration: Any time before that, you can go to Project Settings > General to see whether/when the maintenance window is scheduled (timings will also be included in the email). There, you may choose to manually restart the project yourself, at a time that is convenient for you. Your project will be restarted on v2 architecture.

Conversational AI assistant now available as part of the SQL Editor

Screenshot 2024-03-12 at 23 57 10

As part of our ongoing efforts to introduce the AI assistant across the dashboard, we're bringing the AI assistant to the SQL Editor next! Some of you might have already been using the AI assistant in the SQL Editor through the green bar at the top of the editor - we're sprucing it up by extending it further to a conversational UX. Go back and forth with the assistant and apply the code snippets that you deem to be the most appropriate!

This is currently under a feature preview - you may enable this feature by clicking on the user icon while in a project at the bottom of the side navigation bar and selecting "Feature previews". From there just enable the preview under "SQL Editor Conversational Assistant". And as always, we're incredibly open to any feedback for this, so give us a shout right here!

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

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

Other improvements and bug fixes

Table Editor

  • Fix creating a table will automatically trim for whitespaces (PR)

SQL Editor

  • Fix snippet names not truncating (PR)

Auth Policies

  • Fix error message not surfacing in new RLS UI from feature preview (PR)

Database Functions

  • Fix light mode styling for code editor (PR)

Matryoshka Embeddings: Faster OpenAI Vector Search Using Adaptive Retrieval

Matryoshka Embeddings

Learn about how OpenAI’s newest text embeddings models, text-embedding-3-small and text-embedding-3-large, are able to truncate their dimensions with only a slight loss in accuracy.

Blog post

Easily Connect to Supabase Projects From Frameworks and ORMs of Your Choice

Connect to Supabase Projects From Frameworks and ORMs

Connect to Supabase from any framework or ORM with our new “Connect” panel in Studio. This displays simple setup snippets that you can copy and paste into your application. We’ve started with a selection of popular frameworks and ORMs and you can request more by feature request or pull request.

Pull request

PostgREST Aggregate Functions

PostgREST Aggregate Functions

PostgREST v12 has been released, and with it, comes the release of the highly requested aggregate functions, avg(), count(), sum(), min(), and max(), that is used to summarize data by performing calculations across groups of rows.

Blog post

Terraform Provider to Manage Resources on Supabase Platform

Terraform Provider

We’ve created an official Supabase Provider for Terraform to version-control your project settings in Git. You can use this provider in CI/CD pipelines to automatically provision projects and branches and keep configuration in code.

Learn more

Support for Composite Foreign Keys in Table Editor

Composite Foreign Keys

We've shifted the management of foreign keys into the Table Editor’s side panel so you can easily see all foreign keys pertaining to a table as well as referencing columns to composite foreign keys.

Pull request

Build a Content Recommendation App With Flutter and OpenAI

Content Recommendation App With Flutter and OpenAI

Learn about how we built a movie listing app that recommends another movie based on the movie that a user is currently viewing built with Supabase, Flutter, and OpenAI.

Blog post

Load Testing Supabase

Load Testing Supabase

Performance testing evaluates a system's compliance with its performance requirements. It reveals your app’s ability to handle user load, unexpected spikes, or recover from stressful workloads. In this blog post you will learn about how we automated our performance testing.

Blog post

More Studio Updates

  • Collapsible main sidebar navigation [PR]
  • Create charts from SQL Editor [PR]
  • Resizable main tabs in Table Editor and SQL Editor [PR]
  • View user metadata from the dashboard [PR]
  • Bulk delete SQL Editor snippets [PR]
  • Query Performance updates [PR]
  • Choose a compute option when creating a project (Paid organizations only) [PR]
  • Logs Explorer facelift [PR]

Quick Product Announcements

  • [Auth] Require AAL2 to enroll additional factors for MFA enrollment [PR]
  • [Storage] Increased maximum file upload size to 50GB for paid plans [PR]

Made With Supabase

  • Inkvestigations is a webgame using LLM technology (currently GPT) to create interactive mystery games [GitHub]
  • MathPuzzles- a multiplayer game to outsmart your friends [GitHub]
  • Create a recipe app with Nowa [Article]
  • Open-source AI wearable device that captures what you say and hear [GitHub]
  • Brick yourself - turn yourself into a mini-figure [Website]

Community Highlights

  • SupaVlog: Vlog Application Starter Kit Built with Supabase, Stream, Hookdeck, and Next.js [Article]
  • Chat with Supabase PostgreSQL using AI [Article]
  • How to implement Google sign-in on Flutter with Supabase on iOS, Android and the Web [Video]
  • They're Making Supabase Better... [Video]
  • How to send welcome emails with Supabase edge functions and database triggers [Article]
  • How to Create Email Signup and Login Screens in React Native (Expo), ExpressJS, and Supabase [Article]
  • Integrating Supabase with Flutterflow [Video]
  • Join the #SupaBuilders movement and never get your project paused again!

This discussion was created from the release Platform Updates: February 2024.

Templates added to new RLS assistant

If you're not aware yet, we previously created a new RLS UI that comes integrated with the Supabase Assistant to (hopefully) help everyone write RLS policies easier and faster. This is currently still a feature preview which you can enable by clicking on your user profile at the bottom of the side navigation bar. We're continuously trying to see how we can improve this to make it a much better UX than the current existing RLS policy user flow.

The first gap that we're trying to address is the ease of referencing existing templates that just work out of the box from the current RLS policy flow - those proved to be really useful when trying to understand the syntax of writing policies, and so we added that in to the new RLS UI. Not just that but we also added more complex templates that work better in the new UI than the current one!

The next item that we're looking into is to see what minimal guard rails we can add to make writing RLS policies even less intimidating since the new UI expects only SQL input. One of the aims of the dashboard is to guide our users to not be afraid of SQL no matter the level of proficiency and we hope that we'll be able to cook up the ideal UX that will allow everyone to write SQL with confidence.

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

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

Collapsible navigation bar

https://github.com/supabase/supabase/assets/8291514/070cb030-d249-404d-82cd-3ba92d9309f3

We received many feedback that the icons alone in the navigation bar are not too intuitive in understanding what page they're navigating too. So finally, we're adding some textual cues that show up on hover to the navigation bar in hopes to make navigating around the dashboard easier!

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

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

Make charts in the SQL editor

For the users who leverage on SQL to analyze data, this should be useful for you! You can now plot your data points through the SQL editor after running your query. Choose which columns to be your axes and you're good to go. As always - feel free to drop any feedback for us on this! We're keen to see how else we can make this feature better and stronger 😄

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

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

Foreign Key Management re-introduced into the Column side panel editor

Screenshot 2024-03-04 at 17 59 15

We previously made an update in the Table Editor to shift the management of foreign keys to the table editor as an effort to properly support composite foreign keys. This understandably caused the UX to suffer as we received many feedback around creating simple 1:1 foreign key relations much more troublesome. We've thus re-introduced being able to manage your foreign keys while editing a column! Thank you so much for everyone's feedback around this - it's something that we genuinely appreciate our community for! 🙏

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

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

Toggle intellisense for the SQL editor

Screenshot 2024-03-04 at 17 51 13

Intellisense for the SQL editor was always enabled by default for everyone, but we're now making this a toggleable feature - this is more specifically useful for large projects with many tables as we've noticed the amount of data we try to load into intellisense causes the SQL editor to slow down noticeable (likely due to browser memory issues).

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

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

Other improvements and bug fixes

Schema Visualizer

  • Added legends to the schema visualizer and align icons properly [PR]

Screenshot 2024-02-26 at 22 01 03

Paid plan users can now immediately launch projects on larger compute sizes. Previously, paid organizations had to launch projects on the default "Micro" instance and then separately upgrade their instance. You can always up and downgrade your instance in hindsight. Feel free to leave any feedback in our discussions here!

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

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

Update on Table Editor search input

Screenshot 2024-02-23 at 7 59 21 PM

As mentioned in last week's changelog (and also as always 😉) we see everyone's feedback regarding the changes to the table editor search input and have enacted a slight change to make the search action more prominent and easier to click on! Again, thank you to everyone for sounding your thoughts, we genuinely appreciate them as it helps us guide the dashboard's DX to be optimal - keep em coming!

Separetely - we're also aware of the feedback regarding our change in the way you manage your foreign keys as announced in the changelog discussion 2 weeks ago - fret not! We're actively looking into that as well 🙂

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

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

Resizeable inner sidebars for Table Editor and SQL Editor

https://github.com/supabase/supabase/assets/8291514/1f3d04ef-df86-4398-b7b3-42a9effe950d

For those who might have tables or SQL queries with long names, this should help alleviate some issues with the names truncating. Hopefully it'll be easier to find your tables / SQL queries! 😊

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

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

Connecting to your project - added Expo React Native guides

Last week we announced a quicker way to get your project's connection parameters on the project's home page and we're heartened to already see some community contributions to add more content for different frameworks! Shoutout to @Hallidayo for the help on this - we're always keeping an eye out for more of such contributions 😄

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

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

Other improvements and bug fixes

Home

  • Sort projects alphabetically and add search functionality for projects (PR)

Table Editor

  • Fix missing role impersonation functionality when opening a view (PR)
  • Fix a11y on table menu items (PR)
  • Fix inability to update primary key of a table after renaming the table (PR)

SQL Editor

  • Fix error highlighting wrong line if running a selected portion of the query (PR)

Paid plan users can now immediately launch projects on larger compute sizes. Previously, paid organizations had to launch projects on the default "Micro" instance and then separately upgrade their instance. You can always up- and downgrade your instance in hindsight.

image

image

A quicker way to get your project's connection parameters

Screenshot 2024-02-19 at 19 20 39

We've made retrieving your project's connection parameters more easily accessible by adding a "Connect" button to each projects' homepage. This will show you some quick instructions on how to either connect to your database directly, or connect to your project via some app frameworks and ORMs. Hopefully this will help both new and familiar developers on Supabase to get to building quicker without having to jump around the dashboard to find these information.

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

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

Table Editor side menu revamp

screenshot-2023-12-22-at-13 06 32

We're in the midst of revising the UX around the table editor to ensure that controls aren't sprawled across the page despite us building more and more features - and this is just the first step of more to come. Icons for tables and views have been tweaked to be more minimal, each table has an indicator to whether RLS has been enabled or not, and the search bar has been made a tad sleeker. As an assurance, we definitely hear everyone's feedback about the changes here in particular with the search bar being less visible and are actively looking to improve the experience here! 🙏

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

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

Table Editor header simplification

Similar to the above, we've updated the layout a little for the Table Editor itself, briefly the changes include

  • Support for enabling RLS from the Table Editor
  • Showing an indication of how many policies the table has
  • Shifting refresh + data/definition toggle to the footer of the grid

All these are tiny steps to allowing us to build more functionality into the Table Editor without turning it into a control panel!

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

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

View auth user details

We've had some feedback from users that they'd want a convenient way to check on their project's users from the UI rather than having to go through the Table Editor or SQL Editor to query the auth.users table, and so we've gone ahead to ship this one.

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

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

Other improvements and bug fixes

Table Editor

  • Fix definition view showing empty result if formatting the definition throws an error (PR)

SQL Editor

  • Refocus to code editor after closing destructive query warning modal (PR)

Authentication

  • Fix policies under tables from "protected" schemas not showing RLS disabled/enabled state (PR)
    • Also show "protected" schemas notice when viewing policies of tables under those schemas
  • Clicking "Toggle feature preview" from the new RLS creation UI will show a confirmation dialog if changes were made before closing the panel (PR)

Storage

  • Renaming a file will just highlight the name of the file without the extension, similar to MacOS (PR)

SQL editor bulk deletes

https://github.com/supabase/supabase/assets/19742402/f50eabbf-9c30-4828-8f5f-0efeef67a025

We hear you! This has been a very popular request by everyone and we're happy to make the first step to improving the UX around your SQL snippets. You can now delete your queries in bulk - gone are the days of rows full with Untitled queries 😄 Fret not, we're also aware that everyone is also requesting for better organization of snippets (specifically folders) - we're actively figuring out how best to bring that UX into the dashboard for everyone so be sure to watch this space 😉

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

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

Query performance updates

Unoptimized queries are a major cause of poor database performance - which is why the query performance report was initially built. We're equipping this page with better tooling, allowing users to:

  1. Search by query or role
  2. Sort results by latency
  3. Expand results to view the full query that was run

As always, if there's anything more we can do for you, feel free to give us a shout in the feedback widget up top 🙂

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

Link: https://supabase.com/dashboard/project/_/reports/query-performance

Logs Explorer face lift

In an effort to make our UI more consistent + coherent across all products, we've revamped the Logs Explorer to look just like the SQL Editor in hopes that there's less UI for users to learn, and users can just stay focused on doing what they want to do.

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

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

Support for composite foreign keys in table editor

The previous UI for managing foreign keys in the table editor had functional limitations as it assumed single column relations for foreign keys (overly simplified). We've thus shifted the management of foreign keys into the table side panel editor instead. You can manage all foreign keys across all columns on the table in one place, rather than going into each column individually to do so.

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

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

Other improvements and bug fixes

Table Editor

  • Fixed duplicating a table not saving it's description (PR)
  • Fixed viewing a reference row in the table editor from the grid not updating the selected schema if referenced row is in another schema (PR)
  • Fixed errors from adding data via spreadsheet/CSV text not surfacing as toasts (PR)

SQL Editor

  • Fixed long errors getting cut off / not horizontally scrollable (PR)
  • Fixed deleting a query that's not saved throws an error (PR)

Logs Explorer

  • Inserting a source will insert the value after the FROM command (PR)

Database

  • Fixed enumerated types side panel input fields not resetting after saving (PR)
  • Fixed roles side panel input fields not resetting after saving (PR)

Misc

  • Support page is now mobile responsive (PR)

Supavisor replaces PgBouncer for database connection pooling

Supavisor

We’re deprecating PgBouncer and migrating all projects to our Supavisor connection pooler. Go grab the pooler connection string in your project’s Database Settings.

Learn more

Direct database connection resolve only to IPv6

IPv4 to IPv6 Transition

[ACTION REQUIRED] AWS is deprecating IPv4, so we’ve migrating your project to IPv6. If your network supports IPv6 and/or you’re using PostgREST then you don’t need to make any changes. Otherwise, you need to update any connections to Supavisor’s connection pooler. We’ve also made IPv4 addresses available to purchase (passing on the cost from AWS).

Learn more

Supabase Studio's latest enhancements

Studio - 7 Updates

Improved text editing in Table Editor, with Markdown previews

Studio Improved Text Editing With Markdown Previews

We’ve made it much better for you to edit text in the Table Editor, including Markdown previews so you can preview your changes with ease. [PR]

Preview HTML email templates right from the dashboard

Studio HTML email templates

We’ve added the ability to preview your HTML email templates right from the dashboard. [PR]

Preview SQL snippets for better discoverability

Studio SQL Editor query previews

We’ve added previews to your saved query snippets so you can find the one you’re looking for much faster. [PR]

More Studio updates

Quick product announcements

  • [AI] Added a guide on how to integrate Amazon Bedrock SDK with Supabase Vecs, our vector client for Postgres. [Guide]
  • [Auth] Improved guide on implementing Server-Side Auth for Next.js. [Guide]
  • [Auth] Fixed the cookie chunking issue in @supabase/ssr - shout out to SyntheticGoop from Mobbin. [PR]
  • [Auth] Fixed a bug in using a custom cookie name in @supabase/ssr. [PR]
  • [Edge Functions] Created a guide on custom routing. [Guide]
  • [Edge Functions] Created a guide on how to deploy via CI/CD pipelines on GitHub, GitLab, and Bitbucket. [Guide]
  • [Edge Functions] Edge Runtime now supports Deno 1.39.2. [Learn more]
  • [Edge Functions] Updated quickstart guide. [Video]

Blog Central

How pg_graphql Works

How pg_graphql Works

Learn about how we built the GraphQL Postgres extension, written in the Rust programming language, that powers our GraphQL data API.

Learn more

Getting started with Ruby on Rails and Postgres on Supabase

Ruby on Rails and Postgres on Supabase

Learn about how you can spin up a Rails app, integrate a Supabase database, and deploy it to Fly.io.

Learn more

Other awesome blog posts

Greater clarity on billing breakdown

new-billing-breakdown

We value transparency here at Supabase and that includes ensuring our users having clear visibility over what they are paying for. We've added some details in the organization billing breakdown section to show what are the "Current costs", on top of the "Projected costs" for the organization, and also added information regarding both of them in the form of tooltips. Compute credits are also shown here to ensure that those are considered in the costs calculation.

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

Link: https://supabase.com/dashboard/org/_/billing#breakdown

SQL Editor preview snippets by hovering over them in the navigation menu

image

In efforts to hopefully to make it easier to find your queries. We're aware that users are facing difficulty in managing their SQL queries, in particular when the number of queries grow really big - we're actively looking into how to make things better 🙏 Watch this space!

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

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

Table Editor edit text cells with larger real estate

image

We've seen some users reaching out to us via feedback that they'd like a larger editor to edit their text-based column cells on the table editor - we hear you! And we've also sprinkled in some Markdown preview for those who might need it 🙂

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

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

Auth email templates preview

image

Many users have been requesting for this, and so has the team internally - you may now preview your HTML email templates right here in the dashboard. Gone are the days having to manually check your templates elsewhere, hopefully this will make your development lives a little easier.

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

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

Database enumerated types will show enumerated types only

Shoutout to @Nabhag8848 for the help on this! We always appreciate and look up to any support from the community 🙏

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

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

cron schema from the pg-cron extension no longer editable via the GUI

The schema is nonetheless still editable from the SQL editor by writing queries directly. This is in efforts to prevent directly inserting/updating rows on the pg_cron extension's cron.job table as it bypasses security checks that would've been asserted when jobs are scheduled/modified via pg_cron functions. More information here.

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

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

Table Editor fix inability to copy input field values in the row side panel editor

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

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

Updates to the Database Settings page

image

We're stream-lining the connection UI on the database settings page to be more concise and simpler in hopes to improve the UX around connecting to your project's database, and a push to using the connection pooler as a recommended practice. As always, feel free to drop us feedback via the feedback widget in the navigation bar up top - we promise that we look at every single one of the feedback that comes in.

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

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

Network Restrictions now support adding restrictions to IPv6 addresses

image

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

Link: https://supabase.com/dashboard/project/_/settings/database#network-restrictions

Network Restrictions addresses will be normalized when adding a new restriction

image

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

Link: https://supabase.com/dashboard/project/_/settings/database#network-restrictions

IPv4 add-on now available to allow direct connections to your database via an IPv4 address

You may consider enabling this add-on via the dashboard if you're not planning on using our connection pooler (which still supports IPv4) and your environment does not support IPv6. More information regarding this add-on here.

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

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

Logs Explorer support for updating and deleting queries

CleanShot 2024-01-11 at 14 52 11

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

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

Table Editor cell dropdown for enum columns will not show NULL option if column is not nullable

image

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

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

Removed deprecated LinkedIn Provider from Auth Providers

The LinkedIn provider was scheduled to be deprecated in favour of the current LinkedIn OIDC provider with a notice set up since November 2023 and a couple of email notifications sent out to our users. The LinkedIn provider is now removed from our Auth Providers page. Please do reach out to us via support if you might have been affected by this!

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

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

Supavisor, our connection pooler, does not support using Network Restrictions at the moment. Support for Network Restrictions will be enabled on the 24th of January 2024.

If you are not using Supavisor, this change does not affect you.

Starting the 24th, projects with existing network restrictions will have their Supavisor configuration automatically updated with the same restrictions. Changes to any project’s network restrictions will also be automatically propagated to Supavisor.

FAQ

If direct connections to your database resolve to a IPv6 address, you need to add both IPv4 and IPv6 CIDRs to the list of allowed CIDRs. Network Restrictions will be applied to all database connection routes, whether pooled or direct. You will need to add both the IPv4 and IPv6 networks you want to allow. There are two exceptions: if you have been granted an extension on the IPv6 migration OR if you have purchased the IPv4 add-on, you need only add IPv4 CIDRs.

On February 1st 2024, AWS will start charging for IPv4 addresses. We're deprecating IPv4 for direct connections.

For more rationale behind the change, please read our blog post: Brace yourself, IPv6 is coming.

If you plan on not using our connection pooler, which still supports IPv4, and your environment does not support IPv6, consider enabling the add-on.

[!NOTE]
You do not need to enable this add-on if you use Supavisor, our new connection pooler!

The add-on is $4 per month - we're simply passing on the AWS costs to you. The add-on is available for all paid plans.

You still need to migrate away from PGBouncer even with this add-on enabled.

You can now enable the IPv4 addon in your project addon settings.

image

Screenshot 2024-01-16 at 16 00 31

Additionally, we're working on making this even better by offering dedicated IPv4 addresses which help with IP allowlisting and network restrictions. There will be another update once dedicated IPv4 addresses are ready to use.

Column-level privileges management

image

Manage column-level privileges via the dashboard. This was a long time coming with many users looking forward to the addition of this to the dashboard. Huge shoutout once again to @HTMHell and everyone for their patience while we got this through the gates 🙏

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

Link: https://supabase.com/dashboard/project/_/auth/column-privileges

Table editor support for copying cells via keyboard shortcut

You can now copy cell values in the Table Editor via Cmd+c and Cmd+v (or Ctrl+c or Ctrl+v)! Hopefully this makes managing your data a little more easier.

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

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

Table editor prevent deleting all rows in a table through the GUI while impersonating a role

image

We're disabling the "Delete rows" action in the Table Editor when you've selected all rows in a table, and are impersonating a role due to an issue which @jacob-8 found (appreciate your report! 🙏) The issue mentioned can be found here.

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

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

Storage Explorer support for emptying a bucket

image

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

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

Supavisor 1.1.6

Jan 11, 2024

A rundown of everything we shipped during Launch Week X

Day 1 - Supabase Studio: AI Assistant and User Impersonation

l Day 1 - Supabase Studio: AI Assistant and User Impersonation

Supabase Studio received a major update that reflects our commitment to a SQL-first approach and user-centric development. Awesome features like easy RLS policies with an AI assistant, Postgres Roles, User Impersonation, and much more.

Day 2 - Edge Functions: Node and native npm compatibility

Day 2 - Edge Functions: Node and native npm compatibility)

Edge Functions now natively supports npm modules and Node built-in APIs. You can directly import millions of popular, commonly used npm modules into your Edge Functions.

Day 3 - Supabase Branching

Day 3 - Supabase Branching

A Postgres database for every GitHub branch. Database branching means you can have separate database instances for each feature of your application.

Day 4 - Supabase Auth: Identity Linking, Hooks, and HaveIBeenPwned integration

Day 4 - Supabase Auth: Identity Linking, Hooks, and HaveIBeenPwned integration

We announced several new features for Supabase Auth: Identity Linking, Session Control, Leaked Password Protection, and Auth Hooks with Postgres functions.

Day 5 - Introducing Read Replicas

Introducing Read Replicas

This is a huge one for anyone wanting to serve data closer to the users or distribute loads across multiple databases. Learn how we implemented Read Replicas and how to use them in your projects.

More announcements from Launch Week X

As if all that wasn't enough, we shipped even more cool stuff:

Supavisor 1.1.5

Jan 10, 2024

Released Supavisor 1.1.5

Notable

  • Pools now start with only 10 connections and create new ones up to tenant default_pool_size or user pool_size
  • Logs correct tenant id
  • API endpoints accept PATCH requests

Previously Supavisor would start a deterministic number of connection depending on the pool size specified on the tenant or tenant user.

Now Supavisor will start 10 connections and then allocate more as needed.

It was pretty easy to over-allocate your database max_connections without fully understanding what your max_connections were and how many were currently being used by other services.

This also makes migration from PgBouncer easier as it's much safer to run multiple connection poolers at the same time as you migrate, as long as they both don't need to allocate their full database connection pools.

Also an implied behavior of Supavisor was that each user connected spins up it's own pool. Without understanding this behavior it's easy to over-allocate database connections by connecting different Posgres users to the pooler.

Improve loading interface on Auth users page

Navigating between pages if your project has many users is now less jarring.

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

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

Fix viewing RLS policies of a table from table editor not selecting its schema on the RLS page

More specifically if the table does not belong to the public schema.

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

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

Fix inability to delete enumerated type from the dashboard if type name has Uppercase initial letter

Thank you @tranhoangvuit for helping us on this!

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

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

Sort RLS policies alphabetically

Once again, thank you @tranhoangvuit for helping us with this!

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

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

Released Supavisor v1.1.2

Notable

  • allow_list field on the tenant to support network restrictions
  • More docs
  • client_heartbeat_interval on the tenant to detect zombie client connections
  • Bug fixes
  • Observability improvements

The client_heartbeat_interval helps us detect client connections from behind a load balancer which are dead but did not close the TCP connection correctly. This interval defaults to one minute but is configurable per tenant.

The allow_list field on the tenant takes a list of CIDR ranges and validates incoming connection addresses against this list. The incoming client address must be in one of these ranges to be accepted.

Also, started a Supavisor FAQ!

Further to https://github.com/orgs/supabase/discussions/18654 , the threshold for transitioning large databases to use physical backups for their daily backups is being lowered to 40GB over the next few days.

Physical backups are more performant, have lower impact on the db, and avoid holding locks for long periods of time. Restores continue to work as expected, but backups taken using this method can no longer be downloaded from the dashboard.

Over the next few months, we'll be introducing functionality to restore to a separate, new database, allowing for the perusal of the backed up data without disruption to the original project.

Please refer to supabase.com/docs/guides/platform/backups#daily-backups-process for additional details.

Launch Week X is just over, but the fun doesn't stop! This changelog summarizes what has been released for Studio over last week as well as other improvements that we shipped behind the scenes while Launch Week X was ongoing.

Supabase Assistant (For Auth RLS policies)

https://github.com/supabase/supabase/assets/19742402/c10ab0bc-a2be-4739-be3a-5eb6ef802af1

We've got a new RLS Editor that brings SQL front-and-center, giving developers access to the full potential of Postgres rather than abstracting it away. Accompanying it is an AI assistant that has been tuned to produce SQL for Row Level Security policies, making it fast and easy to get your policies setup the way you need them.

If you're keen to give this a spin, you may enable this feature from the Feature Previews section (which we'll cover more in the last section of this changelog) while you're in a project. This will replace the current UI for creating RLS policies with this new AI assisted RLS Editor UI.

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

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

Postgres Roles & User Impersonation

Run queries in Studio using different roles - this is potentially a powerful tool for testing your Row Level Security policies and determining which data each role can access. You may also impersonate a specific user in Studio by "minting" a JWT with their ID and then running the queries using that JWT.

This feature is available not just in the Table Editor, but also in the SQL Editor, GraphiQL interface, and Realtime Inspector (which we'll talk about more right in the next section below)

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

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

Realtime Inspector

An easy way to prototype, inspect, and debug Realtime directly in the Studio. You can use the Realtime Inspector to view messages being sent and received in channels, and also filter messages by type: presence, broadcast, and database changes.

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

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

Feature Previews

Our new tool for unveiling new features - we'll release beta features as previews before making them generally available. This will help us to get features out to you faster, make it easier for you to give us feedback, and also shorten the iteration loop.

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

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

Auth Settings added option to support manual identity linking

Supabase Auth allows a user to initiate identity linking with a different email address when they are logged in. More information can be found in our documentation here.

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

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

Table Editor support selecting types from the extensions schema when creating/editing columns

Database extensions that are installed through the dashboard on the database/extensions page are, most of the time, installed by default in the extensions schema (as it's the default dropdown option) unless the extension has a schema that it's required to be in, or the user changes it to be installed in another schema.

If the installed extension (e.g vector) has enumerated types, the Table Editor then can access those types for users to assign them to columns, without having the user to install them in another schema.

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

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

Network Bans highlight IP Address if it belongs to the current logged-in user

image

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

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

Supavisor 1.0

Dec 13, 2023

Supavisor 1.0 is released. Rollout to Supabase hosted projects planned for next week.

Notable changes include:

  • Added support for named prepared statements
  • Added support for read replicas and query load balancing
  • Added a client_idle_timeout option
  • New docs build process and website (Github hosted)
  • Docs for migrating from PgBouncer
  • auth_query with md5 support
  • native pool_mode to proxy direct connections to Postgres
  • New metric for unique connected tenants
  • Cache metadata database queries for faster tenant info lookups
  • Bug fixes

See the full changelog:

https://github.com/supabase/supavisor/releases/tag/v1.0.0

We've improved insights into usage, billing and costs.

Vastly improved usage summary

We previously had a slightly hidden usage summary in the "Upcoming Invoice" section. This section has been revamped and moved to the organization's usage page.

The improved usage summary features:

  • Per-project breakdown for usage
  • Displays costs for over-usage on usage-based plans (pro with spend cap off, team, enterprise)
  • Displays usage in percent for usage-capped plans (free/pro with spend cap on)
  • Metrics with higher usage/costs will be sorted to the top
  • Insights into compute usage in summary
  • Usage can now be retrieved for a custom period and not just the current billing cycle
  • Usage summary can be filtered by project
  • Indicators if you're exceeding/approaching limits which could lead to restrictions

The new usage summary section (usage-capped plan):

image

New usage summary with a usage-based plan (Pro with spend cap off, Team, Enterprise):

Screenshot 2023-12-05 at 17 19 25

When hovering over the circular progress bars, you get per-project breakdowns of usage and some further information:

image

image

image

We now also allow you to filter the total usage by a single project or a different period than the current billing cycle. Simply change the timeframe at the top of the usage page.

Usage filtered with a custom timeframe (not relative to billing cycle):

image

Daily Stats for Compute Usage

The organization's usage page shows daily stats for all sorts of usage-based metrics and was still missing insights for compute hours. Compute Usage insights have been added to the usage page.

New section on the usage page:

image

Sample usage with a single project:

image

When running multiple projects or projects on different compute sizes:

image

Better insights for upcoming invoice

The "Upcoming invoice" section on the organization billing page has been vastly improved and now offers per-project breakdown of metrics and project add-ons. Additionally, there is a simple projection of your cost at the end of the month.

Here's an overview of the new section with all project breakdowns collapsed:

image

You can expand any usage-based item or project add-on to get a per-project breakdown:

image

The line items have also been improved to show included quotas and costs for over-usage:

image

Quickly see if you're exceeding your plans limit

On usage-capped plans (Free Plan or Pro Plan with Spend Cap toggled on), you will now also see a warning on the top of the subscription page, in case you're exceeding your plan's limits. A more detailed breakdown is available on the organization's usage page.

image

Project breakdown for subscription preview

When you are about to upgrade your organization's subscription plan from free to paid or between paid plans, we show you a confirmation screen. That confirmation screen has been improved to show a per-project breakdown for compute costs. Additionally, some useful information about usage-billing for compute and links to related docs have been added.

New confirmation modal:

image

Break down add-ons on a per-project basis:

image

Education about usage-billing for compute, mixing paid/non-paid plans and links to related docs:

image

Table Editor row edit side panel fix boolean fields rendering stale value

There was issue in the Table Editor when you're editing rows in the side panel, specifically for column types that are rendering the Listbox component, whereby the data rendered in that input field is stale (from the previous row that you opened). This was caused by the Listbox component not re-rendering correctly when the value passed to it has changed and is now fixed.

PR: https://github.com/supabase/supabase/pull/19264 Link: https://supabase.com/dashboard/project/_/editor

Added recommendation to enable PITR when enabling branching

We strongly recommend enabling point in time recovery for your project if you're planning to enable branching. This is to ensure that you can always recover data if you make a "bad migration". For example, if you accidentally delete a column or some of your production data.

PR: https://github.com/supabase/supabase/pull/19324 Link: https://supabase.com/dashboard/project/_/

Previously, it was possible to directly insert/update rows on the pg_cron extension's cron.job table. This bypasses security checks that would've been asserted when jobs are scheduled/modified via pg_cron functions.

You can see how to schedule/modify cron jobs using the examples in our docs.

Allow access to backups page while project is restoring to download scheduled backups

PR: https://github.com/supabase/supabase/pull/19126 Link: https://supabase.com/dashboard/project/_/database/backups/scheduled

Show if a member has MFA enabled or not in organization settings page

image PR: https://github.com/supabase/supabase/pull/19012 Link: https://supabase.com/dashboard/org/_/team

Show which email support will reach out to after submitting a ticket

image PR: https://github.com/supabase/supabase/pull/19095 Link: https://supabase.com/dashboard/support/new

Added wildcard hints for bucket allowed MIME types in create/edit modal

image PR: https://github.com/supabase/supabase/pull/19062 Link: https://supabase.com/dashboard/project/_/storage/buckets

SQL Editor support downloading snippet as a migration, a seed file or a SQL file

image image PR: https://github.com/supabase/supabase/pull/17341 Link: https://supabase.com/dashboard/project/_/sql/new

Table Editor fix freezing a column causes UI to crash

Shout out to @tranhoangvuit for this one! 🙏 PR: https://github.com/supabase/supabase/pull/19127 Link: https://supabase.com/dashboard/project/_/editor

LinkedIn has modified the required scopes for their API and OAuth Applications created prior to 1st Aug 2023 do not contain the appropriate scopes. This could cause errors when attempting to sign in with OAuth via LinkedIn. If you have LinkedIn provider enabled on your project a follow up notification will be sent to your email as you could potentially have a LinkedIn OAuth application created before 1st Aug 2023 and be affected. As we don't have access to LinkedIn OAuth configuration we cannot tell with certainty when your OAuth application was created and have to reach out to all users with LinkedIn enabled.

To adjust to this change, we have introduced a new LinkedIn (OIDC) provider which contains the new required scopes and we have deprecated the existing LinkedIn provider.

If you are using a LinkedIn OAuth Application created before 1st August 2023 we ask that you create a new LinkedIn application and migrate your Dashboard credentials from the deprecated LinkedIn provider to the new LinkedIn (OIDC) provider as shown in the screenshot below. Please do so before 4th Jan 2024 as we will be removing the provider from the dashboard then.

CleanShot 2023-11-25 at 00 51 46@2x

Server-Side Auth in Next.js 14

Server-Side Auth in Next.js 14

We've released @supabase/ssr, which makes it super easy to use cookies for storing user sessions. We’ve updated npx create-next-app -e with-supabase to use @supabase/ssr and made it compatible with Next.js 14.

Read the blog post.

pgvector vs Pinecone

pgvector vs Pinecone

pgvector is becoming the vector store of choice for developers. We’ve put it to the test against Pinecone and found that it performs better on cost and query throughput, without sacrificing accuracy.

See the full benchmarks

Manage storage buckets from the command line

Manage storage buckets from the command line

You can now manage Storage buckets with the Supabase CLI:

  • supabase storage ls -r: show all buckets and objects
  • supabase cp -r readme.md ss:///bucket: upload local files to bucket
  • supabase cp -r ss:///bucket: download objects from bucket
  • supabase rm -r ss:///bucket: delete files from bucket

Managing Storage buckets with CLI works best if there are less than 100k objects in your bucket and each of them is smaller than 20MB. Reference docs are here.

What's new in Supabase Studio?

What's new in Supabase Studio?

Supabase Studio is improved many times per day, here is some of what's new:

  • Better error surfacing in SQL Editor. [PR]
  • Break out auth rate limit fields into a separate page. [PR]
  • Enumerated types management. [PR]
  • New API side panel. [PR]
  • Audit logs for organizations available on Team plan.

Check them out.

Multi-factor Authentication in Supabase Studio

Multi-factor Authentication in Supabase Studio

Secure your Supabase account with Multi-Factor Authentication. You can now add a time-based one-time password (TOTP), managed by apps such as 1Password, Authy, Google Authenticator or Apple's Keychain.

Check out the doc

Quick product announcements

  • [Auth] LinkedIn OIDC provider. [PR]
  • [Auth] Use token to include the redirect URL in your email template. [PR]
  • [pgvector] Upgrade 0.5.1 (faster HNSW index builds). [Release]
  • [Dashboard] Scopes for OAuth apps. [PR]
  • [Postgres] pg_jsonschema upgrade 0.1.4 to 0.2.0. [Release]
  • [Supavisor] Starts providing Docker Images. [Docker]
  • [GraphQL] GraphQL user defined functions now supported following the pg_graphql upgrade from 1.2.3 to 1.4.2. [Docs]

Broadcast realtime messages via REST API

Broadcast realtime messages via REST API

You can now broadcast Realtime messages to all your connected users by simply using a REST API call, removing the need to connect to a WebSocket. This will be especially useful with our Edge Functions!

Broadcast docs

Supavisor is now used for connection pooling in all new projects

Supavisor is now used for connection pooling in all new projects

Less than two months ago, we announced Supavisor, our own Postgres connection pooler that handles millions of connections. It’s now available in all new projects. You can continue using pgbouncer alongside Supavisor, however, it will be deprecated effective January 15th, 2024.

Learn more

Moving to IPV6 for Database Connection Strings

With IPv4 addresses becoming increasingly scarce and cloud providers starting to charge for it, we won’t be assigning IPv4 addresses to Supabase projects from January 15th, 2024. [db.projectref.supabase.co](http://db.projectref.supabase.co) will start resolving to a IPv6 address instead. If you plan on connecting to your database directly, you must ensure that your network can communicate over IPv6. Supavisor will continue to return IPv4 addresses, so you can update your applications to connect to Supavisor instead.

Learn more

New Foreign Data Wrapper: Airtable

New Foreign Data Wrapper: Airtable

Introducing the latest addition to our Wrappers lineup: Airtable! You can use it to query data from your Airtable bases and tables directly from Postgres:


_10
select * from my_airtable_table;
_10
# data from Airtable

Read the Airtable Wrapper docs Learn about Wrappers

Supabase Studio's latest enhancements

Supabase Studio's latest enhancements

Supabase Studio is under constant improvement, here is what’s new:

  • Added UI support for cascade updates
  • Improved JSON previewing and editing
  • Button for toggling Realtime right from the Table Editor
  • See View definition and open it in the SQL Editor to modify
  • UI to view and unban IP addresses to manage banned IPs more conveniently
  • Import CSV files at the table creation stage and a new button to download the table as CSV

Try them out

HNSW Support for Vecs + pgvector

HNSW Support for Vecs + pgvector

Added HNSW support inside Vecs, our Python library for pgvector. Vecs automatically creates schemas and collections inside your database, making it one of the easiest ways to get started with pgvector.

Read the HNSW docs

Quick product announcements

  • [PostgREST] JWT caching just landed. API requests are about to get 100ms faster. [PR]
  • [Auth] Added a default in-memory storage mechanism to allow using supabase-js in these environments to fall back to use this default storage mechanism now. Upgrade to supabase-js v2.36.0 or gotrue-js v2.54.0 for the latest changes. [PR]
  • [Edge Functions] Supports much simpler API for creating functions Deno.serve(req => new Response("ok")). No http standard library dependency needed. (Thanks eifr for contributing with updated CLI templates. [PR]
  • [Edge Functions] You can manage the secrets for your project's Edge Functions via the dashboard. [Try it now]

pgvector v0.5.0: Faster semantic search with HNSW indexes

pgvector v0.5.0: Faster semantic search with HNSW indexes

pgvector v0.5.0 adds Hierarchical Navigable Small World (HNSW), a new type of index that ensures lightning-fast vector searches, especially in high-dimensional spaces and embeddings.

Blog post

Day 1 - Hugging Face is now supported in Supabase

Day 1 - Hugging Face is now supported in Supabase

We are all about open source collaboration, and Hugging Face is one of the open source communities we admire most. That’s why we've added Hugging Face support in our Python Vector Client and Edge Functions (Javascript).

Day 2 - Supabase Local Dev: migrations, branching, and observability

Day 2 - Supabase Local Dev: migrations, branching, and observability

The CLI received some serious upgrades including observability tools, streamlined backups, and enhanced migrations. But that's not all – the big game-changer is the introduction of Supabase branching which we’re rolling out to selected customers.

Day 3 - Supabase Studio 3.0

Day 3 - Supabase Studio 3.0

Supabase Studio brings some huge new features, including AI SQL editor, Schema diagrams, Wrappers UI, and a lot more!

Day 4 - Supabase Integrations Marketplace

Day 4 - Supabase Integrations Marketplace

With the release of OAuth2 applications, we've made it easier than ever for our partners to extend the Supabase platform with useful tooling.

Day 4 - Vercel Integration 2.0 and Next.js App Router Support

Day 4 - Vercel Integration 2.0 and Next.js App Router Support

The New Supabase x Vercel integration streamlines the process of creating, deploying, and maintaining web applications with several enhancements. Plus, it fully supports the App Router in Next.js ▲

Blog post

Day 5 - Supavisor: Scaling Postgres to 1 Million Connections

Day 5 - Supavisor: Scaling Postgres to 1 Million Connections

Supavisor is a scalable, cloud-native Postgres connection pooler written in Elixir. It has been developed with multi-tenancy in mind, handling millions of connections without significant overhead or latency. We’re rolling it out to every database on our platform.

Community Highlights from the past 4 months

Community Highlights from the past 4 months

Launch Week is an event for our community, so it’s a good time to look back at what happened in the last months (spoiler: a lot).

Blog post

HIPAA and SOC2 Type 2

One more thing: HIPAA and SOC2 Type 2

Supabase is officially SOC2 Type 2 and HIPAA compliant! In this write-up, we offer insights into what you can expect if you’re planning to go through the same process.

Blog post

More product announcements

Shipping doesn’t stop here at Supabase! We are back in full shipping mode and already thinking about the next LW. These are some of the things we’ve been working on:

Native Mobile Auth Support for Google and Apple Sign in

Native Mobile Auth Support for Google and Apple Sign in

Supabase Auth now has full native support for Sign in with Apple and Google, which means it can now be used with one-tap sign in methods like Sign in with Apple JS, Sign in with Google for Web, or even in Chrome extensions.

Learn more

Supabase CLI: what is new?

Supabase CLI: what is new?

It’s been a busy month for the Supabase CLI. We have added a tonne of new features:

See all updates

Revamped billing experience

Revamped billing experience

We have made huge improvements to the billing tooling inside Supabase Studio, including:

  • Easy monitoring of current usage, overage, and plan limits.
  • Streamlined subscription management for upgrades or downgrades.
  • Detailed usage billing breakdowns and compute instance specifications.
  • And more!

New subscription page | New usage page

Login with Kakao

Login with Kakao

Added the popular social platform Kakao as new social provider. Allow your users to effortlessly sign in using their Kakao accounts and make authentication a breeze while expanding your app's reach to a wider audience.

Login with Kakao

Quick product updates

  • [Postgres Tooling] Implemented parallel Index build in regular and recovery state into OrioleDB. [PR]
  • [Edge Functions] Edge Functions troubleshooting guide. [Doc]
  • [Storage] Object id is now returned in the response when uploading an object. [PR]
  • [Realtime] A new debugging tool to test your realtime endpoints together with your JWTs and Row Level Security policies. [Realtime Inspector]
  • [Docs] A full guide on database partitions for developers looking to scale up. [Guide]

Launch Week alert: save the date

Launch Week 8 is announced - From Monday 07/08 till Friday 11/08

Supabase Vector: the open source Vector Toolkit for Postgres

Storing vector embeddings in Postgres with 'pgvector' is becoming increasingly popular for AI applications, so we're building out a collection of tools to store, index, and query embeddings at scale.

Supabase Vector

Vault is now available for all projects

Vault is a Postgres extension and accompanying Supabase UI that makes it safe and easy to store encrypted secrets and other data in your database.

Learn how to use Vault

Auth Helpers now include server-side Auth and full support for the Next.js App Router

We have updated the Next.js Auth Helpers package to make it available across the client and server of the App Router. They also now implement server-side auth by default with PKCE - meaning the entire auth flow is now possible server-side.

Updated docs

Video course

Improving our dashboard with user feedback

As we plan the next few months of Dashboard development, we're reaching out to users to see all the different ways people use the Dashboard in their work.

Last month, we opened up a public RFC for the Dashboard SQL Editor. It's been amazing to see how people use this tool to build their projects. If you're a heavy user of the SQL Editor, we'd love to get your feedback.

We also started doing user interviews to understand how users use the Dashboard. Our goal is to build the best possible Dashboard for all of our users, and you can help! Reach out to Terry you would like to share your experience.

Quick product announcements

  • [Auth] You can now use Turnstile as a Captcha provider. Doc

  • [Auth] How to send a password reauthentication nonce. Doc

  • [Dashboard] Supabase Wrappers UI that supports pulling data in from Firebase, Stripe, S3, and Clickhouse. Create a Wrapper

  • [Edge Functions] Support for deploying all Edge Functions via CLI. Doc

  • [Edge Functions] Custom domains and vanity domains support for Edge Functions. PR

  • [Storage] Image Transformation is now out of Beta. Doc

  • [Postgres Extensions] pg_cron 1.5.2 (new projects only) now supports sub-minute schedules. PR

New Integrations, templates, and examples

Day 1 - Supabase Logs: open source logging server

Day 1 - Supabase Logs: open source logging server

Logflare is the hub of analytics streams for Supabase. We are open sourcing it so that you can self-host your own Logging infrastructure.

Blog Post Video overview

Day 2 - Supabase Edge Runtime: Self-hosted Deno Functions

Day 2 - Supabase Edge Runtime: Self-hosted Deno Functions

You can now self-host Edge Functions and run them in local development using our new Edge Runtime. We published a guide showing how to self-host Edge Functions with Fly and what more is coming ⚡

Blog post Video overview

Day 3 - Storage v3: Resumable Uploads with support for 50GB files

Day 3 - Storage v3: Resumable Uploads with support for 50GB files

Supabase Storage received many of the most requested features from our users: Resumable Uploads, Quality Filters, Next.js support, and WebP support.

Blog post Video overview

Day 4 - Supabase Auth: SSO, Mobile, and Server-side support

Day 4 - Supabase Auth: SSO, Mobile, and Server-side support

On day 4, we introduced SSO with SAML 2.0, PKCE, and Sign in with Apple for iOS. It felt like acronym day, but it was actually Auth day!

Blog post Video overview

Day 5 - Supabase Studio 2.0 with new AI features

Day 5 - Supabase Studio 2.0 with new AI features

Supabase Studio got a major upgrade that goes from redesigns to improved developer experience, and new tools. We have the features people have been asking for and new capabilities that will change the way you work.

Blog Post Video overview

Introducing dbdev: PostgreSQL Package Manager

dbdev: PostgreSQL Package Manager

database.dev fills the same role for PostgreSQL as npm for JavaScript or pip for Python, it enables publishing libraries and applications for repeatable deployment. Our goal is to create an open ecosystem for packaging and discovering SQL.

Blog post

More product announcements

  • Trusted Language Extensions for Postgres. [Blog post]
  • What's New in pg_graphql v1.2. [Blog post]
  • GitHub Discussions are now a new knowledge source for search & AI (Troubleshooting category only for now). [Check it out]
  • New API report with routing information for each chart, making it easier to debug API calls.  [PR]
  • Storage permission changes: the developer role is now allowed to update the storage settings (previously was only owner and admin). [PR]

GraphiQL editor in the dashboard

GraphiQL editor in the dashboard

The most popular GraphQL IDE/API explorer is now built into the dashboard! You can now explore and query your GraphQL API produced by pg_graphql.

Try it now.

Supabase + OpenAI search

We've updated our Docs search functionality to use pgvector + OpenAI. Still no cease and desist from Microsoft, so you can continue to ask Clippy any Supabase-specific questions 📎💚

Ask Clippy.

Serve all the functions!

Serve all the functions!

Do you use multiple Edge Functions in your project? Then celebrate! Supabase CLI 1.36+ now supports serving multiple Edge Functions at the same time.

To enable the feature, just run supabase functions serve in your project.

Check the docs.

Smaller Postgres docker images for everyone

Smaller Postgres docker images for everyone

We rewrote the Postgres Dockerfile with multi-stage builds so that each extension is compiled in its own separate stage. This reduces the size of the image from 1.3GB to 250MB, enabling a much faster boot time.

See it yourself

New UI for Postgres Roles

New UI for Postgres Roles

We've improved database role management. You can create, update, and delete database roles through the dashboard. Just one small step towards column-level security

Check it out.

API docs in the table editor

API docs in the table editor

API docs got a light touchup and were moved to the table editor. You can now look up API methods and generate & download type files right there ✨

Check it out.

Quick product updates

  • Postgres Extensions: We're rolling out some fixes for several Postgres extensions. Check your Dashboard notifications to see if you need to take any actions.

  • Auth: Added full OpenAPI 3.0 spec which provides a comprehensive overview of the API with documentation on each request. PR

  • Database: supabase-js now infers the response type from your query. If the inferred type is incorrect, you can use .returns<MyType>() to override it. Doc

  • Dashboard: Improved database roles management, you can now create, update and delete database roles through the dashboard. Dashboard

  • Dashboard: We've provided a reference panel showing all available paths that can be queried from each respective source that improves the Logs Explorer experience. Dashboard

Edge Functions: upgraded to Deno 1.30.3, that supports TypeScript 4.9.x and introduces satisfies. Thanks to Benjamin Dobell 🙏. PR

  • Realtime: Broadcast only primary key(s) for deleting records when RLS is enabled and replica identity is full. PR

The first month of the year was very productive here at Supabase. Here is a highlight of what we shipped during January:

Storing OpenAI embeddings in Postgres with pgvector

Storing OpenAI embeddings in Postgres with pgvector

pgvector is a popular PostgreSQL extension for storing embeddings and performing vector similarity search. It was one of the most requested extensions by the AI/ML community and is now available thanks to gregnr.

Read the announcement

Meet Supabase Clippy: ChatGPT for Docs

Meet Supabase Clippy: ChatGPT for Docs

Greg wasted no time and took pgvector for a spin, he combined it with OpenAI to build Supabase Clippy, a next-generation doc search. The first implementation is a 1-week MVP and fully open source, so you can build on top of it.

Client library reference: Python and C#

Client library reference: Python and C#

We have released extensive reference docs for C# and Python, detailing every object and method. What are you going to build?

pg_graphql now supports Views, Materialized Views, and Foreign Tables

pg_graphql now supports Views, Materialized Views, and Foreign Tables

Views, Materialized Views, and Foreign Tables are three database objects that provide a powerful way to access and organize and transform data without duplication.

Read the docs

Automatic WebP detection for Image Transformation

Automatic WebP detection for Image Transformation

WebP is a modern image format that provides superior lossless and lossy compression for images on the web. We are enabling format conversion by default for anyone who has Image Transformations. You can opt out by including format: origin in the transformation parameters.

Read the docs

Quick product updates

-  Postgres Extension: Another powerful and time-tested extension, pg_repack, is added to Supabase. [PR] - Auth: Multi-tab session support using the new browser BroadcastChannel API. If a user logs out on one tab, they will now be logged out on all tabs. [PR] - Postgres: Superior speed with lz4 database compression. [PR] - Postgres: Use ICU locales and collations for text attribute ordering in database queries. [PR] - Docs: New guide on scheduling functions with pg_cron. [Guide] - Edge Functions: You can now download source codes of deployed edge functions from the CLI. [Doc]

Launch Week 6 is just around the corner! We’re saving most of November’s updated as a surprise for Launch Week, but we still had time to ship some goodies this month.

Launch Week 6 tickets

Launch Week 6 tickets

Next week, we go all out for LW6. It’s 5 days of shipping, including major features requested by the community. You don’t want to miss a thing, so make sure to claim your free ticket (and you might win some very special SupaSwag).

Get your ticket

Remix Auth Helpers

Remix Auth Helpers

It’s here! The much-awaited Remix Auth Helpers make server-side auth even easier and with a better experience. Up to date with supabase-js V2 and can be used with Typescript.

Read the docs

Edgy Edge Functions

Edgy Edge Function

We launched a new YouTube series, Edgy Edge Functions, where we take a deep look at a new function every week.

Plus, we published three new functions examples: Generate OG Images, Build API servers using Oak, and Generate Screenshots using Puppeteer.

Quick product updates

  • NextAuth Supabase Adapter. Docs. This allows you to run NextAuth as your authentication server while storing user and session data in a dedicated next_auth schema in your Supabase Database. Complete with support for RLS. Do note that NextAuth is a standalone Authentication server that does not interface with Supabase Auth and therefore provides a different feature set.

  • Fixed two issues with the supabase.auth.signOut function: cookies not clearing properly and session not removed.

  • You can now customize magic links by providing access to the {{ .TokenHash }}PR

  • Now you can do redirects from your functions. PR

  • Conda support (conda install -c conda-forge supabase and everything else in py)

supabase-js v2 and supabase-flutter v1 released

supabase-js v2 and supabase-flutter v1 released

The new versions of our two most popular SDKs have been fully released. It couldn’t have happened without our amazing community, thanks to everyone involved. Now, it’s time to build 🛠

Try supabase-js V2

Try flutter-supabase V1

New Next.js quickstart & Next.js 13 example

New Next.js quickstart & Next.js 13 example

Next.js is all the rage right now 🔥 

Next.js Conf raised the bar for dev conferences. We had the honor of being a Gold Sponsor, so we revamped our Next.js Quickstart guide to include our pre-built Auth UI and Auth Helpers.

And Next.js 13 was announced! Making it extremely easy to fetch and cache data from our Serverless API. So we put together an example to try it out.

Supabase Auth and Server-Side Rendering

Supabase Auth and Server-Side Rendering

The Auth team published an in-depth doc explaining how Supabase Auth supports server-side rendering. Includes an explanation of the authentication flow and answers to some of the more common questions.

Read the docs.

Database Testing with pgTAP

Database Testing with pgTAP

Do you have 100% code coverage? Probably not, because that’s usually the last thing you think of, but definitely not if you don’t have database tests. We just shipped a framework for Database Tests which makes it incredibly easy to test your database using pgTAP an pg_prove.

Read the docs.

Edge Functions Update

Edge Functions Update

Functions now support GET requests! Other HTTP verbs such as PUT, PATCH, and DELETE are supported too.

Check this example

Quick Product Updates

  • supabase-py 🐍 now has functions support! PR
  • You can now detect users’ location from Edge Functions easily by using X-Forwarded-For header. Example
  • Return provider_refresh_token along with provider_access_token. PR
  • Added a refreshSession method to allow users to forcefully refresh a session instead of waiting for it to autorefresh upon expiry. Thanks to @j4w8n for the PR 🙇🏻‍♂️
  • Logging: realtime, storage, postgrest, and pgbouncer released.
  • Trigger a file download by adding the download query parameter to your storage objects. storage-api. PR

Kaizen Week

We did something a bit strange during September - we didn't work on features. Quite the opposite. After Launch Week we did three subsequent weeks of Kaizen, a term we use internally to deliver constant and incremental improvement. Each week had a different focus:

  • Week 1: QA and testing
  • Week 2: Documentation
  • Week 3: Issue Backlog and Automation

It's pretty rare for a company to stop feature development altogether, but luckily we're just a bunch of developers so we all know the pain of technical debt. After 5 Launch Weeks, working on testing and backlogs feels like a bit of a relief.

We saw a lot of progress across our Open Issues - closing over 250 issues and 50 Pull Requests.

Kaizen Week - Github Chart

Auth UI on Product Hunt

Auth UI on Product Hunt

We launched the new Auth UI on Product Hunt! Auth UI is a pre-built React component for authenticating users with Supabase Auth. It supports custom themes and extensible styles to match your brand and aesthetic.

Check out the launch.

Postgres WASM

Postgres WASM with Snaplet and Supabase

If you've ever wondered, "can I run Postgres inside a browser, using an embeddable Linux Virtual Machine?", wonder no longer. With our friends at Snaplet, we've released an open source Postgres WASM.

Read the blog post
Comment on Hacker News
Visit the repo: Snaplet | Supabase

Security updates

We're making some changes to the way the Dashboard interacts with your database. These changes simplify the database permissions so that it's easier for you to migrate in and out of Supabase, and they reduce the security surface area considerably. The change will be applied automatically in November, or you can run it today via the Dashboard.

Review the Security Notice.

Quick product updates

  • Edge functions free plan script size is bumped to 2 MB
  • functions-go was just contributed to supabase-community by Zain Khan
  • A new guide to add captcha to your sign-in, sign-up, and password reset forms
  • New Postgres Extension for monitoring your PostgreSQL database network traffic: pg_netstat
  • Added docs for how caching works in Supabase

System updates

All projects

New projects

  • PostgreSQL updated to v14.1

Manual Changes Required

Update custom auth functions

Details

The PostgREST release notes document some changes to the way GUC variables are handled here.

Supabase has created a config flag in the Dashboard to ensure that this will not be a breaking change. These changes are required before you can upgrade to PostgreSQL 14+, or use Realtime RLS.

Supabase has already updated all the default auth functions (auth.uid(), auth.role() and auth.email()), however we have no way of updating functions which we have not written ourselves.

Affected

  • Any project that have custom auth functions or generally any function that use legacy GUC naming convention to access JWT claims (eg current_setting('request.jwt.claims.XXX', true).
    • This change is required for PostgreSQL 14+.
    • This change is required for Realtime row level security

Unaffected

  • New projects
  • Existing projects who haven't written custom auth functions.

How to update

You need to update all functions that are using the legacy GUC naming convention (current_setting('request.jwt.claims.XXX', true)) to use the new convention (current_setting('request.jwt.claims', true)::json->>'XXX').

After you have made this change, you can safely

Example

For example, Supabase rewrote the auth.role() functions like this, to handle both legacy and new:


_19
-- PREVIOUSLY
_19
create or replace function auth.role()
_19
returns text
_19
language sql stable
_19
as $$
_19
select current_setting('request.jwt.claim.role', true)::text;
_19
$$;
_19
_19
-- UPDATED FUNCTION TO HANDLE NEW GUC NAMING SCHEME
_19
create or replace function auth.role()
_19
returns text
_19
language sql stable
_19
as $$
_19
select
_19
\tcoalesce(
_19
\t\tcurrent_setting('request.jwt.claim.role', true),
_19
\t\t(current_setting('request.jwt.claims', true)::jsonb ->> 'role')
_19
\t)::text
_19
$$;

Three new Auth providers, multi-schema support, and we're gearing up for another Launch Week. Let's dive into what's been happening at Supabase during the month of October.

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

Slack, Spotify, and MessageBird logins

Thanks to @HarryET and our friends at MessageBird we have 3 new Auth providers this month: Slack, Spotify, and MessageBird phone logins.

supabase-auth-slack

Multi-schema support

Dashboard

Browse data in any database schema using the Schema switcher in the Dashbaord.

multi-schema

API

You can access any schema with your API, after enabling access in the Dashboard. Docs.

supabase-multi-schema-support

Fresh Docs and Guides

We have a TON of new guides, with videos too.

Database Functions

Learn about PostgreSQL Functions. Docs.

https://youtu.be/MJZCCpCYEqk

Auth Overview

Learn about all the exciting feature of Auth within Supabase. Docs.

https://youtu.be/6ow_jW4epf8

API Features

Learn more about the power of PostgREST for RESTful APIs. Docs.

https://youtu.be/rPAJJFdtPw0

And more

launch-ckecklist

Community

There was a lot of activity this month.

Supabase at Jamstack conf

Supabase attended the Jamstack conf. Watch us catch up with Matt, the cofounder of Netlify (minute 8).

https://youtu.be/phC14xfwvjc

Supabase at Next.js conf

And Jon made a guest appearance at this year's amazing Next.js Conf.

https://youtu.be/GpXEMB1pDRE

Community Highlights

  • Vue 3 | Workout Tracker App - John Komarnicki video
  • Adalo + Supabase - Flywheel Media video
  • Nuxt 3 Beta + Supabase - BenCodeZen video
  • Made With Supabase (now on Nuxt 3) - Zernonia site
  • Nuxt 3 + Tailwind + Supabase - Ekene Eze video
  • SQL Functions - Răzvan Stătescu article
  • supabase-py v0.0.3 released - repo
  • nuxt-supabase v2.2.1 released - repo
  • vue-supabase v2.2.3 released - repo

GitHub

We hit 20K stars!! 21,268 to be exact: github.com/supabase/supabase

stars

Source: repository.surf/supabase

Check out some of our other community stats in our latest Series A Blog Post.

Coming Next: Launch Week III

We had Launch Week numero uno in March, and the sequel "Launch Week II: the SQL" in July.

Now we're going even bigger with the third installment: Launch Week III: The Trilogy. Join us on 29th November on our Discord.

og-launchweek-3

Did you know it's been 2 years since the first commit to Realtime, our real-time engine for Postgres? Before we even existed as a company!

We spent this month improving docs and content content, improving UX, and onboarding Developer Advocates!

release-sept-2021

Hackathon v2

To kick off Hacktoberfest, another Supabase Hackathon is happening right now. You've got another 7 days to be in to win a limited edition t-shirt. hacktober

Abort Requests

We added support for AbortController in our Javascript library so that you can abort long-running queries. [Docs] Supabase_abort_requests

Improved table management

We've made a number of changes to the Dashboard to expose some great features of PostgreSQL including:

Column types

We've improved the column Type field so that it supports your custom types. types

Is Unique

We've made it simple to add a unique constraint. is-unique

Edit columns

By popular request, you can now view all columns in a table at a glance and edit them in bulk. edit-columns

Cross-schema relationships

We updated our grid to support relationships across multiple schemas. relationships

Improved Auth Docs

We've revamped the Auth docs - The docs are now broken down into Authentication and Authorization, and organized alongside our Deep Dive series. auth-docs

Low Code demo

Low Code demo, Using Supabase with Clutch.io - @_dijonmusters ran a session at General Assembly showing how to use these two tools together to create apps using a low code approach. https://youtu.be/5fsKMTeBKKY

Community

There was a lot of new content this month.

Videos

Twitter

We hit 16.5k followers. Follow us there for advance frontend tips and 👁️⚡👁️ twitter

GitHub

Not far from 20K stars: github.com/supabase/supabase stars Source: repository.surf/supabase

Discord

Our Discord is growing fast. Come hangout with 3500+ developers building on Supabase today: discord.supabase.com discord

Hiring

We're Hiring SREs. We're fully remote and we love Open Source. See open roles. hiring

Coming Next

We're warming up for another Launch Week! Last time was "Launch Week II: the SQL". We're going to need another month to come up with a good pun again, so we'll aim for November.

Get started

August Beta 2021

Sep 13, 2021

We've raised $30M and shipped a bunch of features. Let's dive into what's been happening at Supabase during the month of August.

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

We raised $30 million

We raised our Series A. We'll use the funds to do more of the same - ship features and hire open source developers. We'll release more details soon. Read more on TechCrunch.

supabase-series-a

Realtime Security, codename: WALRUS

If you've been waiting for Row Level Security to land in Postgres subscriptions, then you're going to love our new repo: Write Ahead Log Realtime Unified Security (WALRUS). The name might be a bit forced, but the security design is deliberate. It's not in production yet, but we're making the repo public for comments using an RFC process.

walrus

Custom SMS templates

If you're using SMS login in Auth v2, you can now customize the SMS which is sent to your users. Read more in the docs.

custom-sms

Dart and Flutter Docs

Thanks entirely to @dshukertjr, we now have in-depth reference Dart documentation for CRUD, Auth, Realtime and more!

supabase-flutter

We launched the South Korea region

We added another region for those wanting to host their data and APIs in Seoul. We now have 12 regions to choose from

south-korea

Table creation is even easier

You can now create columns while creating your table. We've also added improvements for composite primary keys and foreign key creation.

create-tables

Unbreakable CSV Imports

Our previous importer would choke on CSV files which were too large. Not any more!

csv-imports

Connection strings

We now provide a handy copy utility for various database connection strings because we were so tired of looking them up on Stack Overflow.

connection-strings

We released a primer on Row Level Security

RLS can be a bit foreign for developers getting started with Postgres. This video by @_dijonmusters demystifies it. If you find the video a useful medium for learning, consider subscribing to our channel.

https://www.youtube.com/watch?v=Ow_Uzedfohk

Community

We had a community Hackathon

We held a one-week async Hackathon. Check out all the winners - it was truly impressive what people were able to build in just 7 days.

hackathon

We had a team Hackathon

The Supabase team didn't want to miss out on the fun so we held our own hackathon. It was a good way to dog-food. Some notable projects include

meme-town

We hit 18,000 stars on GitHub, and got to the top of GitHub trending for Typescript.

github-stars

repository.surf/supabase

If you want to keep up to date, make sure you subscribe to our YouTube channel or follow us on Twitter.

Dependency contributions

GoTrue (Auth)

PostgREST (APIs)

pg_net (Function Hooks)

Coming Next

Last December we moved from Alpha to Beta, with a focus on Security, Performance, and Reliability. After a couple of Launch Weeks pushing out new and sexy features, we have decided it's time to focus on these again.

By the time we're done, Supabase will be production-ready for all use cases.

Get started

July Beta 2021

Aug 12, 2021

Supabase is gearing up for another Launch Week on July the 26th. Until then, here's a few new things to try.

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

Launch Week II: The SQL

Following the success of our first Launch Week in March, we finished the July with "Launch Week II: The SQL". The community has been sieving through a slew of bad puns and retro memes to discover the new feature announcements.

supabase-launch-the-sql

Auth v2 with Phone Auth

Your users can now log in with SMS based mobile auth! We have a Twilio integration (Guide Here) and will be adding more providers soon.

Other Auth updating include, Twitch logins, and the ability to generate invite, recovery, confirmation, and magic links via the API, for people who want more control over the email templating flow. Read the blog post here.

verify-phone

Storage is now in Beta

Storage updates include Media Streaming, Public Buckets, Directory Uploads, and a Performance Improvements.

Streaming Media in particular opens up a whole new host of potential use cases, learn more about the updates here.

storage

Dashboard v2

We made some major new additions to the dashboard including usage statistics, a new project home, and tons of database insights. Check the post here on what you get and how we built it.

dashboards

We launched a Discord server

You'll find us hanging out regularly in the #hangout channel. We even "live-fixed" some production errors in there on Monday night (which occurred literally 1 hour before our first announcement of the week! Typical!). We're fast approaching 1,500 members so come and join the action! discord.supabase.com

discord

PostgreSQL 13

All new Supabase projects will be launched with PostgreSQL 13.3, and we're working on a migration path for old projects. This gives you looooaads of new stuff out the box.

postgres-13

PostgREST v8.0

We worked with our friends at PostgREST to make some huge improvements. For those of you who don't know, every Supabase instance comes with a dedicated PostgREST server by default, which provides the auto-generated CRUD API that we wrap with supabase-js.

postgrest-8

Flutter/Dart support

Our community driven libs for the fasted growing mobile and web framework are now in beta. Learn more by following the Quickstart guide.

dart

Hackathon

We're running a week long hackathon starting NOW. There are some legit prizes, and you can win in a bunch of different categories. Check the full instructions here on how to participate. Submissions close next Friday at midnight PST.

hackathon

Hooks & Functions

We made an announcement on the progress of functions, and even shipped a few preliminary components, try them out and give us feedback as we continue to move towards this next major milestone. Read the latest updates here.

hooks

Swag Store

Get your hands on some Supabase Swag, hand packed and mailed by our team based in Singapore.

swag

Community

Supabase Github Star Growth 

github-growth

If you want to keep up to date, make sure you subscribe to our YouTube channel or follow us on Twitter.

Coming Next

Security, stability, performance ... and Functions.

Get started

June Beta 2021

Jul 4, 2021

Supabase is gearing up for another Launch Week on July the 26th. Until then, here's a few new things to try.

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

Vercel integration

Vercel just released their new integrations, which means you can now deploy a Postgres database on Supabase directly from your Vercel account. Check it out! vercel.com/integrations/supabase

supabase-vercel

Discord logins are now available

Building a community? There's almost no better tool than Discord (we're even trialling it ourselves). If you're building a community product, Discord logins are the perfect option.

supabase-discord

New Guides

We spent the month building up a new Guides section in our Docs. Here are a few highlights:

Ever wanted to build a Search Engine? We just released a guide which shows you how to implement Full Text Search using Postgres.

postgres-fts

OAuth Guides

We released step-by-step guides to help you set up OAuth with Apple, Bitbucket, Facebook, GitHub, GitLab, Google, and Twitter.

apple-developer-portal

Javascript + Postgres

Did you know that you can use Javascript inside your Postgres database? Here's how, with the plv8 extension.

supabase-plv8

Public Storage Buckets

Want to share all your favourite memes? Now it's even easier with Public Storage Buckets. Simply mark a bucket as "Public" and the content will be accessible without a login.

Storage upserts

Supabase Storage now supports upsert. Shoutout to @ankitjena for this Pull Request.

supabase-storage-upsert

Server restarts

When things go wrong, sometime the best thing you can do is reboot. We released a restart button in the Dashboard, the first of many debugging tools we'll be releasing over the next few months.

server-restarts

Policy editor

We added a new Table Policy Editor which makes Row Level Security even easier. We even included a few templates to get you started.

policy-editor

Build in Public

We run a weekly 1-hour live stream where we build in public.

Community

If you want to keep up to date, make sure you subscribe to our YouTube channel or follow us on Twitter.

External contributions

PostgREST

  • Primarily for Prisma users, we patched PostgREST openapi-mode to ignore anon privileges for the OpenAPI output. Credit to @steve-chavez.

April Beta 2021

May 5, 2021

This month was a "gardening" month for Supabase. The team focused on stability, security, and community support. Check out what we were working on below, as well as some incredible Community contributions.

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

Light Mode

We're a developer tool, which means that Dark Mode is extremely popular.

This poll on twitter shows that 78.5% of our developer base use Dark Mode for the IDE

While Dark mode is great, for some people it's not an option. Dark Mode is difficult to use for developers with astigmatisms, or even just working in brightly-lit environments.

So today we're shipping Light Mode. Access it in the settings of your Dashboard.

image

Translations

With the help of the community, we started internationalizing our main repository:

map

OpenAPI spec for Storage

We released Storage Api docs built using OpenAPI (swagger).

storage-openapi

Stripe Sync Engine (Experimental)

We open-sourced a server which keeps any Postgres database in sync with Stripe. This is experimental only. We're evaluating other tools such as Singer, which provide a more general solution (but are less "realtime"), and we're opening it up here to gather feedback.

stripe-sync-engine

Community spotlight: Threaded comments

One of the most powerful Postgres features is "recursive CTEs" which can be used for nested items (comments, pages, friend-graphs). @lawrencecchen has built a full Threaded Comments demo which you can Deploy with a single click. Want to add comments to your blog with Full Text Search? Just use Postgres.

image

Community spotlight: SupaScript

It looks like @burggraf2 got tired of waiting for us to ship Functions, and decided to build a whole JS ecosystem within his Supabase database. If you want to write PG functions in JS, import remote libraries from the web, and console log to your browser, check out this SupaScript repo.


_18
// After installing:
_18
// https://github.com/burggraf/SupaScript#installation
_18
_18
/**
_18
* Get all users who logged in this week.
_18
* Use in the database: select * from users_this_week();
_18
* Use in the browser: supabase.rpc('users_this_week');
_18
*/
_18
create or replace function users_this_week()
_18
returns json as $$
_18
const moment = require('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.js', false);
_18
_18
const lastWeek = moment().subtract(7, 'days');
_18
const query = 'select * from auth.users where created_at > $1'
_18
const users = sql(query, lastWeek);
_18
_18
return users;
_18
$$ language plv8;

Community

Supabase Github Star Growth

stars-all

Source: repository.surf/supabase

If you want to keep up to date, make sure you subscribe to our YouTube channel or follow us on Twitter.

Coming Next

You might have noticed our Dashboard slowly changing (improving), as we migrate the components out to our open source UI Library. This progression is an important step towards offering a UI for Local Development and Self Hosting.

We're also working on our Workflows engine. This is quite a large task, but we're making progress and aiming to ship sometime in July.

One more thing

We started hiring.

hiring

Get started

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.

ph-1

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.

pgbouncer-thumb

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.

supabase-ui

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.

supabase-cli

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.

oauth-scopes

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.

Our dashboard has sidebars

SQL Autocomplete

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

autocomplete

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.

Our dashboard has sidebars

New Region

Launch your database in South Africa.

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.

Supabase now supports count functionality

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.

Supabase now supports Azure and Facebook Oauth providers

Auth Audit Trail

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

Supabase exposes the Auth Audit trail on the dashboard

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.

Supabase has released a React Auth widget

New auth.email() function

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

Supabase added an email function for using with Policies

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.

Copy query results as markdown

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

Use supabase with React 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.

update-docs

Table View now has realtime changes

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

realtime-updates

Table Pagination

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

table-pagination

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.

This image shows how to invite a new user directly from the dashboard.

User admin

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

This image shows how to delete a user directly from the dashboard

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.

This image shows our improved SQL Editor

Status page

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

This image shows our new status page

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.

This image shows a SQL Editor with tabs. Originally our SQL editor was very basic, but we're moving towards something very powerful.

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.

This image shows some of the keyboard shortcuts we introduced on the table editor.

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.

This image shows a template where developers can edit the magic links email which is sent to their users on sign up.

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.

This is also available as a blog post.

Third-party logins

We've released OAuth logins! You can now enable third-party logins on your app for Bitbucket, GitHub, GitLab, or Google.

This is a picture of the supabase dashboard with OAuth logins

Clone tables

You can duplicate your tables, just like you would inside a spreadsheet.

duplicate-tables

Enable and disable extensions

Extensions are easier to use. You can enable Postgres extensions with the click of a button.

toggle-extensions

Save your favorite queries

The SQL editor now stores your query history in your browser. You can also save your favorite queries to run later!

favourites

GitHub Discussions

Supabase was given access to GitHub Discussions! This is the place for you to ask questions or show off what you've built with Supabase.

This is a screenshot of our GitHub Discussions, a new feature by GitHub

Kaizen

This is also available as a blog post.

We're 6 months into building our hosted database platform and we've made some major improvements to our auth system and table view.

Easily create tables

Set up tables and columns directly from the table view.

Create tables from the dashboard

Invite your team

You can now invite team members to your organisation.

Invite team members to Supabase

Auth: Email Confirmations

You can now enable Email Confirmations for new users. This can be toggled on or off and the template for this email can be edited via the dashboard.

Email templates

Typescript support

The biggest communty contribution to date, @thorwebdev added Typescript support to Supabase. He even live streamed the process.

This gif shows how TypeScript makes it even easier to use Supabase, through VSCode's intellisense

Kaizen

We have a number of small improvements:

Build in a weekend, scale to millions