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 zetten 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:

zetten init

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:

zetten run test
zetten 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): zetten 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
zetten 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

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

🛡 Status

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


Documentation

Full documentation is available at: Github Wiki


🤝 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.0.12-py3-none-win_amd64.whl (1.7 MB view details)

Uploaded Python 3Windows x86-64

zetten-1.0.12-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.8 MB view details)

Uploaded Python 3manylinux: glibc 2.5+ x86-64

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

Uploaded Python 3macOS 11.0+ x86-64

zetten-1.0.12-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.0.12-py3-none-win_amd64.whl.

File metadata

  • Download URL: zetten-1.0.12-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.10.2

File hashes

Hashes for zetten-1.0.12-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 767fb09aa9cd49c87744ae7a3c020264b293f1e8c2583f6301f218f7e076f9b0
MD5 e6aa8994c0312531325249ea9b20027e
BLAKE2b-256 0a194ed625faf4eb4ca6dccf5e5faeb56daf13fb9a771e1310403fad78423e68

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zetten-1.0.12-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3667b240c4e6c3a11bed20b6ae27f26f9e5f07f8c6f336cb9cac1d8dfe306367
MD5 7f062b819800e1fd47133b97426e0270
BLAKE2b-256 357d7c4700be88158477bf04c6bec35bcca1c142a892995d9979094c25cd9dcb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zetten-1.0.12-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6c9297b5b6f7792f5989ea93fab4996ac559e2aed73c0c180c5bb7a07399da2d
MD5 90c48fa0690782ba43b89ae44d7f9a5c
BLAKE2b-256 9e0b9e5c01c0576f1e727e9e7e3fd73bcafe85b9176f80a904fa7e3c1e5473a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for zetten-1.0.12-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f7be346798a4513c24876212998c3bdd1437c2cab6cabe72f386d44890a90a19
MD5 460828e36240a53fe0963b66780b1d56
BLAKE2b-256 2f5989acbfbfb1ea316428925e427aa665f04476d81186e8541cb09ac5aa5bda

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