Aug 1, 2026

Built for one blog on purpose

This is not a general-purpose engine, and pretending otherwise would waste your afternoon.

./blog.sh was built around exactly one deployment: one author, one archive, a terminal, and comments on the Fediverse. That's usually the part a project hides on the "about" page. I'd rather lead with it, because it's also the explanation for everything opinionated about this tool. A general-purpose generator solves the general case and then makes you configure your way back to your specific one. This engine started at the specific case and never left.

So here's the honest table:

./blog.shHugoJekyllGhostWordPress
Databasenonenonenonerequiredrequired
DependenciesRuby stdlib*one binarygem ecosystemNode + MySQLPHP + MySQL
CommentsFediverse, built inbring your ownbring your ownnative + membersnative + plugins
Deploy6 backends, guardedbring your ownbring your ownit's a serverit's a server
Multiple authorsnoyesyesyesyes
Plugins / ecosystemno, on purposehugehugegoodunbeatable
Community sizepopulation: 1enormouslargelargea third of the web
10,000-post buildslowerseconds, wins easilyslown/an/a
Newsletternononoyes, nativevia plugins

(the asterisk is documented — one optional widget needs rexml on some distros)

Read the losing rows first; that's what they're there for. Hugo on ten thousand posts is dramatically faster, and if raw build speed on a huge archive is your constraint, take Hugo and my blessing. Ghost has a real newsletter business built in. WordPress has an ecosystem nobody catches up to, including a plugin for whatever you just thought of. A comparison table where the home team wins every row isn't a comparison — it's an ad with borders.

What the table can't show is the shape of the wins. "No database" isn't one row — it's why backup is tar, why hosting is any static server, why nothing needs a security patch on a Tuesday. "Comments built in" means the announcement toot, the reply thread and the unpublish cleanup are one feature, not three services on three bills.

Who this is for: one writer with a terminal, an archive they want to own outright, and an account on the Fediverse or Bluesky.

Who this isn't for: teams, clients, editorial workflows, anyone who needs a web admin, anyone whose readers must comment without leaving the page.

Built for exactly one blog — which is why it's this opinionated, and why it fits the blogs shaped like it unusually well.

Comments