Supabase
Supabase is a Postgres hosting and backend-as-a-service platform for building web, mobile and AI applications.
Electric and Supabase
You can use Electric on Supabase's hosted Postgres.
You can also use Electric to sync data into Supabase Edge Functions.
Need context?
See the Deployment guide for more details.
Deploy Postgres
Supabase Postgres databases come with logical replication enabled and the necessary permissions for Electric to work.
Create a database on Supabase.com. Click the "Connect" button in the top right to get the connection string.
Make sure you untick the "Display connection pooler" option to get the direct access URL, because the pooled URL does not support logical replication. Note that this direct access URL only works with IPv6, which means you will need to configure Electric to connect over IPv6.
Connect Electric
Configure Electric to connect to the direct access DATABASE_URL
you copied above. Set ELECTRIC_DATABASE_USE_IPV6
to true
, e.g.:
docker run -it \
-e "DATABASE_URL=postgresql://postgres:[YOUR_PASSWORD]@db.[YOUR_PROJECT_ID].supabase.co:5432/postgres" \
-e "ELECTRIC_DATABASE_USE_IPV6=true" \
-p 3000:3000 \
electricsql/electric:latest
Troubleshooting IPv6
The network where Electric is running must support IPv6. If you're running Electric on your own computer, check if you have IPv6 support by opening test-ipv6.com. If you see "No IPv6 address detected" on that page, consider ssh
ing into another machine or using a VPN service that works with IPv6 networks.
When running Electric in a Docker container, there's an additional hurdle in that Docker does not enable IPv6 out-of-the-box. Follow the official guide to configure your Docker daemon for IPv6.
If you're subscribed to the Pro or Team plan on Supabase Platform, you can side-step those hurdles by purchasing the IPv4 add-on to make your database host available at an IPv4 address.
Need somewhere to host Electric?
If you need to deploy Electric, then Supabase works great with Fly.io.
Sync into Edge Function
You can also use Electric to sync data into a Supabase Edge Function.
Install the Supabase CLI and follow the steps in this Quickstart to initialise a new project and create an edge function, e.g.:
supabase init
supabase functions new hello-electric
Start Supabase and serve the functions locally:
supabase start
supabase functions serve
Run tail
to see the curl
command at the bottom of the generated supabase/functions/hello-electric/index.ts
file:
tail supabase/functions/hello-electric/index.ts
Copy the curl
command (with the real value for [YOUR_ANON_KEY]
) and run it once against the default function implementation:
$ curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/hello-electric' \
--header 'Authorization: Bearer [YOUR_ANON_KEY]' \
--header 'Content-Type: application/json' \
--data '{"name":"Functions"}'
...
{"message":"Hello Functions!"}
Now, replace the contents of supabase/functions/hello-electric/index.ts
with the following, replacing [YOUR_ELECTRIC_URL]
with the URL of an Electric service, running against a Postgres database with an items
table. (This can be http://localhost:3000
if you're running the local docker command we used above when connecting Electric to Supabase Postgres).
import { Shape, ShapeStream } from 'npm:@electric-sql/client'
Deno.serve(async (req) => {
const stream = new ShapeStream({
url: '[YOUR_ELECTRIC_URL]/v1/shape',
table: 'items'
})
const shape = new Shape(stream)
const items = [...await shape.value]
return new Response(
JSON.stringify(items),
{ headers: { "Content-Type": "application/json" } },
)
})
Save it, wait a second and then run the same curl
command you just ran before to make a request to the edge function. You should see the data from your items
table in the HTTP response, e.g.:
$ curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/hello-electric' \
--header 'Authorization: Bearer [YOUR_ANON_KEY]' \
--header 'Content-Type: application/json' \
--data '{"name":"Functions"}'
...
[["\"public\".\"items\"/\"69ad0c7c-7a84-48e8-84fc-d92e5bd5e2f4\"", ...]
PGlite
Electric and Supabase are also collaborating to develop PGlite, which Supabase sponsor, contribute to and have developed database.build on.