Skip to main content

Fast task runner for Python projects

Project description

Zetten

Zetten is a fast, deterministic task runner for Python backend projects, written in Rust. It provides a reliable way to run common backend tasks - tests, linters, type checks, builds - using a single execution engine that behaves the same locally and in CI. Zetten replaces ad-hoc setups built from Makefiles, shell scripts, nox/tox, and CI YAML glue with a small, explicit, and predictable tool. Zetten is inspired by tools like make, nox, just, and cargo, but is designed specifically for modern Python backend workflows.


Why Zetten

Python backend projects often rely on a mix of:

  • Makefiles
  • shell scripts
  • tox / nox
  • CI YAML logic

These approaches are flexible, but they are often:

  • non-deterministic
  • slow as projects grow
  • hard to reason about
  • inconsistent between local runs and CI

Zetten focuses on a small set of guarantees:

  • The same inputs always produce the same results
  • Tasks only run when their inputs change
  • Independent tasks run in parallel
  • Local and CI execution behave identically

Features

  • Fast execution using a Rust-based core
  • Deterministic task caching based on input hashing
  • Python virtual environment awareness
  • Automatic environment detection without manual activation
  • Parallel task execution using a worker pool
  • Task dependency execution using a DAG model
  • Structured logging and progress reporting
  • Clear and consistent exit code semantics

What Zetten Is (and Is Not)

Zetten is

  • A task runner for Python backend projects
  • A local development and CI execution tool
  • Deterministic and cache-aware
  • CLI-first

Zetten is not

  • A framework
  • A workflow engine
  • A job queue
  • A replacement for linters or test frameworks
  • A runtime dependency of your application

Quick Start

Install Zetten:

pip install zetten

Initiate a project:

zetten init

Define tasks in pyproject.toml:

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

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

Define tasks in zetten.toml:

[tasks.test]
cmd = "pytest"
inputs = ["src/", "tests/"]

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

Run tasks:

zetten run test
zetten run lint test

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


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 fix it.


Commands

  • zetten run — execute tasks deterministically
  • zetten watch — re-run tasks on input changes
  • zetten graph — inspect the task dependency graph
  • zetten doctor — diagnose configuration and environment issues
  • All commands produce stable, CI-safe output with well-defined exit codes.

Status

Zetten is in v0.1 and is feature-complete for its initial design. Core semantics - execution, caching, exit codes, configuration - are stable.


Documentation

Full documentation is available at: Github Wiki


Contributing and Feedback

Zetten is intentionally minimal and opinionated. Feedback is welcome, especially around:

  • Developer experience
  • CI usage
  • Installation friction
  • Missing but essential workflows.

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 Distribution

zetten-1.0.6.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

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

zetten-1.0.6-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file zetten-1.0.6.tar.gz.

File metadata

  • Download URL: zetten-1.0.6.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for zetten-1.0.6.tar.gz
Algorithm Hash digest
SHA256 3f8607e59a95881502d33f70cd2b52670f8c0022215bd52b23b7baf4c942fa1e
MD5 313e68e8a95483f41bae02b93bb99b4f
BLAKE2b-256 927f7afef19bb18623087f2901f821e80d17e45529542b6d1cc09bb1cd78efa1

See more details on using hashes here.

File details

Details for the file zetten-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: zetten-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for zetten-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 63a0751d918762a51617da6d2a21bdc9861af3b6473e7f2ce2913626b390a64a
MD5 a9bc33c8cbadb6d5501c4afdfcbedf2f
BLAKE2b-256 780e56757abf909e38f769094003a56b303a21aa55b3ae201c860d844bf079b7

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