If It Quacks Like a Package Manager

Some tools waddle like package managers without learning to swim.

Andrew Nesbitt

@andrewnez great read, thanks! Now I have to evaluate how my new, cough, cough, package manager for #AdaLang fits all of what you have described

TL;DR manifest file is the lockfile, dependencies are immutable through checksums, but I’m still in early stages so I probably missed tons of issues.

https://github.com/tomekw/tada

GitHub - tomekw/tada: Tomek's Ada build tool

Tomek's Ada build tool. Contribute to tomekw/tada development by creating an account on GitHub.

GitHub
@tomekw I've also got this list of design tradeoffs that you might find interesting: https://nesbitt.io/2025/12/05/package-manager-tradeoffs.html
Package Manager Design Tradeoffs

Design tradeoffs in package managers

Andrew Nesbitt
@tomekw in Generate_Deps, it only enqueues transitive deps for packages that are already cached (line 301). If a transitive dep isn't cached, it gets added to Missing_Deps but its own dependencies are never walked. So you could miss a deep conflict until after running tada install, since only the install path (line 522-526) reads the manifest unconditionally after caching.

@andrewnez this is kind of by design, as everything is explicit: only "tada install" can get you something new / communicate with outside world.

Anyway, "tada" is a wrapper around GPRBuild, which does its own conflict resolution, no point to reinvent the wheel :)

@tomekw ok cool, I think your exact versions of everything will cause a lot of community headaches around co-ordinating updates between multiple projects to upgrade a release, an inactive but heavily used project could hold the whole community back from upgrading a lower level dependency

@andrewnez also, it forces the community to solve The Dependency Problem :)

https://xkcd.com/2347/

Dependency

xkcd