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.4.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.4-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zetten-1.0.4.tar.gz
  • Upload date:
  • Size: 4.3 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.4.tar.gz
Algorithm Hash digest
SHA256 490b2be52b6a6d6dcec0748c40da203e86939c4822879fc58f793b36e52d4115
MD5 9172ec7b2e8ee2cc0b792a17272d15f6
BLAKE2b-256 4d58e4a5b41cb55a59dd2cb1b6a0564597938d67d41cce459c6204bc720c83eb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zetten-1.0.4-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.10.19

File hashes

Hashes for zetten-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 a9a45da011324e20e63baf47d70fcb8d172816e7699b743843c3997e6c86351a
MD5 f453dda153217ce872a436938eb1c22f
BLAKE2b-256 bd40ea44d2fd663042d5a2861f3e68b9aaff8ed03557d4eda3146e5e789f8150

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