Documentation
Capture row-level changes from PostgreSQL, MySQL, MariaDB, SQL Server or Snowflake — as a server you run or a Rust crate you embed.
rustcdc reads a database's replication log and turns every INSERT, UPDATE and DELETE
into a typed event. You can run it as a server or embed it as a Rust library —
same runtime, same version, one set of guarantees.
These pages cover both. Where something applies to only one, the page says so at the top.
Start here
| Getting started | Run the server against a database in about ten minutes |
| Embedding the library | Build a pipeline inside your own Rust binary |
| Core concepts | The event model, delivery contracts, lifecycle |
| Architecture | Capture, the commit barrier and checkpointing — how they fit |
Connect a source
| PostgreSQL | Logical replication, slot lifecycle, TOAST, managed clouds |
| MySQL / MariaDB | Binlog, GTID, schema history, permissions |
| SQL Server | CDC change tables, capture instances, availability groups |
| Snowflake | The CHANGES clause, and why Streams are unsafe for an external reader |
Configure
| Server configuration | Every TOML field, with defaults and worked examples |
| Library options | Every RuntimeOptions field, in terms of the failure it prevents |
| Schema evolution | DDL handling, schema history, registry compatibility |
| Feature flags | What each cargo feature costs and why connectors are opt-in |
Build on it
| API guide | The embedding model: lifecycle, acknowledgement, transforms, codecs |
| Transforms | Masking, routing, outbox, and sandboxed WASM modules |
| WASM transform SDK | The guest ABI and its limits |
| Writing a connector | A source the runtime treats as first-class |
Run it
| Deployment | Kubernetes, health wiring, resource shape |
| Operations | CLI, probes, metrics, replay |
| Incident runbook | Symptom → diagnosis → resolution, for the server |
| Embedded pipelines | Alert thresholds and recovery when you own the process |
| Troubleshooting | Organised by symptom |
| Security | Transport defaults, secret handling, known exposure |
Reading the delivery guarantees
Two claims are load-bearing, and both are narrower than the words usually imply:
at_least_once— a crash can replay the events of one uncheckpointed batch. Duplicates are possible; loss is not. Sinks must be idempotent on a key you control.effectively_once— a batch's records and its checkpoint commit together: in one Kafka transaction, or by a Snowflake channel's offset token. It is not end-to-end exactly-once in every configuration, and the limits are written down rather than glossed over.
Where a guarantee has a limit, the limit is next to the guarantee. If rustcdc cannot do something, these pages say so.