Skip to main content

Local Development

Supabase provides a CLI so that you can develop your application locally, rather than connecting to a live project.

Before you begin#

If you're using the CLI, please record your steps! You can help us improve by adding missing details and fixing errors.

Our CLI is still under heavy development, and is missing some features:

  • You cannot yet deploy your local changes to your live project using the CLI. You will need to take a "dump" of your database schema and run it on your live database.
  • The self-hosted version of Supabase does not include a UI yet. We are working on this in stages, starting with our UI library (more context).

In the meantime, here are some suggested tools for interacting with your Postgres Database:

Prerequisites#

Our CLI makes heavy use of Docker Compose, so make sure it is installed and configured to run with elevated privileges.

You will also need to install NPM.

Install the CLI#

npm install -g supabase

Initialize your project#

supabase init

You will be guided through a series of questions, and if everything goes well, you will see an output similar to this:

✔ Port for Supabase URL: · 8000✔ Port for PostgreSQL database: · 5432✔ Project initialized.Supabase URL: http://localhost:8000Supabase Key: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsImlhdCI6MTYwMzk2ODgzNCwiZXhwIjoyNTUwNjUzNjM0LCJhdWQiOiIiLCJzdWIiOiIiLCJSb2xlIjoicG9zdGdyZXMifQ.magCcozTMKNrl76Tj2dsM7XTl_YH0v0ilajzAvIlw3UDatabase URL: postgres://postgres:postgres@localhost:5432/postgres
Run supabase start to start local Supabase.

This command will create a .supabase folder which holds all the configuration for developing your project locally. You don't need to check this into version control.

Start#

supabase start

This command uses Docker Compose to start all the open source services of Supabase. This command will take a while to run, there are a lot of services to build.

Once this is running, you will see the healthy services in Docker Dashboard:

Docker Supabase

Accessing Services Directly#

# Default URL:postgres://postgres:postgres@localhost:5432/postgres

The local Postgres instance can be accessed through psql or any other Postgres client, such as pgadmin.

For example:

psql -h localhost -d postgres -U postgres -W
# Enter your password (default is "postgres")

Example application#

Now that we've learned how to install and start Supabase locally, let's see how you can use it with a frontend application. This quick-start guide will show you, how you can configure a React app which uses the Supabase stack.

# create a fresh React appnpx create-react-app react-demo --use-npm
# move into the new foldercd react-demo
# set up Supabase supabase init 
# Save the install supabase-js librarynpm install --save @supabase/supabase-js

Now that your application is prepared, you can use Supabase anywhere in your application:

import { createClient } from '@supabase/supabase-js'
const SUPABASE_URL = 'http://localhost:8000'const SUPABASE_ANON_KEY = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsImlhdCI6MTYwMzk2ODgzNCwiZXhwIjoyNTUwNjUzNjM0LCJhdWQiOiIiLCJzdWIiOiIiLCJSb2xlIjoicG9zdGdyZXMifQ.magCcozTMKNrl76Tj2dsM7XTl_YH0v0ilajzAvIlw3U'
const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY)

Copy this snippet into App.js, and then start the backend and the frontend:

supabase start  # Start Supabasenpm start       # Start the React app

If everything is working, you should have a React app running on http://localhost:3000 and Supabase services running on http://localhost:8000

Stop#

supabase stop

When you're finished with Supabase, run supabase stop to stop the Docker services.

Migrations#

Coming soon.

Next steps#