<div dir="ltr"><div><div><div>I just ran &quot;raco pkg show&quot; on a fresh install, and its output is huge now.  Of course, this is inevitable when we break the distribution up into many packages, but it makes the tool unmanageable for routine use.  I&#39;d like to propose a way around this, that would also solve some of my normal usability gripes with package managers.<br>

<br></div>I propose we have &quot;package roots&quot; -- roots to the forest of package dependencies.  These are the packages the user actually wants; every other installed package is pulled in as the dependencies to support these.  Then &quot;raco pkg show&quot; can show just these packages, so in a fresh install we&#39;d just see &quot;racket&quot; or &quot;racket+gui&quot; or whatever.  We could add a flag to show everything, when necessary.<br>

<br></div>This also gives us some room to automate removal of packages the user doesn&#39;t need.  For instance, if I install package A which depends on B, C, and D, of course raco pkg install will install B, C, and D.  If I remove package A, currently B, C, and D are going to stay unless I explicitly remove them, if I recall correctly.  If we base our system on a set of root packages, then B, C, and D would be removable as soon as A is removed, if A was a root and the others were not.  We could have &quot;raco pkg remove A&quot; remove them immediately, or we could have some explicit &quot;raco pkg cleanup&quot; to remove them.  Whichever way we go, we could add a flag to &quot;raco pkg remove&quot; to swap behavior.  This would make cleaning up a lot easier when a package has many dependencies.  It would also mean upgrading a package whose dependencies have changed would allow the system to automatically clean up dependencies that aren&#39;t needed any more.<br>

<br></div>I don&#39;t know how hard it would be to implement this, but I think it would make the package system much more usable to present 90% of the interactions solely in terms of the top-level packages the user cares about, and do all the cleanup of dependency packages silently in the background when possible.<br>

<div><div><div><div><br clear="all"><div>Carl Eastlund</div>
</div></div></div></div></div>