Data ingestionfor the future.
A pipeline is a file in your repo.
Section titled “A pipeline is a file in your repo.”Whether you write it yourself or an agent drafts it, it ends up in the same place — SQL and YAML you can read, diff, and review like anything else your team ships.
INSERT INTO {{ sink('lake', 'orders_curated', strategy: 'replace', format: 'parquet') }}SELECT o.id, o.amount, c.emailFROM {{ ref('stg_orders') }} AS oJOIN {{ source('raw', 'customers') }} AS c ON c.id = o.customer_idraw: connector: localfiles entities: customers: read: path: data/customers.csv format: csv
lake: connector: localfiles root: out # writes land under out/<entity>/Change it, and someone reads the diff.
Section titled “Change it, and someone reads the diff.”No config UI holds the logic hostage — a bad join or a silent strategy change gets caught in review, not in production.
-INSERT INTO {{ sink(‘lake’, ‘orders_curated’, strategy: ‘replace’, format: ‘parquet’) }}+INSERT INTO {{ sink(‘lake’, ‘orders_curated’, strategy: ‘merge’, keys: [‘id’], format: ‘parquet’) }} SELECT o.id, o.amount, c.email FROM {{ ref(‘stg_orders’) }} AS o JOIN {{ source(‘raw’, ‘customers’) }} AS c ON c.id = o.customer_id+WHERE o.amount > 0
LGTM — replace was silently dropping late updates.
Ingestion, spoken into existence.
Section titled “Ingestion, spoken into existence.”Describe the pipeline. An MCP-connected agent writes valid SQL, pz
verifies every edit, and it’s running before you’ve finished your coffee.
customer_order_summary.sql, validating against the current DAG…INSERT INTO {{ sink(‘postgres’, ‘customer_order_summary’, strategy: ‘merge’, key: [‘customer_id’]) }} SELECT c.id AS customer_id, count(o.id) AS order_count, sum(o.amount) AS total_amount FROM {{ ref(‘stg_orders’) }} AS o JOIN {{ source(‘raw’, ‘customers’) }} AS c ON c.id = o.customer_id GROUP BY c.id;
$ pz validate validation passed (3 pipelines, 2 connections checked) $ pz run –all ok customer_order_summary 3 rows 18ms
Why PipelineZ?
Section titled “Why PipelineZ?”PipelineZ combines the power of modern data systems with a developer-friendly experience.
Blazingly Fast
Built on top of DuckDB and vectorized execution for extreme performance.
Ecosystem First
Connect to your data wherever it lives. Extensible connectors and formats.
Reliable by Design
Idempotent execution, automatic retries, and strong guarantees.
Developer Experience
YAML and SQL. Local first. Great DX from development to production.
Running in five minutes
Section titled “Running in five minutes”-
Install the CLI as a .NET global tool:
Terminal window $ dotnet tool install --global pz -
Scaffold a small, complete, runnable project:
Terminal window $ pz init demo --template sample && cd demo(Bare
pz initscaffolds the minimal template instead — the right start for your own data.--template sampleis what ships the bundled CSVs this walkthrough runs;pz init --list-templatesshows all five.) -
Run both flows — sources, pipelines, checks, and sinks in one command:
Terminal window $ pz run --all
Built with
open source.
Section titled “Built withopen source.”PipelineZ is 100% built with open-source projects we love. We believe in transparency, community, and open data.
View the source on GitHub- DuckDBAnalytics Engine
- .NETRuntime
- Apache ArrowColumnar Memory
- Apache ParquetColumnar Format
- OpenTelemetryObservability