Post

npmx 0.8 introduces experimental quadrant graphs: scatter plot of selected packages, traction on the x-axis (downloads, freshness, likes) and developer ergonomics on the y-axis (install size, dependencies, vulnerabilities, type support). Let's know how it works for you and how we could improve it 👋

11 reposts70 likes

Assuming you suggest smaller install size = better, encourage ESM over CJS, you must be overindexing on dependencies or aggregating stats from them too because this feels very wrong. If you ask actual people or LLMs, they wouldn’t plot it like this.

I don’t get what it represents. One of those packages has 2 releases in 6 months but you’d never guess which one. It’s not like it’s a complete project either, it has a ton of open issues. How would you balance a “done” solution vs something new in active development anyway? This shouldn’t exist imo

There are larger packages because they do more, packages that can be tree-shaked to be smaller, and larger packages with faster runtime performance. Bundle size matters mostly on the client anyway, assuming it’s not a devDependency like my example. This feature just isn’t helpful and should be gone

it seems the most important thing in this graph is install size on disk (any package that happens to bring along some cli tools who they themselves have some tech debt really tanks the ranking here) :(

Oh... install size, dependencies, vulnerabilities doesn't fit the common definition of ergonomics, so that seems like a bad label. Over fixating on install size is bad. I maintain packages that ship separate prod, debug, and node export conditions to improve ergonomics and UX. They'll take a hit.

Bundle size is more important than disk size. By shipping a default prod build we reduce the risk of shipping dev builds to prod, which is better for users, who rank higher than developers in the hierarchy of needs. I would love to see bundle size measured here and higher weighted than disk size.

I suppose we could play tricks with the package layout and try to arrange modules to share ones that are the same across dev, prod, and node builds. That would save some disk space but hurt developer ergonomics by making the installed source harder to navigate.

Dependencies is an unfortunately vague metric. Lit is published as a main `lit` pkg that composes 3 other core packages. This is so people can use the other packages, like `lit-html`, without pulling in all of Lit. So overall, we're trying to reduce dependencies, but `lit` will get dinged for it 😟