by the1024 on 2/25/25, 4:34 PM with 62 comments
Tach lets you visualize the architecture of your Python codebase, and gives you the tools to incrementally improve it. It uses module boundaries to give teams the benefits of microservices without the deployment complexity.
If your code has been getting tangled up as your team and codebase grows, Tach helps you move back in the right direction, incrementally and quickly. You can use Tach to incrementally adopt a "modular monolith" architecture [1], for better local reasoning and smoother feature development.
Since our last Show HN (https://news.ycombinator.com/item?id=41359181) we've shipped support for layers, third party dependencies, visualizations, and more.
Tach is: * Open source (MIT) * completely free * fast (written in Rust) * in use by teams at NVIDIA, PostHog, and more.
One way Tach differs from existing systems that handle this problem (build systems, import linters, etc) is the ability to be incrementally adopted. Also, runtime speed.
If you struggle with dependencies, onboarding new engineers, or a massive codebase, Tach is for you! We built it with developers in mind - with clean integrations into Git, CI/CD, and IDEs, and the performance for it to be effective in any form factor.
[1] https://www.milanjovanovic.tech/blog/what-is-a-modular-monol...
by hansonkd on 2/26/25, 6:20 PM
> Note that this graph is generated remotely with the contents of your `tach.toml`
Isn't shipping off parts of your codebase to a 3rd party without warning in the CLI a security risk? Or in regulatory environments you get audited that your code was only stored on properly vetted services which is why some sales cycles for AI coding assistant tools are so long. It would be kind of frustrating to have something like that happen and get set back on licensing, etc.
Just from the video it doesn't seem like any sort of warning that you are shipping config files to your servers and the URL that you produced doesn't seem to have any authentication.
Maybe i am misunderstanding that functionality, but it gives me pause to use it.
by godelski on 2/26/25, 11:31 PM
So I'm really happy to see a project like this. Well done. Can't wait to see more
by stavros on 2/26/25, 8:21 PM
by drdrey on 2/26/25, 10:58 PM
uv tool install tach
rather than pip install tach
that way tach is installed system-wide but in its own isolated venvby Attummm on 2/26/25, 10:44 PM
Python is really great for quickly developing applications.
However, maintaining them is a real pain point—especially when it comes to packages and their dependencies.
Furthermore, because there isn’t a compile-time checker, function or method signatures can change unnoticed. Compilers are great for catching such issues at compile time rather than at runtime. Python does have mypy, which can play that role, but the package must support it. Currently, you are dependent on the package maintainer regarding their adherence to semver.
Maybe this project will be able to fill that hole.
by tracnar on 2/26/25, 8:12 PM
What I wanted was to work at a coarser package level. For example if you have the modules `foo.a`, `foo.b`, `bar.a`, and `bar.b`, I'd like a rule that `bar` can import from `foo` but not vice versa, without having to list or care about the submodules.
Is that something you'd want to support?
by yogurt-male on 2/27/25, 1:04 PM
by adamc on 2/26/25, 6:32 PM
by benrutter on 2/26/25, 6:55 PM
by KronisLV on 2/27/25, 3:46 PM
by jtwaleson on 2/26/25, 6:13 PM
by vednig on 2/26/25, 6:13 PM
by lijok on 2/26/25, 6:22 PM
We have well established conventions like prefixing private modules and symbols with an underscore, or declaring your public interfaces in the __init__.py file, but the Python developer decries it as "busywork", "weird" and "hard to read", so we instead use tools like this.
We can manage dependencies with protocols, a type checker and generally following SOLID principles, but the Python developer decries it as "too indirect and convoluted", so we instead use tools like this.
This is more commentary on the Python developer than this tool. Tach looks great.
by chairhairair on 2/27/25, 3:07 PM
by xtiansimon on 2/27/25, 1:21 PM
by efitz on 2/27/25, 11:44 AM
by rubenvanwyk on 2/26/25, 8:21 PM
by butterlettuce on 2/27/25, 2:47 AM
Is it “kay-leen” or “kay-lee-an”
by willgax on 2/27/25, 6:41 AM