Migrated away from Micro.blog
Hello again 👋 It’s been over a year since I last wrote anything here, and I figured it was about time I got back into the habit. But before I could start writing again, I had some work to do: migrating away from Micro.blog.
This post covers why I moved, what I moved to, what I learned along the way, and how you can use the same tools—zs and the zs-blog-template—to run your own blog too.
Why did I migrate away from Micro.blog?
Micro.blog served me well for a long time. It’s a thoughtfully designed platform, easy to use, and well supported by @manton. But I eventually realized that I wasn’t really using most of its features.
- I rarely used the “micro” part of “micro-blogging.”
- When I wrote full posts, I ran into friction and limitations in how I wanted to structure things.
- And ultimately, I was paying for a service I didn’t really need anymore.
To be clear: Micro.blog is a great product. But for me, it wasn’t the right fit long-term.
What did I migrate to?
I moved to zs, a minimalist command-line static site generator I wrote. zs is designed around simplicity, performance, and extensibility, and I’ve been using it successfully to power a number of sites, including:
- zs — the main site and demo for zs itself.
- Yarn.social — a community project around the Yarn.social ecosystem.
- Salty.im — an e2e encrypted messaging specification.
- A few small business sites for family: Opus18 and Prissington Shelties.
…and many others.
For this blog, I built on top of zs using the zs-blog-template, which provides a solid starter kit for anyone who wants to run a clean, fast, static blog.
Lessons learned during migration
The migration itself wasn’t painless. I discovered the hard way that Micro.blog’s Hugo export didn’t work well anymore. The exported site was riddled with errors due to deprecated Hugo features and breaking configuration changes. In the end, I had to export everything to plain HTML, clean it up, and serve it directly.
From there, I started building out blog features in zs using small utilities:
- A utility to list posts from the
posts/
directory. - A utility to generate tag pages.
- A utility to build archives.
- And other helpers to make authoring and publishing easier.
This process taught me two things:
- It’s surprisingly easy to build a working blog with zs and a few POSIX shell scripts.
- But as the site grew, build times got slower and slower.
Fixing performance
At first, zs was repeatedly scanning directories and re-reading frontmatter for every utility. For a blog with lots of posts, this turned into an O(n²) problem.
To fix this, I built an indexing and query system directly into zs. That way, utilities could query metadata directly instead of repeatedly traversing the filesystem.
The difference was night and day:
Before (naïve approach):
1$ time for f in posts/*.md; do zs vars "$f" title; done
2real 0m0.416s
After (using zs index):
1$ time zs query list | jq -r '.[].title'
2real 0m0.039s
That’s roughly a 10x speedup 🎉. Build times for this blog dropped from ~1 minute down to ~20 seconds, which is perfectly reasonable for my workflow.
How you can use zs and zs-blog-template
If you’re curious to try zs for your own blog or site, here’s how to get started:
-
Clone the starter template
1git clone https://git.mills.io/prologic/zs-blog-template myblog 2cd myblog
-
Create new posts with
zs newpost
The template comes with a utility that scaffolds new posts with the right frontmatter:1zs newpost "My First Post"
-
Customize the look and feel
The template ships with a clean design, but you can easily tweak the CSS, layout, or add new utilities. -
Deploy anywhere
Since zs outputs static files, you can host your blog on any web server—Caddy, Nginx, Apache, GitHub Pages, or even a Raspberry Pi at home.
The demo site shows what the default template looks like. From there, you can extend it however you like.
Conclusion
Migrating away from Micro.blog wasn’t an easy decision, but it was the right one for me. I learned a lot about static site generation, performance tuning, and the power of keeping tools simple.
Now that my blog is running on zs with the zs-blog-template, I’m excited to get back into writing—and to keep improving zs along the way.
If you’re looking for a fast, flexible, and hacker-friendly way to run your own blog, give zs a try. 🚀