Fast, real-time
Postgres change data capture

Fast, real-time
Postgres change data capture

Replace brittle workflows or clunky tools like Debezium. Stream data from Postgres directly to SQS, Kafka, and more.

Capture every insert, update, and delete

Capture every insert, update, and delete

Works with any Postgres database

Works with any Postgres database

Push to streams and queues in real-time

Push to streams and queues in real-time

Built in backfills and transforms

Built in backfills and transforms

Open source, MIT license

Open source, MIT license

YAML

CLI

Web console

databases:
  - name: "sequin-playground"
    username: "postgres"
    password: "postgres"
    hostname: "sequin_postgres"
    database: "sequin_playground"
    port: 5432
    slot_name: "sequin_slot"
    publication_name: "sequin_pub"
    tables: 
      - table_name: "accounts"
        table_schema: "public"
        sort_column_name: "updated_at"

sinks:
  - name: "kafka-sink"
    database: "sequin-playground"
    table: "public.accounts"
    destination:
      type: "kafka"
      hosts: "kafka1.example.com:9092,kafka2.example.com:9092"
      topic: "accounts-topic"
      username: "kafka-user"
      password: "kafka-password"
      sasl_mechanism: "plain"

Key features

Key features

Key features

A new standard for change data capture

A new standard for change data capture

Change data capture typically requires adding complicated dependencies, endless configuration, and blackbox runtimes. Sequin is tailored to Postgres to cut out the complexity and deliver helpful features.

Change data capture typically requires adding complicated dependencies, endless configuration, and blackbox runtimes. Sequin is tailored to Postgres to cut out the complexity and deliver helpful features.

SQL filters

Use WHERE clauses to route changes to your sinks.

function onRow(r) {
  switch (r.status) {
    case 'active': return JSON.stringify('running');
    case 'pending': return JSON.stringify('waiting');
    default: return JSON.stringify('unknown');
  }
}
function onRow(r) {
  switch (r.status) {
    case 'active': return JSON.stringify('running');
    case 'pending': return JSON.stringify('waiting');
    default: return JSON.stringify('unknown');
  }
}

Transforms

Transform messages with functions.

Backfill

Backfill at any time.

Observable

Trace every row from capture through to delivery

No infra needed

Built-in streaming

Out of the box, you can send database changes to a webhook sink or turn on a Sequin Stream. Both offer a durable, Kafka-like stream with exactly-once processing guarantees and a simple HTTP interface.

//Sequin pushes rows to your HTTP endpoint

//Example lambda handler:

exports.order_handler = async (event) => {
  try {
    processOrder(event.data.action, event.data.record);
    return {
      //message will be ack'd
      statusCode: 200,
    };
  } catch (error) {
    console.error('Error:', error);
    return {
      //message will be nack'd & retried
      statusCode: 500,
    };
  }
};

Webhook sink

POST changes from your database to any HTTP endpoint. Built in retries and back-off.

Sequin Stream

Change Retention

Use cases

Streamline your use case

Sequin is designed to power every change data capture use case. No need to master a new piece of infrastructure.

Trigger

Workflows

Create

Audit logs

Replicate

Tables

Maintain

Caches

// Automatically log all database changes with Sequin
async function logDatabaseChange(change) {
  await db.query(`
    INSERT INTO audit_logs (
      event_id,
      table_name,
      record_id,
      action,
      old_values,
      new_values
    ) VALUES ($1, $2, $3, $4, $5, $6)
  `, [
    change.id,
    change.metadata.table_name,
    change.record.id,
    change.action,
    JSON.stringify(change.changes),  // Previous values
    JSON.stringify(change.record)    // New values
  ]);
}

// Example: Capture an order status change
await logDatabaseChange({
  id: "evt_123",
  action: "update",
  metadata: { table_name: "orders" },
  record: { id: "order_123", status: "shipped" },
  changes: { status: "pending" }
});

Create an Audit Log

Sequin captures the full history of modifications to your data, letting you meet compliance requirements, debug issues, and build powerful user features like activity feeds - all without modifying your application code.

Performance

Performance

Performance

Tuned to Postgres

Tuned to Postgres

Sequin uses logical replication to efficiently capture every change as it happens. If your database can handle the transaction, Sequin can deliver it with minimal overhead.

Sequin uses logical replication to efficiently capture every change as it happens. If your database can handle the transaction, Sequin can deliver it with minimal overhead.

0
Messages / Second
0
P95 Latency (MS)

We're happy to host

Sequin Cloud

Fully managed service, we handle the infrastructure

Built to scale, tuned to support high message volume

Get started right away

Get started right away

Widely supported

Widely supported

Widely supported

Works with your stack

Works with your framework

Sequin works with any Postgres database (version 12+) and supports a growing list of sinks to queues and streams. Sequin even supports native sinks (Webhooks and HTTP) so you can get started without any other infrastructure.

Sequin works with any Postgres database (version 12+) and supports a growing list of sinks to queues and streams. Sequin even supports native sinks (Webhooks and HTTP) so you can get started without any other infrastructure.

Community

Community

Community

Open source

Open source

Sequin is completely open source with an MIT license. Follow us on GitHub. Let us know what you want to see!

Sequin is completely open source with an MIT license. Follow us on GitHub. Let us know what you want to see!

Blog

Read about how we're building Sequin, shipping features, and pushing Postgres

Discord

Join the Sequin Discord server to chat with contributors, get support, and discuss your use case.

GitHub

GitHub

You can view all the projects we have developed as open source on our GitHub page.

Pricing

Pricing

Pricing

Plans and pricing

Plans and pricing

Sequin itself is built on Postgres to provide the most efficient, cost effective change data capture on the market.

Open Source

GitHub

Cloud

Free

$0.00

Self host Sequin. Ideal for individuals and hobby projects.

Change data capture from Postgres to streams and queues

Change data capture from Postgres to streams and queues

SQL filtering, JS & Go transforms, rewinds, CLI, and web console

SQL filtering, JS & Go transforms, rewinds, CLI, and web console

Docker container to setup and install Sequin with just Postgres and KV dependencies

Discord support

Discord support

Get in touch

Get in touch

Have more questions or want to talk through your use case first?

©️ 2024 Sequin Labs, Inc. All rights reserved.

©️ 2024 Sequin Labs, Inc. All rights reserved.

©️ 2024 Sequin Labs, Inc. All rights reserved.