Skip to content

Installation

You need to have a Postgres database and to run the Electric sync service in front of it.

How to run Electric

Electric is a web application published as a Docker image at electricsql/electric. It connects to Postgres via a DATABASE_URL.

The simplest way to run Electric is using Docker.

Using Docker

You can run a fresh Postgres and Electric connected together using Docker Compose with this docker-compose.yaml:

yaml
version: "3.3"
name: "electric_quickstart"

services:
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: electric
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
    ports:
      - 54321:5432
    tmpfs:
      - /var/lib/postgresql/data
      - /tmp
    command:
      - -c
      - listen_addresses=*
      - -c
      - wal_level=logical

  electric:
    image: electricsql/electric
    environment:
      DATABASE_URL: postgresql://postgres:password@postgres:5432/electric?sslmode=disable
    ports:
      - "3000:3000"
    depends_on:
      - postgres

For example you can run this using:

sh
curl -O https://electric-sql.com/docker-compose.yaml
docker compose up

Alternatively, you can run the Electric sync service on its own and connect it to an existing Postgres database, e.g.:

sh
docker run \
    -e "DATABASE_URL=postgresql://..." \
    -p 3000:3000 \
    -t \
    electricsql/electric:latest

Postgres requirements

You can use any Postgres (new or existing) that has logical replication enabled. You also need to connect as a database user that has the REPLICATION role.

Advanced

You can also choose to build and run Electric from source as an Elixir application.

Build from source

Clone the Electric repo:

sh
git clone https://github.com/electric-sql/electric.git
cd electric

Install the system dependencies with asdf. Versions are defined in .tool-versions:

sh
asdf plugin-add elixir
asdf plugin-add erlang
asdf plugin-add nodejs
asdf plugin-add pnpm
asdf install

Install the packages/sync-service dependencies using Mix.:

sh
cd packages/sync-service
mix deps.get

Run the development server:

sh
mix run --no-halt

This will try to connect to Postgres using the DATABASE_URL configured in packages/sync-service/.env.dev, which defaults to:

shell
LOG_LEVEL=debug
DATABASE_URL=postgresql://postgres:password@localhost:54321/electric?sslmode=disable
ELECTRIC_ENABLE_INTEGRATION_TESTING=true
ELECTRIC_CACHE_MAX_AGE=1
ELECTRIC_CACHE_STALE_AGE=3
# using a small chunk size of 10kB for dev to speed up tests
ELECTRIC_LOG_CHUNK_BYTES_THRESHOLD=10000
ELECTRIC_DATABASE_ID=test_tenant
# configuring a second database for multi-tenancy integration testing
OTHER_DATABASE_URL=postgresql://postgres:password@localhost:54322/electric?sslmode=disable

You can edit this file to change the configuration. To run the tests, you'll need a Postgres running that matches the :test env config in config/runtime.exs and then:

sh
mix test

If you need any help, ask on Discord.