What ./blog.sh doesn't do
A feature list tells you what a tool wants to be. This is the other list.
Features that aren't there — and aren't coming
- Multiple authors — the engine is built around one person's workflow, and every multi-author feature taxes the single author with roles, permissions and attribution UI
- Plugins — a plugin API is a promise to keep internals stable forever; a tool this small should be forked, not extended
- A WYSIWYG editor — your
$EDITORtook you years to configure; I'm not going to compete with it in a textarea - Its own comment system — storage, moderation, spam, GDPR, and a database, all to rebuild what the Fediverse already does in public
- Themes as downloadable packages — seven colour keys and your own banner get you further than a theme marketplace, at zero marketplace
Unchecked checkboxes, as rendered by the engine's own task lists. They'll stay that way.
What the parser refuses
The Markdown dialect turns things down too — each considered, each rejected, reasons attached:
- Underscore italics (
_like this_)- underscores live inside ordinary text:
file_names,snake_case - the cost of supporting them lands on everyone who never uses them, as surprise italics mid-identifier
- underscores live inside ordinary text:
- Code blocks indented with spaces
- collides head-on with nested-list indentation
- the backtick fence says what it means
- Headings underlined with
===- a line of dashes already means a horizontal rule and the frontmatter delimiter
- one more meaning for the same characters is one too many
- Nested quotes (
>>), reference links ([text][id]), footnotes- each adds parser states whose main output, in practice, is surprising rendering of innocent text
Notice the pattern: it's the same reason every time. The cost of a feature lands on the people who don't use it — as complexity, as surprise, as one more way for plain text to mean something you didn't intend. A feature has to clear that bar, not just be useful to someone, somewhere, occasionally.
The upside of no
Every "no" above is load-bearing. No plugins is why a fresh clone runs. No WYSIWYG is why the whole thing works over SSH. No own comments is why there's no database, and no database is why backup is tar and migration is a for loop.
This list isn't an apology. It's most of the design.

Comments