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.sh | Hugo | Jekyll | Ghost | WordPress | |
|---|---|---|---|---|---|
| Database | none | none | none | required | required |
| Dependencies | Ruby stdlib* | one binary | gem ecosystem | Node + MySQL | PHP + MySQL |
| Comments | Fediverse, built in | bring your own | bring your own | native + members | native + plugins |
| Deploy | 6 backends, guarded | bring your own | bring your own | it's a server | it's a server |
| Multiple authors | no | yes | yes | yes | yes |
| Plugins / ecosystem | no, on purpose | huge | huge | good | unbeatable |
| Community size | population: 1 | enormous | large | large | a third of the web |
| 10,000-post build | slower | seconds, wins easily | slow | n/a | n/a |
| Newsletter | no | no | no | yes, native | via 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