Waltail docs.
Everything you need to get changes flowing from your Postgres database to a destination, and to understand what happens in between.
Quickstart
From a connection string to your first delivered change, in about five minutes.
Connect a database
What Waltail needs, the six checks, and guides for RDS, Supabase, Neon, Cloud SQL, Azure, Railway and your own server.
Message format
The JSON every destination receives, with insert, update, delete and backfill examples.
Backfills
Deliver the rows that already exist through the same destinations — estimate, confirm, done.
Delivery
At-least-once, per-row ordering, batch size and rate limit, retries and the undelivered queue.
Replay and retention
Replay undelivered or already-delivered messages, and how long changes are kept on each plan.
Management API
API keys and endpoints for everything the console does.
How Waltail works
Waltail connects to your Postgres over logical replication and receives every committed change as it happens. It stores each change durably in its own database first, and only then acknowledges it to yours — so a slow destination never makes your write-ahead log grow.
From there, delivery workers send the changes to each destination on the pipeline: in batches, rate-limited if you want, retried with backoff, and always in order for any given row. The console shows what was delivered, what is waiting, and what needs a replay.
You pay for the bytes delivered to your destinations and nothing else.
Destinations
All 20 are included on every plan, and one pipeline can deliver to as many as you like — in order per row, at least once. Pick one to see how to connect it and exactly how changes arrive there.
HTTP
Queues & streams
Apache Kafka
Any Kafka-protocol broker
Amazon SQS
Standard and FIFO queues
Amazon SNS
Fan-out to many subscribers
Amazon EventBridge
Rules, targets, event buses
Amazon Kinesis
Data Streams, partitioned by row
Redis Streams
XADD, consumer groups
Google Pub/Sub
Native ordering keys
NATS JetStream
Nats-Msg-Id dedupe
RabbitMQ
Exchanges, confirms
Azure Event Hubs
Kafka endpoint, connection string
Azure Service Bus
Sessions, duplicate detection
Cloudflare Queues
Workers consumers
Search
Elasticsearch
Bulk upsert and delete
OpenSearch
Bulk upsert and delete
Typesense
Upsert import, id from PK
Meilisearch
Documents API, id from PK
Storage & cache
Warehouses
Common questions
Are destinations charged separately?
No. Sinks, pipelines and seats are unlimited on every plan, including Free. The only meter is egress — the gigabytes delivered to your sinks.
Can one pipeline deliver to several destinations?
Yes. A pipeline has one source database and any number of sinks. Every change is delivered to every sink, each with its own batch size, rate limit, retries and replay.
Can I add a destination to a running pipeline?
Yes. A new sink starts receiving changes from the moment it is added, with no interruption to the others. Run a backfill to hand it the rows that already exist.
What if my destination isn't listed?
Anything that accepts an HTTP request works through the webhook sink — that covers Slack, Discord, serverless functions and most SaaS APIs. For a native connector, email us.