Tach is a command-line tool for defining and enforcing architectural boundaries in Python projects.
It analyses relationships between Python modules and packages, letting developers describe the intended structure of a codebase and check that imports comply with those rules. Tach is particularly suited to modular applications and modular monoliths where uncontrolled dependencies can gradually make components difficult to separate or maintain. Projects can adopt Tach incrementally rather than having to configure an entire codebase at once.
This is free and open source software.
Key Features
- Checks that imports originate from explicitly declared module dependencies.
- Ensures cross-module calls use defined public interfaces.
- Detects cycles in the dependency graph.
- Provides an interactive
tach initinterface for defining module boundaries and source roots. - Supports layered architectures with rules governing dependencies between layers.
- Can mark selected modules as unchecked to help introduce architectural enforcement gradually.
- Supports monorepos, multiple source roots and namespace packages.
- Generates dependency graphs locally in Graphviz DOT format.
- Provides reports showing the dependencies and usages associated with individual paths.
- Can generate machine-readable JSON dependency maps.
- Supports deprecated dependencies and inline ignore directives.
- Provides domain ownership configuration for associating parts of a project with responsible teams.
- Integrates with continuous integration systems and pre-commit workflows.
- Returns a non-zero exit status when architectural violations are detected.
Website: github.com/tach-org/tach
Support:
Developer: Caelean Barnes, Evan Doyle
License: MIT License
Tach is written in Rust and Python. Learn Rust with our recommended free books and free tutorials. Learn Python with our recommended free books and free tutorials.
Related Software
| Python Linters | |
|---|---|
| Ruff | Extremely fast Python linter and code formatter |
| ty | Fast Python type checker |
| Mypy | Static type checker for Python |
| Bandit | Find security issues in Python code |
| Pylint | Static code analyser |
| wemake-python-styleguide | Flake8 plugin |
| pycodestyle | Check Python code against style conventions in PEP 8 |
| Pyflakes | Checks Python source files for errors |
| Vulture | Find dead code |
| Pyrefly | Fast type checker and language server |
| Flake8 | Wrapper around PyFlakes and pycodestyle |
| Beartype | Near-real-time hybrid runtime-static type-checker |
| Radon | Computes various metrics from Python code |
| Pyright | Full-featured, standards-compliant static type checker |
| cython-lint | Lint Cython files |
| basedpyright | Fork of pyright |
| Refurb | Modernize Python codebases |
| Pylama | Code audit tool for Python |
| Prospector | Brings together the functionality of other Python analysis tools |
| deptry | Check for dependency issues |
| Fixit | Highly configurable linting framework |
| Pyroma | Rates how well a Python project compiles |
| pydoclint | Python docstring linter |
| YALA | Yet Another Linter Aggregator |
Read our verdict in the software roundup.
Explore our carefully curated directory of recommended free and open source software, covering every major software category.The directory forms part of our extensive collection of articles for Linux enthusiasts. It includes hundreds of detailed reviews, together with free and open source alternatives to proprietary software from companies such as Google, Microsoft, Apple, Adobe, IBM, Cisco, Oracle, and Autodesk. LinuxLinks also covers interesting projects worth exploring, Linux-compatible hardware, free programming books and tutorials, and much more. Know a useful free and open source Linux application that we haven’t covered? Tell us about it using our submission form. |


Please read our Comment Policy before commenting.