You have just read a blog post written by Jason McIntosh.
If you wish, you can visit the rest of the blog, or subscribe to it via RSS. You can also find Jason on Twitter, or send him an email.
Thank you kindly for your time and attention today.
I first discovered Webmention by its ability to serve as a federated cross-site commenting system, one free of the baggage inherent to elsewhere-centralized systems I’d tried earlier. Providing the connective tissue for no-middleman public conversations among independent websites remains a central promise of Webmention — and also describes Fogknife’s most obvious use of it — but the protocol has other, more subtle uses that may escape one’s first discovery of it.
Through its very simple and general design, Webmention allows one website to remotely — and consensually — affect the content of another site by publishing something onto itself. That is, I post something, in public, to my own website, and the mere act of this causes another website, somewhere else, to automatically update its own content in some appropriate fashion. This can achieve a variety of purposes beyond comment and conversation that I find both fascinating and kind of hard to describe in one sentence! Please indulge me, then, as I explore this concept over the length of an article here.
Generally speaking, a webmention message notifies a website that one of its constituent pages was referenced on some other part of the public web. In the simplest common case, this happens when Alice publishes a new web page that uses an ordinary HTML hyperlink to refer to a page that Bob had posted earlier. For example, she might post a page at https://alice.example.com/go-read-bob
whose content begins this way:
Thoughts on Bob’s C-SI stability theory
by Alice
My friend and colleague Bob wrote a very interesting article that everyone who follows my work should go read. Some real food for thought here.
Regarding his theory about the stability of chrono-synclastic infidibuli, I would like to add my own observation that [etc.]
Let’s pretend that that hyperlink goes to https://bobs-blog.example/my-theory
, a page on Bob’s website. Putting aside the mechanics of webmention transmission — a rich topic on its own that I shall leave outside the scope of this article — Alice’s content-management software will, on publishing this page, contact a webmention-receiver that Bob uses, letting it know that a page under its jurisdiction has received a mention from Alice’s new post. Bob’s software will confirm that this is true by loading and scanning the HTML of Alice’s post, and will then take some appropriate action, such as adding a summary of and link to Alice’s page to a “Comments and reactions” section at the bottom of Bob’s page.
There exist many variations of this basic model: perhaps Bob’s software takes a more cautious approach to public webmentions and holds it for manual approval, or perhaps Alice’s CMS knows how to mark up her post with microformats (more on which later) so that Bob’s software knows, in turn, more about the post’s author. Microformats can also mark Alice’s page as an intentional reply to Bob’s post, rather than a tangentially related page that links to it as a mere aside, and Bob’s CMS may wish to display the link back to Alice’s page differently given this fact.
Regardless of these details, I think of this as a passive webmention example. Alice published her post with the main intent of sharing her ideals with her own readership. As a beneficial side effect, it also extended to Bob the courtesy of a webmention. He is free to treat this information however he wishes. It would be a nice gesture for Bob to let his software automatically link back to Alice’s response — but if he delays or declines to do so, it would not make Alice’s link any less meaningful in the meantime.
And this, in essence, desrcribes how Fogknife has used Webmention since 2018. The “reactions” that decorate the bottom of many of my posts comprise a mix of Twitter-based responses (arriving, unbeknownst to those tweeters, via Bridgy), URLs manually entered via the “suggest a mention” form at the bottom of every Fogknife post-page, and intentional mentions sent from readers’ own Webmention-aware software. In every case, Fogknife receives these messages as webmentions, and displays them in ways appropriate to each, whether a “like”, a repost, an explicit reply, or just a generic mention. This post contains several, in a variety of flavors*, coming from a mix of sources.
You’ll note that several of that post’s reactions have my own name attached. This happens because Fogknife also sends webmentions: its underlying software looks up the Webmention capability of each and every URL contained in every new or updated post, and sends a message to each receiver it discovers. This includes links to other Fogknife articles, because I don’t have Fogknife’s webmention listener treat webmentions sent from fogknife.com
in any special way, compared to webmentions from any other source! If they are legitimate, they get published. And through this mechanism, I get to share a forward-linking “related articles” feature on my older posts, at no extra effort.
Distinct from websites that accept and publish these sorts of by-happenstance webmentions, a site can set itself up to receive webmentions that possess a more intentional edge. In these cases, a webmention means more than a passive “say, someone referred to you over here”. Instead, it declares that the source prepared the link primarily to send a webmention to the linked website. The author expects the target to read a particular intent in the link, and react in some appropriate way. I think of these as active webmentions.
This is the cool part, so I shall skip the Alice-and-Bob basics and dive right into to some real-world examples.
Through the same kind of microformats markup that can identify a link’s intent as a response to the article at the linked URL, the author of a page can declare a self-published post as their RSVP to a future event.
The upcoming-events site for the worldwide IndieWeb community (whence comes Webmention itself) accepts exactly these sorts of RSVP webmentions. Anyone using Webmention-aware publishing tools can create a public page declaring their intent to attend one of these events, naturally linking to that event’s page in the process. The Events website, on receipt of the mention, scans this new page for microformats that confirm the link’s intent as an RSVP, as well as the identity of the person submitting it.
So, for a real example, let me pause and declare my yes RSVP to , which plans to gather via teleconference that evening (New York, alas, not presenting its best face for in-person meetings at the moment).
And through no further action on my part, by the mere publishing of the page you are now reading, my RSVP has appeared on that event page. And this is where Webmention starts feeling truly magical, to me. I made a webpage addressing my human readership, expressing the notion “I plan to attend this meeting”, and daemonic servants that overheard my desires flew into action, making those plans real.
All this happens in line with core IndieWeb philosophy, where I publish my activity exclusively to my own domain, submitting nothing about my plans or desires to any company looking to make a buck off of my attention.
(A small caveat: Sending an RSVP in the middle of a long blog post like this is a bit unusual, even though it works. A typical RSVP webmention will instead originate from a very short note serving only that one purpose. But, with the NYC meetup happening only a few days from now, I had to show off a little…)
I can no longer resist getting technical for a bit, but I can at least save you a dive through this blog post’s source code to show you what the raw HTML of that RSVP paragraph looks like:
<p>So, for a real example, let me pause and declare my <em><span class=”p-rsvp“>yes</span></em> RSVP to <a href=”https://events.indieweb.org/2020/04/online-indieweb-meetup-nyc-xzPxXTK5HGbe” class=”u-in-reply-to“>the April 15 IndieWeb NYC meetup</a>, which plans to gather via teleconference that evening.</p>
Here you see two microformats in play, both implemented as plain old HTML class
attributes:
The u-in-reply-to
crouched in the hyperlink means that this post means to catch the attention of the page it links to via Webmention, identifying itself as an intentional response. This is no typically off-hand reference to another page!
The presence of a p-rsvp
class further defines this reply-post as an RSVP, and specifically a “yes” RSVP.†
Furthermore, at the top of this post — and, indeed, at the top of every single Fogknife post — lurks some HTML that looks like this:
<data class=”p-author h-card”> <data class=”p-name” value=”Jason McIntosh”></data> <data class=”u-url” value=”http://jmac.org”></data> <data class=”u-photo” value=”http://jmac.org/misc/old_unicorn.png”></data>
Just as that p-author
microformat implies by its name, this data
element identifies the author of this webpage for any software that cares to scan its content for machine-readable semantic content.
And I, the fallible human author, don’t need to keep any of this particular syntax in mind: I have set up my publishing software to always stamp that data
element at the top of every Fogknife page. I have also set up my text editor to make the addition of those RSVP-specific microformats as easy as selecting from a pull-down menu, so I don’t need to manually type all that stuff in every time I wish to invoke it.
My publishing software also takes care of the far trickier business of actually preparing and sending webmentions to every URL that appears in my post, including the IndieWeb Events one, as a side-effect of my putting it online. It is up to the software running IndieWeb Events to receive the webmention, scan this blog post, and do the thing I intend it to do.
From a programmer’s perspective, active webmentions are almost — but not quite — like calling a method on a remote API. The action that the “programmer” takes, however, involves publishing something human-readable on a public URL; the main communication does not happen in the realm of raw JSON or XML payloads passing invisibly between two computers, as with a true API. The whole time, I act as a human speaking primarily with other humans, but I intentionally sprinkle my communications with the sotto voce asides of microformats we intend for our mechanical servants to overhear and react to with swift elegance.
It appeals to me so much. I love it, and I want to see more of it.
My own most frequent practical use of active webmentions involves syndication: a request that the webmention receiver simply republish (or at least link back to) the source post in some fashion. Most commonly, the target website serves as an aggregator, collecting web pages that deal with some particular topic. A page can automatically add itself to this list by including a syndication-microformatted link to such as site, and following up with a webmention.
I know of two live examples of this, both of which Fogknife has invoked before:
Aaron Parecki’s IndieNews collects articles of interest to the IndieWeb community. At the time of this writing, it posts several articles per month, all of which come to its attention via Webmention.
Kicks Condor’s IndieWeb.xyz is an experimental Reddit-style collection of “subs”, each of which focuses on a particular topic. My first contribution to it came via its books sub, where I joined an “IndieWeb book club” activity last summer by reading Mike Monteiro’s Ruined by Design and then adding a syndication link to IndieWeb.xyz in that post’s footer.
Naturally, the post you now read also links to both of these aggregators in its sign-off, a few paragraphs below this. If you check either website (or subscribe to their RSS feeds) around the time I published this page, you will find references to this article, constructed out of microformats-based metadata parsed out of this post via the same mechanisms that the RSVP sites use.
Last week, gathering notes for this article, I asked the IndieWeb chat for more examples of sites using active webmentions. In this way I learned about The Web We Want, a project run by representatives of several browser manufacturers as a way to collect public opinion on future browser features. Anyone can post features they’d like to see, and then people can show their support for a specific proposal by sending “bookmark” or “like”-flavored webmention to its detail page. (You can also just tweet about it, according to the site, and I presume that gets turned into a webmention via Bridgy.)
While not something I felt immediately drawn to participate in, this nonetheless makes me happy to see. I had not at all anticipated the use of Webmention as a polling medium, and seeing it used that way proves my hypothesis that the technology has potential for a vast array of creative, wonderful uses across the web, in a spectrum wider than I can currently imagine.
Even though its use remains quite humbly obscure in mid-2020, I support Webmention because I love the things that I know it can do — and because I have no idea what else it can do, because nobody’s done it yet. I want to help its future innovators discover Webmention and get inspired too, so I can start selfishly enjoying the further magic they end up bringing to the open web.
This article was also posted to IndieNews, and to the “indieweb” section of Indieweb.xyz.
* At the time of this writing, it also makes plain a bug that my blogging software has when trying to display user-avatar images that have changed since the original receipt of their associated webmentions; this explains all the broken images. My work this spring sees me making improvements to my own webmention-handling software, and I hope to share more about in in the coming months.
† Some references for this magic: IndieWeb Wiki’s page on RSVP; Microformats.org documentation on h-entry
properties. (And note also that every Fogknife post is wrapped in an h-entry
microformat.)
Next post: Masks are clothes now, and we should all wear them
Previous post: IFTF has some paid-project requests for proposals
To share a response that links to this page from somewhere else on the web, paste its URL here.