ETLantic
One typed pipeline model. Many execution backends.
Typed contracts. Deterministic plans. Pluggable execution.
Quickstart · Documentation · Is ETLantic for me? · Python API · CLI
Incompatible Load wiring fails validate with PMPIPE210 before any
successful write (data/out.json stays untouched until you restore
Load[Row]). Try the
Quickstart aha:
python -m etlantic validate pipeline.py:SamplePipeline --profile development
# → PMPIPE210: … expects Other … received Row …
ETLantic gives Python data pipelines one portable, typed logical model. It coordinates contracts, transformations, and topology without replacing the tools that execute them. Before execution reaches a write, ETLantic checks wiring, contract compatibility, backend capabilities, and plugin trust, then produces a deterministic plan for local engines, backend plugins, or external orchestrators.
It is not a dataframe engine, warehouse transformation system, or scheduler. ETLantic coordinates those tools through one typed logical model.
Python types + pipeline topology
│
▼
validate before write
│
▼
deterministic, secret-free plan
│
┌──────┼────────┐
▼ ▼ ▼
run compile generate
Five-minute quickstart
ETLantic requires Python 3.11 or newer. Create and activate a virtual environment outside the project that ETLantic will generate.
macOS or Linux:
python -m venv .venv
source .venv/bin/activate
Windows PowerShell:
py -m venv .venv
.\.venv\Scripts\Activate.ps1
Then install ETLantic and initialize a fresh project directory:
python -m pip install --upgrade pip
python -m pip install 'etlantic==0.40.0'
python -m etlantic --version
mkdir my-pipeline
cd my-pipeline
python -m etlantic init --with-toml
python -m etlantic validate pipeline.py:SamplePipeline --profile development
python -m etlantic run pipeline.py:SamplePipeline --profile development
Inspect the result:
cat data/out.json
Or, in PowerShell:
Get-Content data\out.json
You should see a succeeded run and two JSON rows for Ada and Grace.
| Command | What it proves |
|---|---|
init |
Creates an import-safe pipeline, profile, sample data, and workspace |
validate |
Checks topology, contracts, capabilities, configuration, and trust without running transforms |
run |
Validates, plans, executes, and records a structured run report |
Continue with the full Quickstart to see ETLantic reject an incompatible contract before a write, then build your first transformation.
Why teams use ETLantic
- Fail before side effects. Catch invalid graph wiring, incompatible contracts, missing engine capabilities, and plugin-trust failures before publication.
- Review what will run. Produce deterministic plans that can be inspected, fingerprinted, diffed, and retained as build evidence.
- Keep contracts at every boundary. Apply the same typed expectations to extracted inputs, transformation outputs, engine transitions, and loads.
- Separate intent from execution. Keep one logical pipeline while plugins own Polars, Pandas, SQL, and PySpark execution or Airflow compilation.
- Adopt incrementally. Start with local Python and JSON files, then install only the engines and integrations you need.
- Automate enforcement. Emit human, JSON, or SARIF diagnostics for local development and CI.
Cross-engine execution is explicit rather than magical: each transformation needs either an implementation for the selected backend or a portable transformation supported by that backend's compiler.
Where ETLantic fits
| If your primary need is… | Start with… | Add ETLantic when you need… |
|---|---|---|
| Warehouse-only SQL transformation | dbt | Typed Python pipelines across additional engines |
| Durable scheduling and operations | Airflow, Dagster, or Prefect | Contract validation and deterministic plans before orchestration |
| Dataframe or table validation | Pandera or Great Expectations | Pipeline topology, capability, and publication-boundary validation |
| Typed multi-engine pipeline coordination | ETLantic | A validation-first logical model with pluggable execution |
Read the full comparison guide before adopting ETLantic as a replacement for an existing tool. It is usually a complementary control layer.
Choose an execution path
Core installs without dataframe engines, database drivers, Spark, Airflow, or Prefect. Add only what the pipeline uses. The middle column describes the capability shipped in 0.40, not future roadmap intent.
| Capability | 0.40 | Install |
|---|---|---|
| Local Python + JSON/CSV | Built-in first-success and test path | pip install etlantic |
| Polars | Eager/lazy dataframe execution and portable compilation | pip install 'etlantic[polars]' |
| Pandas | Eager dataframe execution and portable compilation | pip install 'etlantic[pandas]' |
| SQL | SQLite evaluation path and PostgreSQL reference execution | pip install 'etlantic[sql]' |
| PySpark | Batch Spark execution; requires a compatible JVM | pip install 'etlantic[pyspark]' |
| Airflow | Compile plans to DAG modules; Apache Airflow is installed separately | pip install 'etlantic[airflow]' |
| Prefect | Local direct-execution scheduler integration | pip install 'etlantic[prefect]' |
| OS keyring | Runtime secret-provider integration | pip install 'etlantic[keyring]' |
| SQLModel | SQLModel-to-contract bridge helpers | pip install 'etlantic[sqlmodel]' |
| OpenTelemetry | Observability API integration | pip install 'etlantic[observability]' |
| Medallion pipelines | Bronze/silver/gold facade outside ETLantic core | pip install medallantic |
For controlled deployments, pin core and every official plugin to the same tested release. See engine selection, compatibility, and optional packages.
Structured Streaming and etlantic-datafusion are experimental. The FastAPI
package is a thin reference adapter, not a production control plane.
The authoring model
ETLantic pipelines have four public building blocks:
| Building block | Responsibility |
|---|---|
Data |
Typed dataset contract |
Transformation |
Typed inputs, outputs, parameters, and implementations |
Extract / Load |
External read and publication boundaries |
Pipeline |
Declarative topology with validate, plan, and run |
Application code should prefer the curated facade:
import etlantic as etl
Pipelines can be authored as typed classes or with functional builders and
versioned PipelineDefinition JSON. Start with the generated project above;
then use the
SDK tutorial
or
programmatic authoring guide.
Contracts as build artifacts
Generate a reviewable contract bundle only after the pipeline validates:
python -m etlantic validate pipeline.py:SamplePipeline --format json
python -m etlantic generate pipeline.py:SamplePipeline -o contracts/
contracts/
├── data/ # data contracts
├── transformations/ # transformation contracts
└── pipelines/ # pipeline topology contract
ETLantic integrates with the Open Data Contract Standard (ODCS), Data Transformation Contract Standard (DTCS), and Data Pipeline Contract Standard (DPCS). Generation is deterministic and refuses invalid pipelines.
Security and production posture
ETLantic is currently Beta. It is suitable for documented, controlled, single-tenant pilots—not unrestricted enterprise production.
| Boundary | Current posture |
|---|---|
| Plans and reports | Carry secret references, never resolved secret values |
| Production plugin trust | security_mode="production" requires an explicit non-empty plugin_allowlist |
| Plugin isolation | Allowlists control selection; they are not a sandbox |
| Schema history | Stores fingerprints and metadata, never source rows |
| Deployment | Application-owned process, storage, network, recovery, and isolation controls |
| Not included | Managed runtime, multi-tenant control plane, formal SLA, or compliance certification |
Use separate processes or stronger infrastructure boundaries for distinct tenants and trust domains. Before a pilot, review:
- Capabilities and limitations
- Production readiness
- Security model
- Enterprise evaluation guide
- Planned multi-tenant control-plane program
- Security reporting policy
Common workflows
# Inspect the logical graph
python -m etlantic inspect pipeline.py:SamplePipeline --format json
# Resolve a deterministic plan
python -m etlantic plan pipeline.py:SamplePipeline \
--profile development --format json
# Emit SARIF for CI
python -m etlantic validate pipeline.py:SamplePipeline \
--profile development --format sarif
# Compile through the optional Airflow package
python -m etlantic compile pipeline.py:SamplePipeline \
--profile development --target airflow -o dags/
# Inspect durable run reports
python -m etlantic report list
The public CLI also includes doctor, profile, diff, plugin, schema,
reliability, and viz. See the
CLI reference
for exit codes and mutation behavior.
Documentation
| Goal | Start here |
|---|---|
| Get a first success | Quickstart |
| Decide whether ETLantic fits | Compare |
| Choose an engine | Engine selection |
| Learn the architecture | Architecture |
| Use the Python SDK | API reference |
| Operate a controlled pilot | Production readiness |
| Review future direction | Planning Hub |
| Build a plugin | Plugin SDK |
| Troubleshoot a failure | Troubleshooting |
| Upgrade safely | Upgrade hub |
Repository examples require a clone and are not included in the wheel. Pip
users should begin with etlantic init; contributors can use
examples/
after uv sync --locked.
Contributing and support
Contributions are welcome. Start with CONTRIBUTING.md for setup, test scopes, documentation checks, and pull-request expectations.
- Usage questions and bug reports: GitHub Issues
- Vulnerabilities: private reporting instructions
- Release history: CHANGELOG.md
- Project governance: GOVERNANCE.md
ETLantic is available under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file etlantic-0.40.0.tar.gz.
File metadata
- Download URL: etlantic-0.40.0.tar.gz
- Upload date:
- Size: 884.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c64648f5964513642422f0bc892c1e8e01133b21a2a6cf21007ec52677e9c846
|
|
| MD5 |
499b0683ff0120b929d220c0fb4f3663
|
|
| BLAKE2b-256 |
3cfcd38794090d188b43ef27cdb4c1cff24eaed00dc3a1305a24d833c7e5c073
|
File details
Details for the file etlantic-0.40.0-py3-none-any.whl.
File metadata
- Download URL: etlantic-0.40.0-py3-none-any.whl
- Upload date:
- Size: 577.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b906467143b582bcc168c17b21709b98ba997074d36526e75726e4427a99ceb
|
|
| MD5 |
b11b364566439667679b835d6a9c0c73
|
|
| BLAKE2b-256 |
d84a669a2de89b834b726b58e994455d3c187aff9b277ba58067c1cd62238a71
|