Sequin is the fastest change data capture (CDC) platform for Postgres. Sequin makes it easy to stream Postgres to streaming platforms, queues, and more (e.g. Kafka, GCP Pub/Sub, another Postgres, etc.). You can backfill existing rows and stream new changes in real-time.
Sequin uses a logical replication slot to detect and stream changes in real-time.
Sequin is a standalone Docker container that you can deploy next to your Postgres database. Alternatively, you can use our hosted offering or we'll manage Sequin for you in your cloud.
Sequin is open source/MIT. To help us make this project great, tell us what you're building in our Discord Server.
See our quickstart to get up and running in your dev environment in about 5 minutes.
Alternatively, you can try Sequin for free on Sequin Cloud. Follow the instructions in the app to start streaming your data in a couple minutes.
Sequin delivers industry-leading performance for change data capture (CDC), sustaining 40k operations per second (40 MB/s) with 55ms average latency.
Tool | Latency at 40k ops/s |
---|---|
Sequin | 55ms |
AWS MSK Debezium | 258ms |
Fivetran | 5 minutes |
Airbyte | 1+ hours |
In our production benchmarks with AWS RDS Postgres and MSK Kafka, Sequin maintains consistent performance under sustained load:
- Average throughput: 40,000 ops/sec
- Average bandwidth: 40 MB/sec
- Average latency: 55ms
- 99th percentile latency: 253ms
Read more about Sequin's current performance in our docs.
Sink | Support | Description |
---|---|---|
Azure EventHubs | ✅ Real-time streaming ✅ Backfill existing rows |
Publish messages to Azure EventHubs |
GCP Pub/Sub | ✅ Real-time streaming ✅ Backfill existing rows |
Publish messages to Google Cloud Pub/Sub topics |
HTTP Pull (Native) | ✅ Real-time streaming ✅ Backfill existing rows |
Consume changes directly from Sequin with exactly-once processing |
Kafka | ✅ Real-time streaming ✅ Backfill existing rows |
Stream changes to Apache Kafka topics |
NATS | ✅ Real-time streaming ✅ Backfill existing rows |
Stream changes to NATS subjects |
Postgres | 🛠️ Coming April 2025 | Replicate changes to another Postgres |
RabbitMQ | ✅ Real-time streaming ✅ Backfill existing rows |
Publish messages to RabbitMQ exchanges |
Redis | ✅ Real-time streaming ✅ Backfill existing rows |
XADD to Redis Streams |
SQS | ✅ Real-time streaming ✅ Backfill existing rows |
Send messages to Amazon SQS queues |
Webhook Subscription (Native) | ✅ Real-time streaming ✅ Backfill existing rows |
Send changes to any HTTP endpoint |
Sequin works great for change data capture use cases like:
- Triggering a workflow when data changes in Postgres: Execute custom business logic whenever specific rows are inserted, updated, or deleted in your database.
- Making events available to downstream services: Stream changes from your database tables as events that other services can consume.
- Informing downstream services when rows change: Notify dependent services about data changes to keep systems in sync.
- Audit logging: Track and record all changes made to data in your database for compliance or feature development.
- Sync a table from one database to another: Keep tables synchronized across different database instances in real-time.
- Materializing another table in your database: Create and maintain derived tables based on changes to source tables.
- Maintaining a cache: Keep caches up-to-date by streaming database changes.
- Refreshing search indexes: Keep search indexes fresh by streaming updates from your database.
- Never miss a change: Sequin ensures all database changes are delivered to sinks.
- The fastest CDC: Sequin delivers industry-leading performance for change data capture (CDC), sustaining 40k operations per second with 55ms average latency.
- Bring your database: Sequin is not an extension. It works with any Postgres database version 14+.
- SQL-based routing: Filter and route messages to sinks using SQL
where
conditions. - Backfills: Backfill existing rows from your tables to sinks at any time.
- Transforms (coming soon!): Transform message payloads by writing functions in Lua, JavaScript, or Go.
- Infrastructure as code: Manage Sequin as code using a YAML file paired with the Sequin CLI. Or use our management API.
- Rich web console: Your team can configure and monitor sinks from a full feature web console.
- Observability: Built in monitoring and metrics.
Sequin connects to any Postgres database. Specify the tables you want to stream, as well as optional filters and transformations. Route changes to sinks like Kafka, Google Pub/Sub, Redis, etc.
When you setup a sink, you can opt to backfill data from the source table to the sink.
After setup, Sequin will stream new changes to the sink as they occur in real-time. If there are any issues with delivery, Sequin will automatically retry delivery with exponential backoff.
Sequin comes with a web console/UI for configuration and monitoring. You can also configure Sequin as code using YAML config files and our management API.
Sequin vs Debezium
Debezium is also a change data capture tool that captures changes from Postgres and streams them to messaging systems like Kafka. Debezium requires significant infrastructure (Kafka, Connect) to operate.
Sequin provides the same change data capture capabilities but with a much simpler setup:
- No Kafka required: Sequin doesn't require Kafka.
- Native destinations: With Debezium, you route to destinations via Kafka Connect. With Sequin, you stream directly to your destination of choice. This means simpler setup, fewer transforms, and fewer moving parts.
- Full-featured web console: Sequin includes a web console for configuration and monitoring.
Sequin vs Fivetran/Airbyte
Fivetran and Airbyte are ETL tools designed primarily for data warehouse ingestion. They excel at moving data in batch intervals (minutes to hours) to analytical databases.
Sequin is purpose-built for real-time operational use cases. Key differences:
- Real-time streaming: Versus batch intervals.
- Focus on operational destinations: Queues, streams, webhooks, etc. vs data warehouses.
- Flexible backfills: Deployed a bug and need to replay the last 2 hours of data? Sequin makes it easy.
Sequin vs custom change data capture solutions
Many teams build custom change data capture solutions using triggers, LISTEN/NOTIFY, or logical replication. While these can work, they often:
- Lack exactly-once processing guarantees
- Don't scale
- Don't handle backfills well
- Need ongoing maintenance
- Become a burden when the engineer who built it leaves the team
Sequin provides all this functionality out of the box:
- Exactly-once processing
- Seamless backfills
- Automatic retries and error handling
- Simple monitoring and observability
- Zero maintenance of change data capture infrastructure
- Elixir 1.18+
- PostgreSQL 14+
- GitHub CLI (
gh
) - Node.js (for frontend assets)
- Go (only necessary for CLI development)
- Fork and clone the repository
- Install dependencies:
# Install Elixir dependencies mix deps.get # Install frontend dependencies cd assets && npm install
- Start PostgreSQL and Redis services:
docker-compose up -d
- Start the development server from the top-level directory:
make dev
The app will be available at http://localhost:4000
.
Sequin uses LiveView + LiveSvelte for its frontend. As a monolith, the entire app is available at http://localhost:4000
.
See CONTRIBUTING.md for detailed instructions on how to contribute to Sequin.