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.0b1.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.0b1-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

Details for the file zetten-1.0.0b1.tar.gz.

File metadata

  • Download URL: zetten-1.0.0b1.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.0b1.tar.gz
Algorithm Hash digest
SHA256 beec0c0888343de9d0e509f3b1d144d0b22771ca98b4c15dd22dc7dfce39e091
MD5 ed9c528ede4cc4f577ca00e1753ebfda
BLAKE2b-256 aaba64dafbe1db0da013508109a3893f8c04c12b82123c617d511c754a3aa158

See more details on using hashes here.

File details

Details for the file zetten-1.0.0b1-py3-none-any.whl.

File metadata

  • Download URL: zetten-1.0.0b1-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.0b1-py3-none-any.whl
Algorithm Hash digest
SHA256 06733978a8baa26f4de46eca485e6a21928ea55c6ecdd0ae01184332c7a928b9
MD5 b483e4d6255953ff12091ecdf3b8f4e6
BLAKE2b-256 10b07d664df1821793efe5dee97e6abdbdb4ac3e156856319a3c33b042d3ba25

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