Open source — Apache 2.0 — v0.2.0kaptanto captures every insert, update, and delete from Postgres and MongoDB the moment it happens — and delivers it via stdout, SSE, gRPC, or directly into NATS, SQS, Kafka, Pub/Sub, and RabbitMQ. One static binary. Self-contained. Deploys anywhere.
Events flow from the WAL as each transaction commits. Steady-state p50 latency: 1.1s at 10K eps load. No polling interval.
The same JSON format across every source. Write your consumer once and connect to any database.
Per-consumer positions persist on every event. Reconnect and resume from exactly where you stopped.
Snapshot and stream run concurrently. Watermark coordination prevents stale or duplicate rows.
Events for the same primary key always arrive in commit order. Slow consumers never block other partitions.
Two instances, one leader. Advisory lock election — session-scoped, no clock skew, ~5-second failover.
Push CDC events directly to NATS, SQS, Kafka, Pub/Sub, or RabbitMQ. At-least-once delivery with per-key ordering end-to-end.
Route events from different tables to different topics or queues via a Go template — cdc.{{.Schema}}.{{.Table}}.
Order inserted → push notification fan-out in under 2 seconds. No polling, no webhook delay.
Product catalog change → Elasticsearch or Typesense index update within seconds, automatically.
Row updated → Redis key evicted before the next read hits the database. Consistent by design.
Every insert, update, and delete captured in order, with idempotency keys. Append-only and crash-safe.
Use --output sse or --output grpc for multi-consumer setups. Use --output nats|sqs|kafka|pubsub|rabbitmq to push directly to a queue.
Pipe to jq, a webhook, a queue, or anything that reads stdin.
| Tool | Real-time | No Kafka | Multi-DB | Single binary | Free | Min cost |
|---|---|---|---|---|---|---|
| kaptanto | ✓ | ✓ | ✓ | ✓ | ✓ | $0 |
| Debezium | ✓ | ✗ | ✓ | ✗ | ✓ | $0+Kafka |
| Confluent | ✓ | ✗ | ✓ | ✗ | ~ | ~$200/mo |
| Fivetran | ✗ | ✓ | ✓ | ✗ | ~ | $12K/yr |
| Estuary | ✓ | ✓ | ✓ | ✗ | ✓ | $0 |
| AWS DMS | ✓ | ✓ | ✓ | ✗ | ✗ | ~$70/mo |
--output nats|sqs|kafka|pubsub|rabbitmqMessageGroupId (SQS), record key (Kafka), ordering key (Pub/Sub), subject routing (NATS)cdc.{{.Schema}}.{{.Table}} — supported on NATS, SQS, and Pub/Subqueue_publish_total, queue_publish_errors_total, queue_publish_latency_seconds) and /healthz probe for each active sinkInstall kaptanto, point it at your database, and start streaming.