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.
Local development is possible with either self-hosted PowerSync or PowerSync Cloud instances. Self-hosting PowerSync for local development is the recommended workflow as it’s more user-friendly.
# start supabasesupabase start# get the name of the supabase-db containerdocker ps -f name=supabase-db --format '{{.Names}}'# The rest of the script assumes it's "supabase-db_supabase-test"# bash in the containerdocker exec -it supabase-db_supabase-test /bin/bash# Now run in the container:cd /etc/postgresql-custom# Create a certopenssl req -days 3650 -new -text -nodes -subj '/C=US/O=Dev/CN=supabase_dev' -keyout server.key -out server.csropenssl req -days 3650 -x509 -text -in server.csr -key server.key -out server.certchown postgres:postgres server.*# Enable sslecho -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 enabledpsql -d postgres postgrespostgres=> show ssl; # should return "on"
Here we obtain the local port that supabase is listening on and initialize ngrok using it.
Copy
# look for the PORTS value of the supabase-db_supabase-test containerdocker ps -f name=supabase-db --format '{{.Ports}}'# should see something like 0.0.0.0:54322->5432/tcp# use the first portngrok 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.
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
Set the SSL Mode to verify-ca and click Download certificate