NoETL
NoETL orchestrates APIs, databases, and scripts through a declarative Playbook DSL. This package is the NoETL command-line tool, installable with pip.
pip install noetl
It installs two equivalent commands, noetl and ntl, and an importable
Python API. There is no separate binary to download and nothing to put on your
PATH yourself.
noetl run pipeline.yaml --runtime local --set region=west
import noetl
outcome = noetl.run("pipeline.yaml", variables={"region": "west"})
print(outcome["status"], outcome["final_result"])
noetl.cli(["catalog", "list"]) # any CLI subcommand
What it is
The CLI is written in Rust and lives at
noetl/cli. This package compiles that crate
into a native extension module, so noetl.run(...) and the noetl command
both drive the same execution engine — nothing here reimplements playbook
execution or shells out to a separate process.
Every subcommand is available: run, catalog, context, auth, register,
status, query, ehdb, provider, subscribe, and the rest. Run
noetl --help for the full tree.
Python API
| Function | Purpose |
|---|---|
noetl.run(playbook, **options) |
Execute a playbook locally; returns the run outcome as a dict. |
noetl.cli(args) |
Run any CLI subcommand; returns its exit code. |
noetl.__version__ |
This package's version. |
noetl.run() returns the outcome envelope: status, playbook_name,
playbook_path, started_at, completed_at, duration_seconds,
executed_steps, step_results, final_result, and error when the run
failed. It executes locally; to submit to a distributed runtime, use
noetl.cli(["run", playbook, "--runtime", "distributed"]).
Versioning
This package's version and the CLI's version are separate. noetl --version
reports the version of the Rust CLI compiled into this release — that is the
number to quote in a bug report against
noetl/cli. noetl.__version__ and
pip show noetl report the package version.
Known limitation: DuckDB
These wheels are built without the embedded DuckDB engine. Compiling DuckDB from its C++ source takes tens of minutes to an hour per platform, which a five-platform wheel matrix cannot absorb.
Affected surfaces report a rebuild hint rather than running:
kind: duckdbandkind: ducklakeplaybook steps- the
sink: duckdb:target - the
noetl iapcommand family, whose state ledger is a localstate.duckdb
Everything else — HTTP, shell, Postgres, playbook composition, providers, secrets, and the catalog/server/worker verbs — works normally. If you need DuckDB, install the CLI from source with the feature enabled:
cargo install --bins noetl --features duckdb-integration
or use a pre-built release binary, Homebrew, or the APT package — all of which ship with DuckDB included.
Requirements
Python 3.9 or newer, on Linux or macOS. The wheels are abi3, so one wheel
per platform serves every supported Python version.
Windows is not supported: the CLI uses POSIX process and signal control, which does not build on Windows (the native binaries are Linux/macOS-only for the same reason). On Windows, use WSL.
Documentation
- noetl.dev — user-facing documentation
- CLI reference
- Platform wiki
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 noetl-5.0.0.tar.gz.
File metadata
- Download URL: noetl-5.0.0.tar.gz
- Upload date:
- Size: 38.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00e4f804eaf9384e3ab7c8315e9ca06096c69ab2af09984118bdbb2f3dcf57f7
|
|
| MD5 |
05980d927b9b637fa485727d2a5799d3
|
|
| BLAKE2b-256 |
fee452b89e84db98020f31fe956eb89ca1dedd2b6cf2012b7d0f3accd80a473d
|
File details
Details for the file noetl-5.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: noetl-5.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 7.7 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
916df0890bdf71b0700fde3dd623549d811e3269caf8856a3900ec1ef0553053
|
|
| MD5 |
ee57b4560f70747ff3b7e24c28dc0a9a
|
|
| BLAKE2b-256 |
cfea792755893730961100c924f3bcb1af3c93b366c7781a698ffa299456302a
|
File details
Details for the file noetl-5.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: noetl-5.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 7.4 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6ce62e3b979c3698a3aee00fe9a5bbf1c696afbe3109649de50a489c2c1fbc5
|
|
| MD5 |
3f7ee5bc7dbaa5654c316413046b6154
|
|
| BLAKE2b-256 |
7736c6ef98bbb92cdbbd35c1e14f020b8f2c223747d4849653c163412d5d7feb
|
File details
Details for the file noetl-5.0.0-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: noetl-5.0.0-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 7.0 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49e9c6172c10c96e9293eca8b9581ffc08c423ea52f1b2bba663fda4b1a88455
|
|
| MD5 |
2d277751616d2ae07d08cd4973de41fd
|
|
| BLAKE2b-256 |
532e2c574e517bf7e6fd7b91dd65894bbae49c8e8b9c560633d13072ecace072
|