Aug 1, 2026

./blog.sh — a minimalist blogging system

./blog.sh is a blog engine you run from a terminal. Posts are files, the site is a build, and the comments live on the Fediverse — there is no database anywhere in that sentence.

Three things make it different from the other five hundred static site generators:

  • No database. One post is one JSON file. Backup is tar, history is git, leaving is a for loop.
  • No dependencies. Ruby stdlib and bash. No gems, no npm, no lockfile. Clone and run.
  • No comment system. Every post is announced on Mastodon or Bluesky; replies to that announcement are the comments, loaded by your browser from the public API.

This is what it looks like:

./blog.sh in light mode
Light mode
./blog.sh in dark mode
Dark mode

Try it in four lines:

git clone https://github.com/DanielSnor/blog.sh.git
cd blog.sh && cp config/site.yml.example config/site.yml
./blog.sh add
./blog.sh preview

Everything else on this site is a chapter, not a feature list: authoring · markdown · deploy · comments · appearance · migration · i18n · philosophy. The reference manual is the README, and the whole Markdown dialect fits on one page — generated by the parser itself, so it can't lie.

MIT licensed. Source, issues and the occasional opinion: github.com/DanielSnor/blog.sh

Comments