import Container from 'components/Container' import CountUp from 'components/CountUp' import CTABanner from 'components/CTABanner/index' import FlyOut from 'components/UI/FlyOut' import { AlphaNumbers, IntroductionSegments, PerformanceComparisonData } from 'data/BetaPage' import authors from 'lib/authors.json' import { APP_NAME, DEFAULT_META_DESCRIPTION } from 'lib/constants' import { NextSeo } from 'next-seo' import Head from 'next/head' import Link from 'next/link' import Image from 'next/image' import { useRouter } from 'next/router' import { useEffect, useRef, useState } from 'react' import Layout from '~/components/Layouts/Default' const site_title = `${APP_NAME} | We are now in Beta` // Dark text: text-dark-400 // Light text: text-foreground-light type Props = { darkMode: boolean } const NavFlyOutMenu = (props: any) => { const { scrollTo } = props const segments = IntroductionSegments.map((segment: any) => segment.chapters) return ( <>
{segments.flat().map((segment: any) => (
scrollTo(segment.key)} className={` text-foreground-light bg-surface-100 hover:bg-surface-200 border-default col-span-12 cursor-pointer border-t border-dashed px-4 py-4 sm:border-l lg:col-span-4 lg:px-6 lg:py-10`} >

0{segment.no} {segment.name}

))}
) } const VideoShot = (props: any) => { const { src } = props return (
) } const HamburgerMenu = (props: any) => { const { openMenu } = props return (
) } const SectionHeader = (props: any) => { const { sectionNumber, header } = props return (
0{sectionNumber}

{header}

) } const Hero = (props: Props) => { const { basePath } = useRouter() const { darkMode } = props return (

Supabase is an open source Firebase alternative.

Today, we're moving to Beta

) } const Introduction = () => { return (

After the launch of our{' '} Alpha {' '} Program in June,

we've been fortunate to work with thousands of early adopters on improving both our Open Source, and Hosted offerings. Companies like{' '} Xendit ,{' '} Monitoro , and{' '} TAYFA {' '} are using Supabase to ship more products, faster.

Alpha Program in Numbers

{AlphaNumbers.map((stat: any, idx: number) => (
{stat.icon}

{stat.value} {stat.unit && {stat.unit}}

{stat.name}

))}
) } const TableOfContents = (props: any) => { const { scrollTo } = props return (

Supabase Beta is starting now.

{IntroductionSegments.map((segment: any, segmentIdx: number) => (

{segment.description}

{segment.chapters.map((chapter: any, idx: number) => (
scrollTo(chapter.key)} >

{`0${chapter.no}`}

{chapter.name}

))}
))}
) } const Performance = () => { const Bar = (props: any) => { const { color, finalPercentage, duration = 2000 } = props const countTo = parseInt(finalPercentage, 10) const [count, setCount] = useState(0) const [animTriggered, setAnimTriggered] = useState(false) const easeOutQuad = (t: number) => t * (2 - t) const frameDuration = 1000 / 60 useEffect(() => { let frame = 0 const totalFrames = Math.round(duration / frameDuration) async function handleScroll() { const reference = document.getElementById('performanceCharts') if (reference && !animTriggered) { const yOffset = reference.getBoundingClientRect().top - window.innerHeight + 20 if (yOffset <= 0) { setAnimTriggered(true) setCount(0) const counter = setInterval(() => { frame++ const progress = easeOutQuad(frame / totalFrames) setCount(countTo * progress) if (frame === totalFrames) clearInterval(counter) }, frameDuration) } } } window.addEventListener('scroll', handleScroll, { passive: true }) return () => window.removeEventListener('scroll', handleScroll) }, [animTriggered]) return
} const ComparisonChart = () => { const maxValue = 1600 return (
{PerformanceComparisonData.map((metric: any) => { const multiplier = (metric.stats[0].value / metric.stats[1].value).toFixed(1) return (

{metric.title}

{metric.stats.map((stat: any, idx: number) => (

{stat.name}

{stat.value}/s

))}

{multiplier}x

more {metric.key}s per second

) })}
) } return (

We started Supabase to give developers a web-ready database that is delightful to use, without sacrificing speed and scale. Postgres makes this possible, handling massive amounts of data without sacrificing read and write speed.

We tweaked our stack obsessively during our Alpha program to tease out superior performance. We chose the hyper-scalable{' '} Elixir {' '} to handle our{' '} Realtime engine , and have supported the{' '} PostgREST {' '} team while they improved the performance of their auto-generated CRUD APIs.

We're publishing the results of our benchmarks here and we'll continue to seek gains throughout our Beta program and beyond. Our{' '} benchmarks {' '} are open source so that the community can better our methodologies and identify areas of improvement for the tools which we support at Supabase.

Benchmarks were run from a neutral host (Digital Ocean Droplet 4 GB Memory / 80 GB Disk / SGP1 - Ubuntu 20.04 (LTS) x64) against a table/collection pre-populated with 1 million rows. The Supabase database and API used are each running on AWS EC2 t3a.micro instances.

Supabase is available in 7 different geographic regions. We're adding more regions as we build up multi-cloud support. Soon we'll offer read-replicas to scale your database right to the edge - reducing latency and giving your users a better experience.

One of our key metrics at Supabase is "Time to Value". How fast can a user go from sign up, to making their first API request? How fast can they go from development to production? We've built several case studies on our blog, demonstrating how Supabase enables them to build and scale their product in as little time as possible.

) } const Security = () => { return (

As an infrastructure provider, security has been a priority from day one. While we had to resolve brute force attacks on our customers' databases, we internally run pen tests to ensure that our own systems are air-tight.

Approaching the launch of our Beta period, we worked with security advisors and specialists globally to enforce new measures and processes:

  • Employed DigitalXRAID to run a full Pen Test on both our internal and customer infrastructure. We immediately patched one medium priority issue and are currently in the process of resolving the minor and informational issues.
  • Published a disclosure policy so that ethical hackers can help us find vulnerabilities in our systems. We've received reports from this initiative already, and we'll continue to formalize our bounty program throughout the Beta.
  • We now run an ongoing internal Capture the Flag competition, where team members are challenged to breach various components of our systems.
  • Adopted the{' '} Snyk {' '} dependency monitor as part of our SSDLC on several key component of our system, to help locate potential vulnerabilities in third party Open Source dependencies.
  • Worked with several of the open source tools that we use to improve their own security. For example, PostgREST{' '} now uses {' '} "parametrized" inputs, where they were previously "escaped".
) } const Reliability = () => { return (

During Alpha we experienced 2 availability incidents, neither affecting customer access to their data. These were:

  • A third-party CDN API outage. As a result, subdomains were not created for new projects.
  • Cloud resource limits. We maxed out our Virtual Machines limits in some popular regions, and we hit the maximum number of subdomains allowed by our DNS provider. These limitations are artificial and our cloud providers quickly lifted them.

Availability is one of our highest priority goals. We're continuing efforts to maximize uptime and ensure user data is backed up in a secure and encrypted location.

We're launching{' '} https://status.supabase.com {' '} to keep track of uptime across all of our services and critical infrastructure.

For our Alpha & Beta Users we take free, encrypted daily database backups up to 20GB. They are available to download at any time via the dashboard.

) } const NewFeaturesAndIntegrations = () => { const { basePath } = useRouter() return (

If you're new to Supabase, here's a few of the things you get when you choose us as your backend.

  • Auth

    If you're new to Supabase, here's a few of the things you get when you choose us as your backend. We provide{' '} JavaScript {' '} (and{' '} HTTP ) APIs for your users to sign in and out of your application. You can define the rows in your database that logged-in users can access (e.g. only his or her shopping cart). We even provide account confirmation, recovery, and invite email templates which you can customize on the dashboard, and we handle the transactional emails for you. We support passwordless links, and we offer several OAuth providers including Google, GitHub, with more on the way.

  • Realtime

    You can{' '} subscribe to changes in your database {' '} over websockets, receiving your data in realtime. Companies are using Supabase to build chat applications, trigger notifications, and pipe data to analytics dashboards whenever it changes in their database.

  • CRUD API

    You can use your database immediately, without an ORM or an API backend. We support GraphQL-like{' '} querying from multiple tables {' '} in a single request, and you can even{' '} invoke complex functions .

  • Quickstart Templates

    If you're unfamiliar with SQL, we provide a set of Quickstart Templates to get you building quickly. Very soon you'll be able to deploy entire apps (front and back end) with just the click of a button.

  • Table View

    View and edit your data like a spreadsheet from within the Supabase dashboard. Build your schema, create complex relationships, and import and export to csv.

  • SQL Editor

    No need to install third party SQL tools, you can run queries directly from the Supabase Dashboard.

) } const BetaPricing = () => (

For up to date pricing info see: https://supabase.com/pricing

We're working closely with many open source projects, infrastructure providers, and of course our Alpha Users, to provide a predictable and sustainable pricing model.

Our key aims going into this exercise were:

  • To continue offering free Supabase instances for Students, Hobbyists, and Early Adopters
  • To price based on predictable metrics (no shock bills at the end of the month)
  • To grow with our users, providing a pricing model that supports their growth and allow them to create value for their customers

We are committing to the following initiatives:

  • All Alpha Users will receive credits equivalent of 2 years of base plan usage. These will automatically be credited to your account if you signed up prior to December 2020.
  • All Beta Users (new users from December 2020) will receive 1 year of base plan usage for free.
  • University (and participating code school) Students will be eligible for 2 years of base plan usage (Code Schools can contact{' '} rory@supabase.io )
  • Early stage startups participating in selected incubator programs can claim additional credits which can be applied to products outside of the base plan.

The Supabase Base plan is now called the Supabase Pro Plan as per the{' '} pricing page .

) const OpenSource = () => (

Great software is multi generational and stretches beyond any single company.

Supabase is a collection of many projects, and we rely on making contributors to help us build and improve. Because of this, we aim to make open source more accessible and attractive to anyone who wants to contribute.

Every dollar that is given to Supabase in{' '} sponsorship {' '} will be funneled back to the community to support the next generation of Open Source maintainers.

One of the biggest barriers to Open Source is knowing exactly how to get started. We're{' '} partnering with Strive School {' '} to educate the next generation of programmers in Open Source - providing tutorials, Founder Office Hours, and other free resources.

If you teach programming, and you're interested in offering OSS tuition to your students, we're actively looking for more education partners. Email{' '} rory@supabase.io {' '} to find out more.

Come and get involved in{' '} our GitHub. {' '}

) const FundingPartners = () => (

Building a platform that can offer all the amazing features of Firebase will take resources - more than most open source tools. Ours will be a long journey and it will require the help of many experienced engineers.

The partners we choose for this journey must be aligned with our ethos as an open source company. In a few weeks we'll release the full details of our Seed round. Today, we're happy to announce one key partner who needs no introduction: Mozilla.

Open source is at the very core of what Mozilla do - we're humbled and excited to work with them.

Follow us on{' '} Twitter {' '} and we'll let you know when we announce the details of the round.

) const ScalingOurTeam = () => (

We are extremely proud of our team. We're a mix of 11 engineers, from 8 different countries. Half of the team are previous founders - collectively we've founded 15 companies, generating millions in revenue.

We're also passionate about tech and open source. We hire open source maintainers to work full time on the products we use, and we spend every Friday dogfooding Supabase to make it better.

We are hiring across multiple positions including PostgreSQL engineers, Cloud engineers, SRE's, and Developer Advocates. We are a fully remote team, spanning 4 continents and 10 nationalities. If you are interested and think you can be a factor in the success of Supabase, get in touch at{' '} work@supabase.io .

) const WhatsNext = () => (

If you watch our repos you'll see that development never stops, we ship every day (and night!). We're constantly improving Supabase based on user feedback. Alongside performance, security, and reliability improvements, here are some new features we're working on for 2021:

  • Storage - Making blob storage easier than ever before
  • Functions - write and deploy serverless functions that have access to your Supabase context
  • Local Emulator - Making local development more accessible with a quick start CLI for any environment
  • High Availability - Database and API replicas spread globally to serve a global user base
  • Multicloud - Spread your Supabase instances across multiple datacenter providers to protect against outages
  • Self Hosted - 'Bring your own cloud' is essential for some businesses, and so we're working on easy-deploy tooling for customers with this requirement
  • More client libraries - members of the community are helping us build client libraries for many different languages including TypeScript, Python, Dart, C#, and Rust. Come and help us bring Supabase to your favorite language or framework.

We depend on your feedback to continually improve Supabase. Email us at{' '} support@supabase.io {' '} or join the{' '} discussion {' '} on GitHub to let us know how we can help you build things faster.

) const SUPABASE_AUTHOR_INDEX = 12 const Beta = (props: Props) => { const [menuOpen, setMenuOpen] = useState(false) const { basePath } = useRouter() const { darkMode } = props const references: any = { performance: useRef(null), security: useRef(null), reliability: useRef(null), features: useRef(null), pricing: useRef(null), openSource: useRef(null), fundingPartners: useRef(null), scaling: useRef(null), next: useRef(null), } const scrollTo = (key: string) => { if (references[key]) { references[key].current.scrollIntoView({ behavior: 'smooth', block: 'start' }) } } return ( {site_title}
setMenuOpen(!menuOpen)} />
setMenuOpen(false)} className="lg:col-span-1" singleBgColor={true} >
) } export default Beta