{"id":35196688,"url":"https://github.com/amit-devb/zetten","last_synced_at":"2026-02-10T10:04:20.591Z","repository":{"id":330885693,"uuid":"1124315990","full_name":"amit-devb/zetten","owner":"amit-devb","description":"Zetten is a fast, deterministic task runner for Python backend projects, written in Rust","archived":false,"fork":false,"pushed_at":"2026-01-05T05:48:22.000Z","size":936,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-08T23:42:57.292Z","etag":null,"topics":["command-line-tool","developer-utility"],"latest_commit_sha":null,"homepage":"https://zetten.in/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amit-devb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-28T19:39:34.000Z","updated_at":"2026-01-05T05:48:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/amit-devb/zetten","commit_stats":null,"previous_names":["amit-devb/zetten"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/amit-devb/zetten","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amit-devb%2Fzetten","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amit-devb%2Fzetten/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amit-devb%2Fzetten/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amit-devb%2Fzetten/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amit-devb","download_url":"https://codeload.github.com/amit-devb/zetten/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amit-devb%2Fzetten/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-tool","developer-utility"],"created_at":"2025-12-29T07:39:00.808Z","updated_at":"2026-02-10T10:04:20.578Z","avatar_url":"https://github.com/amit-devb.png","language":"Rust","readme":"# ⚡ Zetten\n\n**The High-Performance Task Runner for Python Backends.** *Parallel. Deterministic. Fast.*\n\n[![PyPI - Version](https://img.shields.io/pypi/v/zetten?color=orange\u0026label=pypi)](https://pypi.org/project/zetten/)\n[![PyPI - License](https://img.shields.io/pypi/l/zetten?color=brightgreen\u0026label=license)](https://github.com/amit-devb/zetten/blob/main/LICENSE)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/zetten.svg)](https://pypi.org/project/zetten/)\n[![Nightly Build](https://github.com/amit-devb/zetten/actions/workflows/nightly.yml/badge.svg)](https://github.com/amit-devb/zetten/actions/workflows/nightly.yml)\n\nZetten is a dependency-aware execution engine designed to unify how you run tests, linters, and builds. It ensures that your workflow remains identical across local development environments and any CI platform, only faster.\n\n---\n\n## 🚀 The Zetten Philosophy\n\nModern Python projects often require coordinating various tools (tests, type-checkers, formatters). Zetten eliminates \"Glue Code Fatigue\" by providing:\n\n* **Parallel Execution:** Automatically identifies independent tasks and runs them concurrently across your CPU cores.\n* **Three-Tier Variable System:** Advanced command templating with a strict priority hierarchy: CLI Flags (-k) \u003e Config Vars \u003e Environment Variables.\n* **Smart Caching:** Uses content-addressable hashing to skip tasks if their specific inputs haven't changed since the last run.\n* **Platform Agnostic:** Behaves identically on macOS, Windows, Linux, or any CI/CD provider.\n* **Dependency Awareness:** Define a Directed Acyclic Graph (DAG) of tasks to ensure correct execution order (e.g., `setup` always precedes `test`).\n\n---\n\n## ✨ Features\n\n- **⚡ Worker Pool Concurrency:** Maximizes resource usage by running non-dependent tasks in parallel.\n- **🏷️ CI Tagging:** Execute logical groups of tasks (e.g., `run --tag ci`) with a single command.\n- **🛡️ Failure Propagation:** If a foundational task fails, Zetten halts downstream execution to prevent cascading errors.\n- **🔍 Intelligent Diagnostics:** Includes `ztn doctor` to identify environment inconsistencies instantly.\n- **⏱️ Performance Analytics:** (Coming Soon) Real-time insights into time saved via parallelism.\n\n---\n\n---\n\n## 🏎️ Performance\n\nZetten is built for speed. Benchmarks against popular task runners show it provides the fastest developer experience for incremental builds.\n\n| Metric | Tool | Time | vs Zetten |\n| :--- | :--- | :--- | :--- |\n| **Startup** | **`ztn`** | **2.08 ms** | **1.00x** |\n| *(CLI overhead)* | `just` | 2.15 ms | 1.04x |\n| | `make` | 3.85 ms | 1.85x |\n| | `poe` | 41.88 ms | 20.15x |\n| | | | |\n| **Smart Caching** | **`ztn`** | **3.49 ms** | **1.00x** |\n| *(No-op re-run)* | `just` | 4.26 ms | 1.22x |\n| | `make` | 5.63 ms | 1.61x |\n| | `poe` | 64.68 ms | 18.52x |\n\n*\u003e Benchmarks run on macOS (Apple Silicon). Startup measures `tool --version`. Smart Caching measures time to detect no input changes and skip execution.*\n\n---\n\n## 🛠️ Quick Start\nInstall Zetten:\n\n```bash\npip install zetten\n```\n\nInitiate a project:\n\n```bash\nztn init\n```\n\nFor Python script execution:\n```toml\n[tool.zetten.tasks.hello]\nscript = \"my_module:main\"  # Runs: python -c \"import my_module; my_module.main()\"\ndescription = \"Run a python function\"\n```\n\nDefine tasks in pyproject.toml:\n```toml\n[tool.zetten.tasks.lint]\ncmd = \"ruff check src\"\ninputs = [\"src/\"]\ntags = [\"ci\"]\n\n[tool.zetten.tasks.test]\ncmd = \"pytest\"\ndepends_on = [\"lint\"]\ninputs = [\"src/\", \"tests/\"]\ntags = [\"ci\"]\n\n[tool.zetten.tasks.build]\ndescription = \"Build the project\"\n# Supports Fallback Syntax: ${VAR:-default}\ncmd = \"mkdir -p ${build_dir} \u0026\u0026 python -m build --outdir ${DEST:-dist}\"\ndepends_on = [\"lint\"]\ninputs = [\"src/\"]\n```\n\nDefine tasks in zetten.toml:\n```toml\n[tasks.setup]\ncmd = \"pip install -r requirements.txt\"\n\n[tasks.lint]\ncmd = \"ruff check src\"\ninputs = [\"src/\"]\ntags = [\"ci\"]\n\n[tasks.test]\ncmd = \"pytest\"\ndepends_on = [\"setup\"]\ninputs = [\"src/\", \"tests/\"]\ntags = [\"ci\"]\n```\n\nRun tasks:\n```bash\nztn run test\nztn run lint test\n```\nZetten will only re-run tasks when their inputs change.\n\n---\n\n## ⚙️ The Variable Hierarchy\nZetten uses a deterministic three-tier system to resolve variables:\n- Tier 1 (CLI): `ztn run build -k build_dir=output` (Highest Priority)\n- Tier 2 (Config): Values defined in `[tool.zetten.vars]`\n- Tier 3 (Env): System environment variables (e.g., `$USER`, `$PATH`)\n\n---\n\n## 🚀 Running in CI\nZetten is designed for the modern CI/CD pipeline. By using Tags and Strict Mode, you can ensure your pipeline is both flexible and safe.\n```bash\n# Force a specific version and environment in CI\nztn run --tag ci -k VERSION=${GITHUB_SHA} -k ENV=prod\n```\n\nIf a foundational task fails, Zetten halts downstream execution immediately to save CI minutes and prevent cascading failures.\n\n\n## ⚙️ Configuration Model\nConfiguration is explicit by design:\n- No templating\n- No conditionals\n- No implicit behavior\n\nConfiguration lives in:\n- `pyproject.toml` (preferred)\n- `zetten.toml` (for legacy or minimal projects)\n\nIf no configuration is found, Zetten will explain how to resolve the issue.\n\n---\n\n\n## 🛠 Commands\n- `ztn run \u003ctasks\u003e` — Execute tasks with parallel dependency resolution.\n- `ztn run \u003ctask\u003e -k KEY=VAL` — Override any variable via the CLI.\n- `ztn watch \u003ctasks\u003e` — Precision re-runs on input changes.\n- `ztn graph` — Visualizes the Directed Acyclic Graph (DAG) of your tasks.\n- `ztn doctor` — Diagnoses configuration and environmental health issues.\n- `ztn init` — Interactive project setup and template generation.\n\n---\n\n## 🛡 Status\nZetten is currently in **v1.3.2**. If no configuration file is found, Zetten will provide clear instructions on how to initialize your project.\n\n---\n\n## Documentation\nFull documentation is available at: [docs.zetten.in](https://docs.zetten.in)\n\n---\n\n## 🤝 Contributing\nWe love Rust and Python! If you want to help make Zetten even faster:\n- Fork the repo.\n- Add your feature (don't forget the tests!).\n- Open a Pull Request.\n\nBuilt with ❤️ for the Python community using the speed of Rust.\n  \nPlease open an issue or discussion on GitHub before proposing large changes.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famit-devb%2Fzetten","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famit-devb%2Fzetten","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famit-devb%2Fzetten/lists"}