Real-time sync for Postgres.
Table of Contents:
- Quick links
- What is Electric?
- Getting Started
- HTTP API Docs
- Developing Electric
- Contributing
- Support
- Quickstart
- Website
- About
- Docs
- Demos (also see the
./examples
folder)
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.
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:
docker 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:
curl -i 'http://localhost:3000/v1/shape?table=foo&offset=-1'
Or use one of the clients or integrations, such as the useShape
React hook:
import { 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.
The HTTP API is defined in an OpenAPI spec in website/electric-api.yaml.
We use asdf to install Elixir, Erlang, and Node.js. Versions are defined in .tool-versions.
brew install asdf
asdf plugin-add nodejs elixir erlang
asdf install
You'll probably need to fiddle with your bash/zsh/etc rc file to load the right tool into your environment.
See the:
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☝️