<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JavaScript |</title><link>https://mikelayuso.com/tags/javascript/</link><atom:link href="https://mikelayuso.com/tags/javascript/index.xml" rel="self" type="application/rss+xml"/><description>JavaScript</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 17 May 2026 00:00:00 +0000</lastBuildDate><image><url>https://mikelayuso.com/media/icon_hu_b0970716f810afd6.png</url><title>JavaScript</title><link>https://mikelayuso.com/tags/javascript/</link></image><item><title>Microdependency Hell: The Cost of Package Culture</title><link>https://mikelayuso.com/blog/microdependency-tax/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://mikelayuso.com/blog/microdependency-tax/</guid><description>&lt;p&gt;One thing I highlighted in my
almost as an afterthought: the Rust binary ships with &lt;em&gt;no runtime dependencies&lt;/em&gt;. Download it, run it, nothing to install. The more time I spend across C/C++, Rust, and Godot, the more that property looks less like a convenience and more like a design goal worth chasing on purpose, because the alternative has a cost.&lt;/p&gt;
&lt;h2 id="the-incident"&gt;The incident&lt;/h2&gt;
&lt;p&gt;A perfect example in the JavaScript ecosystem is what happened on March 22, 2016. Azer Koçulu published a small npm package called &lt;code&gt;left-pad&lt;/code&gt;, 17 lines that padded strings on the left. When Kik Messenger wanted the package name &lt;code&gt;kik&lt;/code&gt; for their own use, npm sided with the company and transferred ownership away from Koçulu. In protest, he unpublished all 273 of his packages.
When &lt;code&gt;left-pad&lt;/code&gt; vanished, Babel and React Native broke. Thousands of projects at Facebook, PayPal, Netflix, Spotify and many others stopped building. Not because of a sophisticated attack. Because a justifiably angry maintainer deleted code he had written for free.&lt;/p&gt;
&lt;h2 id="how-the-ecosystem-got-here"&gt;How the ecosystem got here&lt;/h2&gt;
&lt;p&gt;npm hosts over 4 million packages, not a measure of creativity, but of incentive. Each package is its own GitHub repo, its own resume line, and its own download counter. The ecosystem rewards fragmentation, because each successful package is a credential with a counter attached, and the ecosystem has never learned to care what the counter is counting. The result is packages like &lt;code&gt;is-odd&lt;/code&gt;, which checks whether a number is odd, depending on &lt;code&gt;is-number&lt;/code&gt;, depending on &lt;code&gt;kind-of&lt;/code&gt;. Three packages, three maintainers, three supply chain entry points for a question you can answer in one line.
A typical React or Next.js app pulls between 1,200 and 1,800 transitive dependencies. No human reads them. When I&amp;rsquo;m building something in Godot, I don&amp;rsquo;t &lt;code&gt;npm install physics&lt;/code&gt;, the engine ships with it, one curated trust boundary maintained by a team. That contrast is hard to unsee.&lt;/p&gt;
&lt;h2 id="the-real-risk"&gt;The real risk&lt;/h2&gt;
&lt;p&gt;Tools like Snyk scan for &lt;em&gt;known&lt;/em&gt; vulnerabilities, by definition, ones that have already burned someone else. What they don&amp;rsquo;t catch: a package three levels deep maintained by someone who hasn&amp;rsquo;t logged in years, whose npm account gets taken over by an untrusted maintainer, who publishes a new version with a helpful postinstall script that reads your environment variables.
This isn&amp;rsquo;t hypothetical. In 2018, &lt;code&gt;event-stream&lt;/code&gt; was handed off to a stranger who volunteered to help, then used that access to exfiltrate Bitcoin private keys, downloaded 2 million times a week for two months before anyone noticed. In 2022, the maintainer of &lt;code&gt;colors&lt;/code&gt; and &lt;code&gt;faker&lt;/code&gt; pushed a self-sabotaging update as a protest. No hack, no zero-day. A maintainer in a bad mood, 20 million weekly downloads, production builds broken overnight.
These aren&amp;rsquo;t bugs in the trust model. They &lt;em&gt;are&lt;/em&gt; the trust model.&lt;/p&gt;
&lt;h2 id="the-correction"&gt;The correction&lt;/h2&gt;
&lt;p&gt;Sindre Sorhus, the person more responsible than anyone for the small-modules culture, now publicly argues for fewer dependencies and bigger standard libraries. Node already added native fetch, a test runner, and SQLite without a single install in the last few years. The platform is starting to absorb what fragmentation spread.
The instinct to keep surface area small, to understand what runs in your process, isn&amp;rsquo;t NIH (Not Invented Here) syndrome. It&amp;rsquo;s engineering. The JavaScript ecosystem spent 15 years treating it as optional. The supply chain incidents are the cost.&lt;/p&gt;</description></item></channel></rss>