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.2.tar.gz (4.3 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.2-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for zetten-1.0.2.tar.gz
Algorithm Hash digest
SHA256 00bf47599e7055a7ab682f5396776da2b52456cb586f6841001779748ff617c2
MD5 9f805b4fb81739e9605036e923afcb60
BLAKE2b-256 279ff04dec567e91f48205314439277a809df38c3679e523885c69ba03471561

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for zetten-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3802ab8e6628bed3ab507e5f14096dcd8f01b85e1e4b9457277a50e182c0fb1b
MD5 5a2101452cba2910694b1a09c6f04d7e
BLAKE2b-256 afc7afdfb5aeb554a45d78e0c5b9ff808d64f0734e1d0b59ac2d7e154668f442

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