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.1.tar.gz (3.4 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.1-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: zetten-1.0.1.tar.gz
  • Upload date:
  • Size: 3.4 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.1.tar.gz
Algorithm Hash digest
SHA256 f3ffc8d66ce4006804edca3dfdb0feea4874f01d7ed19cfc541a4fbb8ab58c3e
MD5 5c2bab0fac20ad804f93b074670a96c2
BLAKE2b-256 006a27440f3a21d40ae56b7d16856d7fb98557a579eec20019ac24622fa9fe70

See more details on using hashes here.

File details

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

File metadata

  • Download URL: zetten-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 3.7 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a642fc4ea982f60c217a892ad0bf3217d44ddc18dd617a22b10e2865cf7dc28e
MD5 206f416d05f3549c517debcd365fe79b
BLAKE2b-256 71fd581db64138d7b606c799296d22d57ecb801af895b795cfbc8258457f9efe

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