Electric
The agent platform built on sync.
- [Quick links](#quick-links) - [What is Electric?](#what-is-electric) - [Getting Started](#getting-started) - [HTTP API Docs](#http-api-docs) - [Phoenix LiveDashboard](#phoenix-livedashboard) - [Developing Electric](#developing-electric) - [Mac setup](#mac-setup) - [Contributing](#contributing) - [Support](#support) The project is written primarily in TypeScript, distributed under the Apache License 2.0 license, first published in 2022. It has gained significant community traction with 10,216 stars and 335 forks on GitHub. Key topics include: agent, agents, crdt, crdts, data.
Electric <!-- omit in toc -->
Real-time sync for Postgres.
Table of Contents:
- Quick links
- What is Electric?
- Getting Started
- HTTP API Docs
- Phoenix LiveDashboard
- Developing Electric
- Contributing
- Support
Quick links
- Quickstart
- Website
- About
- Docs
- Demos (also see the
./examplesfolder)
What is Electric?
Sync is the magic ingredient behind fast, modern software. From apps like Figma and Linear to AI agents running on live local data.
Electric is a Postgres sync engine. It solves the hard problems of sync for you, including partial replication, fan-out, and data delivery. So you can build awesome software, without rolling your own sync.
Specifically, Electric is a read-path sync engine for Postgres. It syncs data out of Postgres into ... anything you like. The core sync protocol is based on a low-level HTTP API. This integrates with CDNs for highly-scalable data delivery.
Partial replication is managed using Shapes. Sync can be consumed directly or via client libraries and framework integrations.
Getting Started
See the Quickstart guide to get up and running. In short, you need to:
- have a Postgres database with logical replication enabled; and then to
- run Electric in front of it, connected via
DATABASE_URL
For example, using Docker Compose from the root of this repo:
shdocker compose -f .support/docker-compose.yml up
You can then use the HTTP API to sync data from your Postgres. For example, to start syncing the whole foo table:
shcurl -i 'http://localhost:3000/v1/shape?table=foo&offset=-1'
Or use one of the clients or integrations, such as the useShape React hook:
jsximport { useShape } from '@electric-sql/react' function Component() { const { data } = useShape({ url: `http://localhost:3000/v1/shape`, params: { table: `foo`, where: `title LIKE 'foo%'`, }, }) return JSON.stringify(data) }
Again, see the Quickstart and the Docs for more details.
HTTP API Docs
The HTTP API is defined in an OpenAPI spec in website/electric-api.yaml.
Phoenix LiveDashboard
Electric includes an optional Phoenix LiveDashboard for real-time monitoring of the running system (VM metrics, process info, ETS tables, etc.).
To enable it, set the ELECTRIC_LIVE_DASHBOARD_PORT environment variable:
shELECTRIC_LIVE_DASHBOARD_PORT=4000
The dashboard will be available at http://localhost:4000 (or whichever port you choose). When the variable is not set, the dashboard is not started.
WARNING: The LiveDashboard endpoint is completely unauthenticated. Anyone with network access to the port can view internal system state. In production, you must restrict access to this port using firewall rules, network policies, or similar controls. Do not expose it to the public internet.
Developing Electric
We use asdf to install Elixir, Erlang, and Node.js. Versions are defined in .tool-versions.
Mac setup
shbrew install asdf asdf plugin add nodejs asdf plugin add pnpm asdf plugin add elixir asdf plugin add erlang asdf install
You'll probably need to fiddle with your bash/zsh/etc rc file to load the right tool into your environment.
Running Tests
Electric has comprehensive test suites for both Elixir and TypeScript components.
Prerequisites
Install dependencies (if not already done):
shasdf install pnpm install
Then start the test Postgres database:
shcd packages/sync-service mix start_dev
This starts a Docker Compose setup with Postgres configured for logical replication on port 54321.
To stop the database:
shmix stop_dev
Elixir Tests
Sync Service:
shcd packages/sync-service mix test
For coverage reports:
shmix coveralls.html
Elixir Client:
shcd packages/elixir-client mix test
TypeScript Tests
TypeScript tests require both the database and a running sync service.
In a separate terminal, start the sync service:
shcd packages/sync-service iex -S mix
Then run the tests:
Individual Package:
shcd packages/typescript-client # or any other TS package pnpm test
All TypeScript Packages:
From the root directory:
shpnpm -r test
For coverage:
shpnpm coverage
Contributing
See the:
Support
We have an open community Discord. Come and say hello and let us know if you have any questions or need any help getting things running.
It's also super helpful if you leave the project a star here at the top of the page☝️
Contributors
Showing top 12 contributors by commit count.