{"data":{"slug":"pydoit-doit","name":"doit","tagline":"CLI task management & automation tool","github_url":"https://github.com/pydoit/doit","owner":"pydoit","repo":"doit","owner_avatar_url":"https://avatars.githubusercontent.com/u/6440864?v=4","primary_language":"Python","stars":2073,"forks":192,"topics":["build-automation","build-system","build-tool","cli","data-pipeline","data-science","hacktoberfest","python","task-runner","workflow","workflow-automation","workflow-management"],"archived":false,"github_pushed_at":"2026-02-12T12:57:06+00:00","maintenance_label":"Slowing","url":"https://www.graphcanon.com/tools/pydoit-doit","markdown_url":"https://www.graphcanon.com/tools/pydoit-doit.md","api_url":"https://www.graphcanon.com/api/graphcanon/tools/pydoit-doit","graph_url":"https://www.graphcanon.com/api/graphcanon/graph?tool=pydoit-doit","description":"CLI task management & automation tool","homepage_url":"http://pydoit.org","license":"MIT","open_issues":93,"watchers":46,"ai_summary":null,"readme_excerpt":"================\nREADME\n================\n\n.. display some badges\n\n.. image:: https://img.shields.io/pypi/v/doit.svg\n    :target: https://pypi.python.org/pypi/doit\n\n.. image:: https://github.com/pydoit/doit/actions/workflows/ci.yml/badge.svg?branch=master\n    :target: https://github.com/pydoit/doit/actions/workflows/ci.yml?query=branch%3Amaster\n\n.. image:: https://codecov.io/gh/pydoit/doit/branch/master/graph/badge.svg?token=wxKa1h11zn\n    :target: https://codecov.io/gh/pydoit/doit\n\n.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.4892136.svg\n   :target: https://doi.org/10.5281/zenodo.4892136\n\n\npydoit - automation tool\n=========================\n\n**Define tasks in Python. Run only what changed.**\n\n*doit* is a task management & automation tool like ``make``, but in pure Python.\nIt tracks file dependencies, caches results, and skips tasks that are already\nup-to-date. No DSL, no YAML - just Python functions.\n\n\nQuick Example\n=============\n\nCreate a ``dodo.py``:\n\n.. code:: python\n\n  def task_hello():\n      \"\"\"create a greeting file\"\"\"\n      return {\n          'actions': ['echo \"Hello from doit\" > hello.txt'],\n          'targets': ['hello.txt'],\n          'clean': True,\n      }\n\n  def task_shout():\n      \"\"\"convert greeting to uppercase\"\"\"\n      return {\n          'actions': ['tr a-z A-Z < hello.txt > shout.txt'],\n          'file_dep': ['hello.txt'],\n          'targets': ['shout.txt'],\n          'clean': True,\n      }\n\nRun it:\n\n.. code:: console\n\n  $ pip install doit\n  $ doit\n  .  hello\n  .  shout\n  $ doit            # nothing to do - already up-to-date\n  -- hello\n  -- shout\n  $ doit clean      # remove generated files\n  $ doit            # runs again\n  .  hello\n  .  shout\n\n\nKey Features\n============\n\n- **Incremental builds** - tracks file dependencies and targets,\n  re-runs only what changed\n- **DAG execution** - tasks run in correct dependency order\n- **Python-native** - tasks are plain Python dicts and functions,\n  use any library\n- **Parallel execution** - run independent tasks concurrently\n  (multiprocessing or threading)\n- **Subtask generation** - ``yield`` multiple tasks from a single function\n- **Computed dependencies** - ``calc_dep`` for dynamic dependency graphs\n- **Plugin architecture** - extensible commands, reporters, backends,\n  and task loaders\n\n\nLinks\n=====\n\n - Website & docs - https://pydoit.org\n - Project management on github - https://github.com/pydoit/doit\n - Discussion group - https://groups.google.com/forum/#!forum/python-doit\n - X/twitter - https://x.com/pydoit\n\n\n\nlicense\n=======\n\nThe MIT License\nCopyright (c) 2008-2026 Eduardo Naufel Schettino\n\nsee LICENSE file\n\n\nFinancial contributions on `Open Collective <https://opencollective.com/doit/tiers>`_\n\n.. image:: https://opencollective.com/doit/tiers/backers.svg?avatarHeight=50\n    :target: https://opencollective.com/doit/tiers","github_created_at":"2014-02-14T22:21:23+00:00","created_at":"2026-07-15T10:49:15.038062+00:00","updated_at":"2026-07-15T10:49:17.728452+00:00","categories":[{"slug":"computer-vision","name":"Computer Vision","url":"https://www.graphcanon.com/categories/computer-vision","markdown_url":"https://www.graphcanon.com/categories/computer-vision.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/computer-vision"},{"slug":"data-retrieval","name":"Data & Retrieval","url":"https://www.graphcanon.com/categories/data-retrieval","markdown_url":"https://www.graphcanon.com/categories/data-retrieval.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/data-retrieval"},{"slug":"developer-tools","name":"Developer Tools","url":"https://www.graphcanon.com/categories/developer-tools","markdown_url":"https://www.graphcanon.com/categories/developer-tools.md","api_url":"https://www.graphcanon.com/api/graphcanon/categories/developer-tools"}],"tags":[{"slug":"build-automation","name":"build-automation"},{"slug":"build-system","name":"build-system"},{"slug":"build-tool","name":"build-tool"},{"slug":"cli","name":"cli"},{"slug":"data-pipeline","name":"data-pipeline"},{"slug":"data-science","name":"data-science"},{"slug":"hacktoberfest","name":"hacktoberfest"},{"slug":"python","name":"python"}],"trust":{"provenance":{"is_fork":false,"github_id":16851127,"owner_type":"Organization","methodology":"github_public_v1","parent_repo":null,"near_duplicate_slugs":[]},"computed_at":"2026-07-15T10:49:15.991Z","maintenance":{"label":"Slowing","score":36,"methodology":"github_public_v1","releases_90d":0,"days_since_push":152,"last_release_at":null},"security_summary":{"status":"no_lockfile","scanner":null,"low_count":0,"high_count":0,"last_scan_at":"2026-07-15T10:49:16.434Z","medium_count":0,"scan_profile":"none","critical_count":0}},"capability_facts":{"scan":{"source":"repo_scan","observed_at":"2026-07-15T10:49:15.754Z"},"has_cli":{"value":true,"source":"pyproject.toml:[project.scripts]","observed_at":"2026-07-15T10:49:15.754Z"},"languages":{"value":["python"],"source":"github.language+pyproject.toml","observed_at":"2026-07-15T10:49:15.754Z"},"license_spdx":{"value":"MIT","source":"github.license","observed_at":"2026-07-15T10:49:15.754Z"}}}}