Why I Still Write a Static Blog in 2026
Zero dependencies, 9KB of HTML, an 80ms build, and a ten-year test I actually run.
Every so often someone declares the static blog obsolete: no comments, no recommendations, no growth. I rewrite mine every few years, and each time it gets smaller.
The reason is not nostalgia. It is the maintenance bill.
Dependencies charge interest
A typical modern blog needs a framework, a builder, plugins, a theme, a comment service, an analytics service, and an image CDN. Each one is an upgrade, a security advisory, and a build that breaks at the worst time.
My current build has zero dependencies. A single build.mjs reads Markdown, renders HTML, and writes site/ in about 80ms. No lockfile, no node_modules, no "install fails three years later" — the failure mode that has killed more personal blogs than any hosting outage.
The numbers, because they are checkable
| Asset | Size |
|---|---|
index.html | 9.1KB |
base.css | 6.2KB |
home.css | 1.9KB |
particles.js | 4.8KB |
| Total, first paint | ~22KB |
No hydration, no client-side routing, no blocking script. On 4G, first contentful paint is around 300ms on a cold cache. That is not the result of optimization; it is the result of having nothing that can be slow.
Owning the content has a benefit nobody mentions
Keeping posts on my own disk means I can rearrange them whenever I want: recluster by topic, export to EPUB, run a local full-text search, or swap the renderer in ten years without asking a platform for an API.
An export button guarantees you can get your content out. It does not guarantee that what comes out is still usable.
I have migrated this blog across three hosting providers and two domains. Each migration took under an hour, because the artifact is just files.
The ten-year test
Once a year I do a boring exercise: clone the repository into an empty directory, run node build.mjs, open site/index.html with the network disabled, and read one post.
That test has caught two real problems: a font loaded only from a CDN (now with a system fallback), and a JavaScript dependency on localStorage that threw in private mode (now wrapped). Neither would have shown up in a build log.
If your blog cannot be read with the network off and no server, the content is less owned than you think.
What it costs
Honest costs:
- Comments need a third party. I skip them; email works.
- Search needs an index. I use a client-side filename match, which is enough for 20 posts.
- Writing involves a command line. One
npm run build, ornpm run devfor a watcher.
Each of those is a deliberate trade. I would rather spend the maintenance budget on writing than on keeping a CMS patched.
The best thing about a static blog is not speed or purity. It is that the whole system fits in my head, so I can spend the attention on the sentences.