Supabase.js 1.0

Today we're releasing supabase-js version 1.0, and it comes with some major Developer Experience improvements.

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, PostgREST, GoTrue, and Realtime. 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) {
console.log(error)
}

And now we simply return them:

const { data, error } = supabase.from('todos').select('*')
if (error) console.log(error)
// 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-libaries. 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 libary includes a number of new additions, including third-party logins.

Previously:

const {
body: { user },
} = await supabase.auth.signup(
'someone@email.com',
'password'
)

Now:

const { user, error } = await supabase.auth.signUp({
email: 'someone@email.com',
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

Previously:

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

Now:

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

Upgrading

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