Supabase.js 1.0


4 minute read

UPDATE 16/08/2022: supabase-js v2 is out and focuses on “quality-of-life” improvements for developers. V2 includes Type support, new auth methods, realtime multiplayer sneak peek, and more: Read the blog post

New Docs

Before digging into the improvements, we're excited to point out our new developer docs. While they're still a work in progress, here are some things we think you'll like:

  • The Reference Docs are auto-generated from our TypeScript definitions and then enriched with examples. This forces us to document our code and makes it easier to keep everything in sync.
  • We added placeholders for the other languages that the community is developing. They have already started with Python, C#, Dart, Rust, and Swift. Expect to see the docs filling up soon!
  • We've added sections for all of the open source tools we use, including Postgres, PostgREST1, GoTrue, and Realtime2. We'll be filling these with lots of valuable information including self-hosting, benchmarks, and simple guides.

Errors are returned, not thrown

We attribute this improvement to community feedback. This has significantly improved the developer experience.

Previously we would throw errors:

try {
const { body } = supabase.from('todos').select('*')
} catch (error) {

And now we simply return them:

const { data, error } = supabase.from('todos').select('*')
if (error) console.log(error)\n
// else, carry on ..

After testing this for a while we're very happy with this pattern. Errors are handled next to the offending function. Of course you can always rethrow the error if that's your preference.

We created gotrue-js

Our goal for supabase-js is to tie together many sub-libraries. Each sub-library is a standalone implementation for a single external system. This is one of the ways we support existing open source tools.

To maintain this philosophy, we created gotrue-js, a library for Netlify's GoTrue auth server. This library includes a number of new additions, including third-party logins.


const {
body: { user },
} = await supabase.auth.signup('[email protected]', 'password')


const { user, error } = await supabase.auth.signUp({
password: 'password',

Enhancements and fixes

  • Native TypeScript. All of our libraries are now natively built with TypeScript: supabase-js, postgrest-js, gotrue-js, and realtime-js.
  • Better realtime scalability: we only generate one socket connection per Supabase client. Previously we would create a connection for every subscription.
  • We've added support for OAuth providers.
  • 60% of minor bugs outstanding for supabase-js have been solved.
  • You can use select() instead of select(*)

Breaking changes

We've bumped the major version because there are a number of breaking changes. We've detailed these in the release notes, but here are a few to be aware of:

  • signup() is now signUp() and email / password is passed as an object
  • logout() is now signOut()
  • login() is now signIn()
  • ova() and ovr() are now just ov()
  • body is now data


const { body } = supabase.from('todos').select('*')


const { data } = supabase.from('todos').select()


We have documented all of the changes in the release notes.

To summarise the steps:

  1. Install the new version: npm install @supabase/supabase-js@latest
  2. Update all your body constants to data
  3. Update all your supabase.auth functions with the new Auth interface

Get started


  1. Removed link on June 14 2022 for search optimization: page currently does not exist

  2. Removed link on June 14 2022 for search optimization: page currently does not exist

Share this article

Build in a weekend, scale to millions