Local Development

Supabase supports local development using Docker, however PowerSync is currently only available as a hosted cloud service.

Developers using Supabase local dev might prefer being able to develop against PowerSync locally too, for use cases such as running end-to-end integration tests.

This guide describes an example local dev workflow that uses ngrok and the PowerSync CLI.

This guide assumes that you have both ngrok and the Supabase CLI installed

This guide only covers using ngrok. Other configurations such as an NGINX reverse proxy are also possible.

Configure Supabase for SSL

# start supabase
supabase start

# get the name of the supabase_db container
docker ps -f name=supabase_db --format '{{.Names}}'

# The rest of the script assumes it's "supabase_db_supabase-test"

# bash in the container
docker exec -it supabase_db_supabase-test /bin/bash

# Now run in the container:
cd /etc/postgresql-custom

# Create a cert
openssl req -days 3650 -new -text -nodes -subj '/C=US/O=Dev/CN=supabase_dev' -keyout server.key -out server.csr
openssl req -days 3650 -x509 -text -in server.csr -key server.key -out server.cert
chown postgres:postgres server.*

# Enable ssl
echo -e '\n\nssl = on\nssl_ciphers = '\''HIGH:MEDIUM:+3DES:!aNULL'\''\nssl_prefer_server_ciphers = on\nssl_cert_file = '\''/etc/postgresql-custom/server.cert'\''\nssl_key_file = '\''/etc/postgresql-custom/server.key'\''' >> supautils.conf

# Now Ctrl+D to exit bash, and restart the container:
docker restart supabase_db_supabase-test

# Check logs for any issues:
docker logs supabase_db_supabase-test

# (optional, for debugging) validate SSL is enabled
psql -d postgres postgres
postgres=> show ssl; # should return "on"

Start ngrok

Here we obtain the local port that supabase is listening on and initialize ngrok using it.

# look for the PORTS value of the supabase_db_supabase-test container
docker ps -f name=supabase_db --format '{{.Ports}}'

# should see something like 0.0.0.0:54322->5432/tcp
# use the first port
ngrok tcp 54322

# should then see something like this:
Forwarding  tcp://4.tcp.us-cal-1.ngrok.io:19263 -> localhost:54322

Make a note of the hostname (4.tcp.us-cal-1.ngrok.io and port number 19263), your values will differ.

Connect PowerSync (GUI)

  1. Configure your PowerSync instance using the hostname and port number you noted previously. The default postgres password is "postgres", you may want to change this. NOTE: make sure that the Host field does not contain the tcp:// URI Scheme outputted by ngrok

  2. Click "Save" to provision your instance

Connect PowerSync (CLI)

The PowerSync CLI is currently in pre-release. Contact us to obtain early access.

Integration Test Example

Coming soon. Reach us on Discord in the meantime if you have any questions about testing.

Last updated