Skip to main content

Fast task runner for Python projects

Project description

⚡ Zetten

The High-Performance Task Runner for Python Backends. Parallel. Deterministic. Fast.

PyPI - Version PyPI - License PyPI - Python Version CI Status

Zetten is a dependency-aware execution engine designed to unify how you run tests, linters, and builds. It ensures that your workflow remains identical across local development environments and any CI platform, only faster.


🚀 The Zetten Philosophy

Modern Python projects often require coordinating various tools (tests, type-checkers, formatters). Zetten eliminates "Glue Code Fatigue" by providing:

  • Parallel Execution: Automatically identifies independent tasks and runs them concurrently across your CPU cores.
  • Three-Tier Variable System: Advanced command templating with a strict priority hierarchy: CLI Flags (-k) > Config Vars > Environment Variables.
  • Smart Caching: Uses content-addressable hashing to skip tasks if their specific inputs haven't changed since the last run.
  • Platform Agnostic: Behaves identically on macOS, Windows, Linux, or any CI/CD provider.
  • Dependency Awareness: Define a Directed Acyclic Graph (DAG) of tasks to ensure correct execution order (e.g., setup always precedes test).

✨ Features

  • ⚡ Worker Pool Concurrency: Maximizes resource usage by running non-dependent tasks in parallel.
  • 🏷️ CI Tagging: Execute logical groups of tasks (e.g., run --tag ci) with a single command.
  • 🛡️ Failure Propagation: If a foundational task fails, Zetten halts downstream execution to prevent cascading errors.
  • 🔍 Intelligent Diagnostics: Includes ztn doctor to identify environment inconsistencies instantly.
  • ⏱️ Performance Analytics: (Coming Soon) Real-time insights into time saved via parallelism.

🛠️ Quick Start

Install Zetten:

pip install zetten

Initiate a project:

ztn init

For Python script execution:

[tool.zetten.tasks.hello]
script = "my_module:main"  # Runs: python -c "import my_module; my_module.main()"
description = "Run a python function"

Define tasks in pyproject.toml:

[tool.zetten.tasks.lint]
cmd = "ruff check src"
inputs = ["src/"]
tags = ["ci"]

[tool.zetten.tasks.test]
cmd = "pytest"
depends_on = ["lint"]
inputs = ["src/", "tests/"]
tags = ["ci"]

[tool.zetten.tasks.build]
description = "Build the project"
# Supports Fallback Syntax: ${VAR:-default}
cmd = "mkdir -p ${build_dir} && python -m build --outdir ${DEST:-dist}"
depends_on = ["lint"]
inputs = ["src/"]

Define tasks in zetten.toml:

[tasks.setup]
cmd = "pip install -r requirements.txt"

[tasks.lint]
cmd = "ruff check src"
inputs = ["src/"]
tags = ["ci"]

[tasks.test]
cmd = "pytest"
depends_on = ["setup"]
inputs = ["src/", "tests/"]
tags = ["ci"]

Run tasks:

ztn run test
ztn run lint test

Zetten will only re-run tasks when their inputs change.


⚙️ The Variable Hierarchy

Zetten uses a deterministic three-tier system to resolve variables:

  • Tier 1 (CLI): ztn run build -k build_dir=output (Highest Priority)
  • Tier 2 (Config): Values defined in [tool.zetten.vars]
  • Tier 3 (Env): System environment variables (e.g., $USER, $PATH)

🚀 Running in CI

Zetten is designed for the modern CI/CD pipeline. By using Tags and Strict Mode, you can ensure your pipeline is both flexible and safe.

# Force a specific version and environment in CI
ztn run --tag ci -k VERSION=${GITHUB_SHA} -k ENV=prod

If a foundational task fails, Zetten halts downstream execution immediately to save CI minutes and prevent cascading failures.

⚙️ Configuration Model

Configuration is explicit by design:

  • No templating
  • No conditionals
  • No implicit behavior

Configuration lives in:

  • pyproject.toml (preferred)
  • zetten.toml (for legacy or minimal projects)

If no configuration is found, Zetten will explain how to resolve the issue.


🛠 Commands

  • ztn run <tasks> — Execute tasks with parallel dependency resolution.
  • ztn run <task> -k KEY=VAL — Override any variable via the CLI.
  • ztn watch <tasks> — Precision re-runs on input changes.
  • ztn graph — Visualizes the Directed Acyclic Graph (DAG) of your tasks.
  • ztn doctor — Diagnoses configuration and environmental health issues.
  • ztn init — Interactive project setup and template generation.

🛡 Status

Zetten is currently in v1.3.1. If no configuration file is found, Zetten will provide clear instructions on how to initialize your project.


Documentation

Full documentation is available at: docs.zetten.in


🤝 Contributing

We love Rust and Python! If you want to help make Zetten even faster:

  • Fork the repo.
  • Add your feature (don't forget the tests!).
  • Open a Pull Request.

Built with ❤️ for the Python community using the speed of Rust.

Please open an issue or discussion on GitHub before proposing large changes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

zetten-1.3.2-py3-none-win_amd64.whl (1.7 MB view details)

Uploaded Python 3Windows x86-64

zetten-1.3.2-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.5+ x86-64

zetten-1.3.2-py3-none-macosx_11_0_x86_64.whl (1.6 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

zetten-1.3.2-py3-none-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file zetten-1.3.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: zetten-1.3.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.11.5

File hashes

Hashes for zetten-1.3.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c1f9f24e0f2ad99b157d4db093f9751ab68ea5bcc35346a9780eaca0e8b6083a
MD5 bf16be7ee7a8ad5d0709530779ece009
BLAKE2b-256 436f3ab7b41cdb1728bda0b9c9db6389d9ab9ff9c13837cf37f12bcb1beec061

See more details on using hashes here.

File details

Details for the file zetten-1.3.2-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for zetten-1.3.2-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2854bad1060bf0b397c02231fe6f4936440f9927511aa419740c39e34639db8a
MD5 35fb903b52f965601927f58f576fe51b
BLAKE2b-256 f23f48e2b0cfc3285ed9d9d6008024b295c22f8d956d91607180f2ae4ebc5edb

See more details on using hashes here.

File details

Details for the file zetten-1.3.2-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for zetten-1.3.2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 9d11969f298ab1ff2c372e2ba8a67738c3f5809fc8b06f66bea2347fa0e1cce2
MD5 2e9977207173f170c01f9b0a821cf391
BLAKE2b-256 44c856f86a61ddf6fba2edb24799a8d235a0dcdb8f674663007905aaee7349ab

See more details on using hashes here.

File details

Details for the file zetten-1.3.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for zetten-1.3.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e36768d824b4846b8db61b1882070ed20dce92a4f1ef792ba623e85812a8e9e
MD5 ab3ba8ed4444bb6b840a81f25f1e0406
BLAKE2b-256 922a40ab96591e4e73264f26d201dd12045742893868c3276b84ebb25b9fc00a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page