Back to rankings

electric-sql/electric

TypeScriptelectric.ax

The agent platform built on sync.

elixirpostgrescrdtscrdtreplicationsyncagentagentsdataplatformruntime
Star Growth
Stars
10.3k
Forks
349
Weekly Growth
Issues
166
5k10k
Oct 2022Jan 2024Apr 2025Jul 2026
Artifactsnpmnpm install electric
README

ElectricSQL logo

License - Apache 2.0 Status - Beta Chat - Discord

Electric

Real-time sync for Postgres.

Table of Contents:

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:

  1. have a Postgres database with logical replication enabled; and then to
  2. 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.

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:

ELECTRIC_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

brew 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):

asdf install
pnpm install

Then start the test Postgres database:

cd 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:

mix stop_dev

Elixir Tests

Sync Service:

cd packages/sync-service
mix test

For coverage reports:

mix coveralls.html

Elixir Client:

cd 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:

cd packages/sync-service
iex -S mix

Then run the tests:

Individual Package:

cd packages/typescript-client  # or any other TS package
pnpm test

All TypeScript Packages:

From the root directory:

pnpm -r test

For coverage:

pnpm 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☝️

Related repositories
anoma/anoma

Reference implementation of Anoma

ElixirMIT Licensecryptographyblockchain
anoma.net
33.7k4.1k
plausible/analytics

Open source, privacy-first web analytics. Lightweight, cookie-free Google Analytics alternative. Self-hosted or cloud.

ElixirGNU Affero General Public License v3.0analyticsprivacy
plausible.io
27.9k1.7k
asdf-vm/asdf

Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more

GoGo ModulesMIT Licenseversion-managerruby
asdf-vm.com
25.5k929
phoenixframework/phoenix

Peace of mind from prototype to production

ElixirMIT Licenseelixirweb-framework
phoenixframework.org
23.1k3.1k
lk-geimfari/awesomo

Cool open source projects. Choose your project and get involved in Open Source development now.

GoGo ModulesCreative Commons Zero v1.0 Universalawesomeocaml
9.9k690
taskforcesh/bullmq

BullMQ - Message Queue and Batch processing for NodeJS, Python, Elixir and PHP based on Redis

TypeScriptnpmMIT Licensebackground-jobsnodejs
bullmq.io
9.2k655
benawad/dogehouse

Taking voice conversations to the moon 🚀

TypeScriptnpmMIT Licenseelixirreact
dogehouse.tv
9k1.4k
firezone/firezone

Enterprise-ready zero-trust access platform built on WireGuard®.

ElixirApache License 2.0cloudvpn
firezone.dev
8.7k426
xberg-io/xberg

A polyglot document intelligence framework with a Rust core. Extract text, metadata, images, and structured information from PDFs, Office documents, images, and 97+ formats. Available for Rust, Python, Ruby, Java, Go, PHP, Elixir, C#, R, C, TypeScript (Node/Bun/Wasm/Deno)- or use via CLI, REST API, or MCP server.

Rustcrates.ioMIT Licensetext-extractiondocument-intelligence
docs.xberg.io
8.7k525
supabase/realtime

Broadcast, Presence, and Postgres Changes via WebSockets

ElixirApache License 2.0elixirpostgres
supabase.com/realtime
7.6k451
oldratlee/translations

🐼 Chinese translations for classic software development resources

Othertranslationchinese-translation
github.com/oldratlee/translations
6.9k1.5k
papercups-io/papercups

Open-source live customer chat

ElixirMIT Licenseelixirphoenix-framework
6.1k576