Supabase.js 1.0

30 Oct 2020

·

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:


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

And now we simply return them:


_10
const { data, error } = supabase.from('todos').select('*')
_10
if (error) console.log(error)\n
_10
// 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.

Previously:


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

Now:


_10
const { user, error } = await supabase.auth.signUp({
_10
email: 'someone@email.com',
_10
password: 'password',
_10
})

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:


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

Now:


_10
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#

Footnotes#

  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