<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="/blog/feed.css"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>lukeed · writing</title>
<link>https://lukeed.com/blog/</link>
<description>Notes, rants, and deep-dives on tooling, design, and</description>
<language>en-us</language>
<lastBuildDate>Wed, 21 Oct 2026 00:00:00 GMT</lastBuildDate>
<atom:link href="https://lukeed.com/blog/index.xml" rel="self" type="application/rss+xml"/>
<item>
<title>10,000 pages, 239 milliseconds</title>
<link>https://lukeed.com/blog/bongo-bench/</link>
<guid isPermaLink="true">https://lukeed.com/blog/bongo-bench/</guid>
<pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
<description>How a 10,000-page bongo build went from 6.9 seconds to 2.2, and a rebuild after an edit to 239 ms, with every step measured.</description>
</item>
<item>
<title>bongo, a static site generator I kept rewriting</title>
<link>https://lukeed.com/blog/bongo/</link>
<guid isPermaLink="true">https://lukeed.com/blog/bongo/</guid>
<pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
<description>bongo started in 2020, was rewritten twice, and now builds this site. It is public today.</description>
</item>
<item>
<title>JavaScript performance tips I actually use</title>
<link>https://lukeed.com/blog/js-performance/</link>
<guid isPermaLink="true">https://lukeed.com/blog/js-performance/</guid>
<pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
<description>Six habits from ten years of small, fast libraries, each one shown in real code and measured on two engines.</description>
</item>
<item>
<title>Maintaining 300 packages alone</title>
<link>https://lukeed.com/blog/maintaining-alone/</link>
<guid isPermaLink="true">https://lukeed.com/blog/maintaining-alone/</guid>
<pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
<description>How one person keeps a few hundred packages alive. What I triage, what I ignore, what I automate, and what agents changed.</description>
</item>
<item>
<title>Twenty installs, one package</title>
<link>https://lukeed.com/blog/empathic/</link>
<guid isPermaLink="true">https://lukeed.com/blog/empathic/</guid>
<pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
<description>Eleven popular packages walk up a directory tree, and together they install twenty times. empathic does the same work in one package with no dependencies.</description>
</item>
<item>
<title>Worktrees that start warm</title>
<link>https://lukeed.com/blog/lane/</link>
<guid isPermaLink="true">https://lukeed.com/blog/lane/</guid>
<pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
<description>git worktree gives you a clean checkout and a cold cache. lane clones the ignored files by reference, so a new branch builds in seconds.</description>
</item>
<item>
<title>Four Sparks and a switch</title>
<link>https://lukeed.com/blog/four-sparks/</link>
<guid isPermaLink="true">https://lukeed.com/blog/four-sparks/</guid>
<pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
<description>Field notes from wiring four DGX Sparks into one inference cluster. The fabric works now. Here is everything that cost me a day.</description>
</item>
<item>
<title>Living through the ESM transition</title>
<link>https://lukeed.com/blog/esm-transition/</link>
<guid isPermaLink="true">https://lukeed.com/blog/esm-transition/</guid>
<pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
<description>Eight years of shipping packages across the CommonJS and ES Module line, the mistakes authors still make, and whether it was worth it.</description>
</item>
<item>
<title>APIs for two kinds of readers</title>
<link>https://lukeed.com/blog/agent-apis/</link>
<guid isPermaLink="true">https://lukeed.com/blog/agent-apis/</guid>
<pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
<description>Explicit names, few options, no magic, and errors that say what to do next. An API that is good for agents turns out to be good for people too.</description>
</item>
<item>
<title>Write the README first</title>
<link>https://lukeed.com/blog/readme-driven/</link>
<guid isPermaLink="true">https://lukeed.com/blog/readme-driven/</guid>
<pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
<description>Usage examples are where developer experience gets decided, and now the agents read them too.</description>
</item>
<item>
<title>The tools that did not win</title>
<link>https://lukeed.com/blog/tools-that-lost/</link>
<guid isPermaLink="true">https://lukeed.com/blog/tools-that-lost/</guid>
<pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
<description>Taskr, pwa-cli, and freshie were each my answer to a big question in JavaScript tooling, and each one lost. Here is what they taught me.</description>
</item>
<item>
<title>comptime, for JavaScript</title>
<link>https://lukeed.com/blog/comptime/</link>
<guid isPermaLink="true">https://lukeed.com/blog/comptime/</guid>
<pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
<description>A Zig-inspired primitive that runs a function during your build and inlines the result. One import, two plugins, and no new syntax.</description>
</item>
<item>
<title>The packages nobody knows they install</title>
<link>https://lukeed.com/blog/invisible-packages/</link>
<guid isPermaLink="true">https://lukeed.com/blog/invisible-packages/</guid>
<pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
<description>Some of my smallest packages are installed billions of times a year, almost always by something else. Here is what that asks of me.</description>
</item>
<item>
<title>How to benchmark honestly</title>
<link>https://lukeed.com/blog/benchmarking/</link>
<guid isPermaLink="true">https://lukeed.com/blog/benchmarking/</guid>
<pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
<description>A benchmark is a claim, and most of the work is making sure the claim is true before you make it.</description>
</item>
<item>
<title>uvu, and why test runners are slow</title>
<link>https://lukeed.com/blog/uvu/</link>
<guid isPermaLink="true">https://lukeed.com/blog/uvu/</guid>
<pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
<description>Most of a test run is spent before your first assertion, and uvu was an experiment in skipping that part.</description>
</item>
<item>
<title>Small on purpose</title>
<link>https://lukeed.com/blog/small-on-purpose/</link>
<guid isPermaLink="true">https://lukeed.com/blog/small-on-purpose/</guid>
<pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
<description>Ten years of writing 200-byte libraries, and why I still think the size limit is a design tool, not a party trick.</description>
</item>
<item>
<title>Before Hono, there was worktop</title>
<link>https://lukeed.com/blog/worktop/</link>
<guid isPermaLink="true">https://lukeed.com/blog/worktop/</guid>
<pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate>
<description>I wrote a router for Cloudflare Workers when the platform had almost no tools. Some of its ideas became normal. Some stayed niche.</description>
</item>
<item>
<title>Polka, eight years later</title>
<link>https://lukeed.com/blog/polka/</link>
<guid isPermaLink="true">https://lukeed.com/blog/polka/</guid>
<pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate>
<description>An Express alternative in 90 lines got far more attention than it earned. Here is what it proved, what it did not, and what grew out of it.</description>
</item>
<item>
<title>Send help, I wrote another router</title>
<link>https://lukeed.com/blog/another-router/</link>
<guid isPermaLink="true">https://lukeed.com/blog/another-router/</guid>
<pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
<description>I went looking at other JavaScript routers and found my own code inside most of them.</description>
</item>
<item>
<title>File system routers are a mistake</title>
<link>https://lukeed.com/blog/file-system-routers/</link>
<guid isPermaLink="true">https://lukeed.com/blog/file-system-routers/</guid>
<pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
<description>Routes are data. Directories are a poor place to keep data.</description>
</item>
</channel>
</rss>
