Early preview: invite-only beta, not live yet
Data pipelines in SQL. Every run in its own machine.
Write one SELECT. Point it at a source and a sink. Waddle runs it on DuckDB inside an isolated microVM that starts in about half a second and is deleted when the run ends, with checks that stop a bad load before it lands.
$ waddle init orders-sync
$ waddle validate orders-sync/pipeline.toml
ok: my-pipeline
$ waddle run orders-sync/pipeline.toml --state state
{"rows_in":1000,"rows_out":667,"watermark":"2026-02-11 16:00:00","seconds":3.7}In one paragraph
What is Waddle?
Waddle is a data pipeline service where a pipeline is one SQL SELECT plus a short TOML file. Each run executes DuckDB inside its own isolated microVM, which starts in about 0.6 seconds on a cached image and is deleted when the run ends. It is an early preview, invite-only.
Four ways to use it
The same pipeline files, wherever you work.
CLI
One local program. Validate, test and run a pipeline on your own machine with no account and nothing uploaded. Later it also deploys to the hosted service.
waddle run pipeline.tomlAPI
REST with a generated OpenAPI document: pipelines, secrets, runs, schedules, webhooks and usage. Invite-only.
POST /v1/pipelines/{name}/runsMCP
Let an AI assistant validate, test, deploy and run pipelines through a local server or the invite-only hosted endpoint. No tool takes a secret value.
waddle-mcpWeb console
A SQL editor and run history. DuckDB runs in your browser to preview a transform on a sample, so the sample never leaves it. Invite-only.
Each component's exact state and evidence are on the status page.
How it works
Two files, one run.
Write
A short TOML file names the source, the sink, the optional watermark and the checks. A SQL file holds one SELECT over the source table.
Run
A fresh microVM loads the source, then locks itself down: no files, no network, no extensions. Only then does your SQL run. A second connection that never saw your SQL writes the sink.
Verify
Checks run before the write. After the write the sink is read back and compared. The watermark is saved only when the sink succeeded, so a failed run repeats safely.
name = "orders-sync"
sql = "orders.sql"
[source]
kind = "postgres"
dsn_env = "SRC_DSN" # the name of a secret, never the secret
table = "orders"
[sink]
kind = "file"
url = "s3://acme-data/orders.parquet"
format = "parquet"
[incremental]
column = "updated_at"
initial = "1970-01-01"
[[checks]]
rule = "not_null"
column = "order_id"
[[checks]]
rule = "reconcile"-- the source is the table `src`
SELECT order_id, customer_id, amount, updated_at
FROM src
WHERE updated_at > $watermarkMeasured, not promised
What the prototype did.
Prototype measurements from October 2026. They show what is possible, not a service level. Warm boot and cold image pull are different numbers; both are shown on purpose.
Sources and sinks
What works, what is planned.
| Connector | Status | Notes |
|---|---|---|
| Files: CSV, JSON, Parquet over HTTPS, S3, R2 | working | Read and write, with a read-back check. |
| Postgres (source and sink) | working | Append, replace and upsert, with incremental loads. |
| SQLite (source) | local only | A local database file. The hosted service refuses it: a hosted run has no file to attach. |
| SurrealDB (source and sink) | working | Reads and writes your own SurrealDB over its HTTP API. No incremental loads. SurrealDB is never the processing engine. |
| MySQL (source) | invite-only | Incremental loads supported. Servers with a self-signed certificate are not supported. |
| DuckLake (sink) | local only | Append and replace. Hosted runs need a persistent catalog first. |
| Delta Lake (sink) | local only | Append and replace (replace on a local directory only). |
| Iceberg (sink) | local only | Replace only, on a local directory. |
| Data quality rules | invite-only | Rules run on the staged result; a failing critical rule ends the run before the sink is written. |
| BigQuery, Snowflake | planned | Not started. |
| SaaS APIs (Stripe, GitHub and so on) | not in v1 | A deliberate cut to keep the first version small. |
FAQ
Questions people ask first.
What is Waddle?
Waddle is a data pipeline service where a pipeline is one SQL SELECT plus a short TOML file. Each run executes DuckDB inside its own isolated microVM, which starts in about 0.6 seconds on a cached image and is deleted when the run ends. It is an early preview, invite-only.
Is Waddle live?
Not publicly. This is an early preview and the hosted service is invite-only. Sign-in and billing are not built yet.
What is the status of the Waddle API, MCP server and web console?
Available: CLI, Pipeline engine and checks, File and Postgres connectors, MySQL, SQLite and SurrealDB connectors, Lake sinks (DuckLake, Delta, Iceberg), MCP server (local). Invite-only: Data quality rules, Hosted runs and schedules, REST API, MCP endpoint (hosted), Web console, Run on your own compute account. Planned: Network egress controls, Sign-in and billing. Per-capability state is on the status page.
What does Waddle do that DuckDB alone does not?
DuckDB runs your query. Waddle adds what you would otherwise script around it: source and sink connectors, incremental state (the watermark), schedules, checks that stop a bad run before it writes, a read-back to confirm what landed, run history and metering.
Why does Waddle use a microVM for every run?
Your SQL is code from a user. Each run gets a fresh isolated machine that holds nothing from a previous run and is deleted when it finishes. On a cached image it starts in about 0.6 seconds.
How much data can a Waddle run handle?
The target is up to about 10 GB per run on a single machine. Larger jobs, streaming and change-data-capture are not planned for the first version.
Which sources and sinks does Waddle support?
Files (CSV, JSON, Parquet over HTTPS, S3 or R2) and Postgres as sources and sinks; MySQL, SQLite and SurrealDB as sources (SurrealDB also as a sink); DuckLake, Delta Lake and Iceberg as sinks in local runs. Other lakes and warehouses are planned. Connectors for SaaS APIs are deliberately not in the first version.
Can I leave Waddle?
Pipelines are a plain TOML file and a SQL file, and the CLI runs the same files on your own machine with no account. Your sink is your own storage.
Beta access
Invite-only, and not open yet.
Sign-in with GitHub opens when the private beta starts. Until then there is nothing to buy and no account to create. The CLI and the file formats are the part you can read about today in the docs.