{"repo":"tach-org/tach","free":true,"listed":false,"github":"https://github.com/tach-org/tach","clone":"git clone https://github.com/tach-org/tach.git","description":"A Python tool to visualize + enforce dependencies, using modular architecture 🌎 Open source 🐍 Installable via pip 🔧 Able to be adopted incrementally - ⚡ Implemented with no runtime impact ♾️ Interoperable with your existing systems 🦀 Written in rust","language":"Rust","stars":2788,"topics":["ci","cli","developer-tools","open-source","package","static-code-analysis","rust","code-quality","config","dependency-management"],"license":"MIT","category":"dev-tools","readme_excerpt":"Tach Tach is a Python tool to enforce dependencies and interfaces, written in Rust. Tach is inspired by the modular monolith architecture. Docs https://github.com/user-attachments/assets/11eec4a1-f80a-4f13-9ff3-91a9760133b6 Tach can enforce: - 📋 Imports only come from declared dependencies - 🤝 Cross-module calls use the public interface - ⛓️‍💥 No cycles in the dependency graph Tach is: - 🌎 Open source - 🐍 Installable via pip - 🔧 Able to be adopted incrementally - ⚡ Implemented with no runtime impact - ♾️ Interoperable with your existing systems Getting Started Installation Setup Tach will guide you through initial project setup. Run: After an introductory message, you will see a file tree interface allowing you to interactively configure your project. Use the arrow keys to navigate, and mark each module boundary with 'Enter'. You can mark all of your top-level Python packages, or just a few that you want to track. FAQ: What is a module? If your Python code lives below your project root, or if you are working in a monorepo with multiple Python packages, mark your Python source roots using the 's' key. Enforcement Tach comes with a cli command to enforce the boundaries that you just set up! From the root of your Python project, run: You will see: You can validate that Tach is working by: 1. Removing an item from the depends on key in tach.toml , or marking it as deprecated 2. By adding an import between modules that didn't previously import from each other. Give both a tr","default_branch":null,"files":null,"tree":[],"storefront":"/r/tach-org","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/tach-org/tach/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}