A taxonomy of package roles across all kinds of package managers, inspired by Sajaniemi's roles of variables. Just as variables have behavioral roles (stepper, gatherer, flag), packages play distinct roles: Application, Library, Framework, Plugin, Wrapper, Polyfill, Compiler, Types, Generator, Data, Asset, Schema, Meta, Runtime, Service, Driver, and Infrastructure. Each role describes how a package fits into a system — its relationship to calling code, its lifecycle, and its risk profile. Understanding these roles has practical implications: data packages shouldn't be pinned tightly, framework upgrades carry more risk than library upgrades, and types/compilers/generators rarely belong in production dependencies. Some packages occupy multiple roles simultaneously, and the intersection is often more informative than either role alone.

11m read timeFrom nesbitt.io
Post cover image
Table of contents
Code execution #Build and development #Artefacts #Environment #
4 Impressions