Syncle
Open source · MIT · self-hosted

Keep any databases in sync, live, across engines

Draw a bridge from a source to its destinations. The moment a row changes, it is written everywhere you linked — any engine to any other.

curl -fsSL https://syncle.dev/install | sh -s -- up
Docker is the only requirementRead the docs
insertupdatedeletepostgressourcemongodbmysqlredis

One bridge, several destinations at once — and bridges chain.

  • PostgreSQL
  • MySQL
  • MariaDB
  • SQLite
  • MongoDB
  • Redis
  • HTTP

How a bridge fires

Backfill it, poll it, or read the log

Three ways of noticing that something changed. Pick per bridge — the rest of the pipeline is identical.

One shot

Replay

Stream all — or a filtered slice — of the source once, then finish. The right tool for an initial backfill or a migration.

Polled

Watch

Follow a cursor: an auto-increment id, an updated_at column, or a primary-key diff. New rows sync as they appear, on every engine.

Real time

CDC

Read the change log itself — Postgres logical replication, MySQL binlog, MongoDB change streams, Redis keyspace notifications.

localhost:3002

Customers → Replica

shop.customers → shop_replica.customers

CDC

Delivered

12,480

Failed

0

Skipped

3

Success

100%

idnameplantook
5Edsger DijkstraPro45ms
6Barbara LiskovEnterprise3ms
7Donald KnuthTeam2ms
8Margaret HamiltonPro2ms
9Grace HopperPro4ms

What makes it trustworthy

Moving data is the easy half

The hard half is moving it exactly once, in the right shape, and noticing when a row disappears.

No duplicates, ever

Writes are idempotent upserts keyed by the columns you choose, so replays, retries and redeliveries never double-write.

Deletes propagate

Inserts, updates and deletes all cross the bridge, each tagged with its operation — not just the rows that happen to be new.

Missing table? Created

If the destination doesn't exist, Syncle builds it from the source's shape, translating types across engines.

Map and rename columns

Write this column into that column over there — or design a payload and POST it to an HTTP endpoint instead.

Get started

One command, then a browser tab

It downloads the newest release, starts it, and opens the interface. No Node, no Postgres, no Redis to install — they all run in containers.

curl -fsSL https://syncle.dev/install | sh -s -- up
  1. 1

    Run the command

    The image is pulled prebuilt for your architecture — Intel or ARM, macOS or Linux. Nothing compiles.

  2. 2

    Create your admin account

    Syncle opens with a one-time setup token already filled in, proving you operate the machine.

  3. 3

    Draw your first bridge

    Pick a source table and its destinations, then start it. Backfill first, then leave it listening.

Then, day to day

syncle up
start it, and open the interface
syncle down
stop, keeping your data
syncle logs
follow what the bridges are doing
syncle update
move to the newest release
syncle uninstall
remove everything, data included

What people use it for

The jobs a bridge is actually for

Every one of these is the same primitive — a source, some destinations, and a trigger — pointed at a different problem.

Migrate to a different engine

Backfill every row into the new database with a replay job, then leave a CDC bridge running so the two stay identical while you cut traffic over. Nothing has to be offline for it.

Feed a read replica you actually control

Keep a second database in step for reporting or exports without pointing analysts at production, and without paying for managed replication you cannot shape.

Warm a cache from the source of truth

Project rows straight into Redis as they change, keyed however you like, so the cache is never the thing that went stale. Deletes remove the key rather than leaving it to expire.

Give search its own copy

Mirror the columns a search index needs into MongoDB or a flat table, reshaped on the way across, without bolting write hooks onto the application.

Split a monolith database

Carve a table out to a new service database and keep both in sync while callers move over one at a time, instead of coordinating a single risky switch.

Push rows to a service, not a database

Send each change to an HTTP endpoint with a payload you design, with retries and backoff, when what you need fed is an API rather than another store.

Where it sits

Smaller than a data platform, on purpose

Airbyte and Debezium are built for teams running pipelines as a discipline. Syncle is for one person who wants two databases to agree.

AspectSyncleAirbyteDebezium
To get runningOne commandKubernetes or Docker ComposeKafka and Connect
Moving partsFour containersA platformA broker and a cluster
Real-time captureBuilt in, per bridgeOn some connectorsThe whole point
Writes to the destinationDirect, idempotent upsertsThrough its own stagingYou write the consumer
InterfaceWeb GUI, no config filesWeb GUIConfig and code
Aimed atOne operatorA data teamA platform team

Not a knock on either — if you already run Kafka, Debezium is the right answer. This is for everyone who does not.

Your data, your machines

Nothing phones home

A sync tool sees every row it moves and holds the credentials to both ends. That earns some scrutiny.

Your data never leaves

Syncle runs on your machine and talks to your databases directly. There is no account, no telemetry, and no third party in the path — the rows go from your source to your destination and nowhere else.

Credentials are encrypted at rest

Saved connection details are sealed with AES-256-GCM under a key generated at install, which stays on the host. Losing the key costs you the stored secrets rather than exposing them.

One operator, guarded from the first request

The admin account is created with a one-time token printed on the server, so an instance reachable before you set it up cannot be claimed by whoever finds it first. Login is rate limited.

Reach private databases over SSH

Connect through a bastion to databases that never listen on a public interface, so nothing has to be exposed to make a bridge work.

Questions

Before you install it

Which databases can Syncle sync between?

PostgreSQL, MySQL and MariaDB, SQLite, MongoDB and Redis — in any combination. A relational source can write into a document or key-value store and back, with values translated to fit the target. HTTP endpoints work as a destination too, when you are feeding a service rather than a database.

Does it sync in real time, or on a schedule?

Both, and you choose per bridge. CDC reads the database change log directly — Postgres logical replication, MySQL binlog, MongoDB change streams, Redis keyspace notifications — so changes arrive with no polling. Watch polls a cursor instead, which works on every engine. Replay is a one-shot pass for the initial backfill.

Can it duplicate or lose rows?

Writes are idempotent upserts keyed by the columns you pick, so a replay, a retry or a redelivery rewrites the same row rather than adding another. Deletes propagate as deletes. Jobs record their cursor as they go, so an interrupted run resumes where it stopped instead of starting over.

What do I need installed to run it?

Docker, and nothing else. Node, PostgreSQL and Redis all run in containers, and the application image is pulled prebuilt for your architecture, so nothing is compiled on your machine. One command installs it, starts it and opens the web interface.

Is Syncle free, and is my data sent anywhere?

It is MIT licensed and entirely self-hosted. It runs on your own machine against your own databases; there is no account, no telemetry and no third-party service in the path. Stored connection credentials are encrypted with a key that never leaves your install.

How is it different from Airbyte or Debezium?

Scale of setup. Airbyte expects Kubernetes and a team to operate it; Debezium expects Kafka. Syncle is a single command, four containers and a web interface, aimed at one operator who wants two databases kept in step without standing up a data platform first.

Syncle

Two databases, kept in step, in about a minute

curl -fsSL https://syncle.dev/install | sh -s -- up