DOES A BLOG HAVE TO BE HTML?

2024-05-03

Terence Eden wrote about his recent experience of IndieWebCamp Brighton, in
which he mentioned that somebody - probably Jeremy Keith - had said,
presumably to provoke discussion:
> A blog post doesn't need a title.
Terence disagrees, saying:
> In a literal sense, he was wrong. The HTML specification makes it clear that
the  element is mandatory. All documents have title.
But I think that's an overreach. After all, where is it written that a blog
must be presented in HTML?

NON-HTML BLOGS

There are plenty of counter-examples already in existence, of course:
* Terence's own no-ht.ml (now offline) demonstrated that a website needn't use
HTML (no-ht.ml technically does use HTML, but the same content could easily be
delivered with an appropriate non-HTML MIME type if he'd wanted.). This
inspired my own "page with no code", which worked by hiding content in CSS and
loading the CSS using HTTP headers (Again, I suppose this technically required
HTML, even if what was delivered was an empty file!).
* theunderground.blog's content, with the exception of its homepage, is
delivered entirely through an XML Atom feed. Atom feed entries do require
s, of course, so that's not the strongest counterexample!
* This blog is available over several media other than the Web. For example,
you can read this blog post:

     in Gemtext (Gemtext is basically Markdown, and doesn't require a title.)

     via Gemini at gemini://danq.me/posts/does-a-blog-have-to-be-html
     via Spartan at spartan://danq.me/posts/does-a-blog-have-to-be-html

in plain text (Plain text obviously doesn't require a title.)

     via Gopher at gopher://danq.me/1/posts/does-a-blog-have-to-be-html
     via Finger at finger://does-a-blog-have-to-be-html@danq.me

But perhaps we can do better...

A TOTALLY TEXT/PLAIN BLOG

We've looked at plain text, which as a format clearly does not have to have a
title. Let's go one step further and implement it. What we'd need is:
* A webserver configured to deliver plain text files by preference, e.g. by
adding directives like index index.txt; (for Nginx). (There's no requirement
that default files served by webservers are HTML, although it's highly-unsual
for that not to be the case.)
* An index page listing posts by date and URL. Most browser won't render these
as "links" so users will have to copy-paste or re-type them, so let's keep
them short,
* Pages for each post at those URLs, presumably without any kind of "title"
(just to prove a point), and
* An RSS feed: usually I use RSS as shorthand for all feed types, but this
time I really do mean RSS and not e.g. Atom because RSS, strangely, doesn't
require that an <item> has a <title>!

I've implemented it! it's at textplain.blog.

In the end I decided it'd benefit from being automated as sort-of a basic
flat-file CMS, so I wrote it in PHP. All requests are routed by the webserver
to the program, which determines whether they're a request for the homepage,
the RSS feed, or a valid individual post, and responds accordingly.

It annoys me that feed discovery doesn't work nicely when using a Link:
header, at least not in any reader I tried. But apart from that, it seems
pretty solid, despite its limitations. Is this, perhaps, an argument for my
.well-known/feeds proposal?

Anyway, I've open-sourced the entire thing in case it's of any use to anybody
at all, which is admittedly unlikely! Here's the code.

LINKS
</pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://shkspr.mobi/"">Terence Eden</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://shkspr.mobi/blog/2024/05/49911/"">Terence Eden's (titleless) blog post</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://adactio.com/"">Jeremy Keith</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://shkspr.mobi/blog/2022/12/you-dont-need-html/"">Terence's blog post about no-ht.ml</a></pre></td></tr><tr><td><i class="fa fa-folder-o"></i></td><td><pre><a href="?url=gopher%3A%2F%2Fdanq.me%3A70%2F1%2Fposts%2Fnocode"">My blog post about "the page with no code"</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://theunderground.blog/"">Theunderground.blog</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="gemini://danq.me/posts/does-a-blog-have-to-be-html"">Gemini://danq.me/posts/does-a-blog-have-to-be-html</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="spartan://danq.me/posts/does-a-blog-have-to-be-html"">Spartan://danq.me/posts/does-a-blog-have-to-be-html</a></pre></td></tr><tr><td><i class="fa fa-folder-o"></i></td><td><pre><a href="?url=gopher%3A%2F%2Fdanq.me%3A70%2F1gopher%3A%2F%2Fdanq.me%2F1%2Fposts%2Fdoes-a-blog-have-to-be-html"">Gopher://danq.me/1/posts/does-a-blog-have-to-be-html</a></pre></td></tr><tr><td><i class="fa fa-folder-o"></i></td><td><pre><a href="?url=gopher%3A%2F%2Fdanq.me%3A70%2F1finger%3A%2F%2Fdoes-a-blog-have-to-be-html%40danq.me"">Finger://does-a-blog-have-to-be-html@danq.me</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://textplain.blog/"">Textplain.blog</a></pre></td></tr><tr><td><i class="fa fa-folder-o"></i></td><td><pre><a href="?url=gopher%3A%2F%2Fdanq.me%3A70%2F1https%3A%2F%2Ftextplain.blog%2F"">https://textplain.blog/</a></pre></td></tr><tr><td><i class="fa fa-folder-o"></i></td><td><pre><a href="?url=gopher%3A%2F%2Fdanq.me%3A70%2F1%2Fposts%2Ftest-your-site-in-lynx"">My blog post promoting the testing of websites in Lynx</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://textplain.blog/feed-discovery"">My post on textplain.blog about it being annoying that feed discovery doesn't work via HTTP Link: tags</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://danq.me/2023/08/23/well-known-feeds/"">My</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://danq.me/2023/08/23/well-known-feeds/"">.well-known/feeds</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://danq.me/2023/08/23/well-known-feeds/""> Proposal</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://textplain.blog/open-source"">My post on textplain.blog about open-sourcing textplain.blog</a></pre></td></tr><tr><td><i class="fa fa-external-link"></i></td><td><pre><a href="https://github.com/dan-Q/textplain.blog"">Source code for textplain.blog on Github</a></pre></td></tr></table>

    </section>
</body>

</html>