Just thought I should (Web)Mention…

I’ve been building Publ with IndieWeb principles in mind. One of the things I’m playing with right now is adding in very basic support for WebMention.

There’s a few different ways to go about doing it. For now, on my own sites I’m just using webmention.io as a third-party endpoint, because that’s easy enough for me to set up, and I don’t want to be in a position of adding a greater setup/support burden to the average theoretical Publ user who just wants to get a website up and running. I will certainly add this into any documentation improvments for the getting started guide, of course. Basically I think people should be able to use whatever WebMention endpoint that they want, just as people can use whatever external comment system they want (Disqus, IntenseDebate, etc.). There’s also an interesting Disqus-like WebMention broker that is currently in very early development and lets you simply embed an externally-hosted Javascript-included WebMention feed onto your page; unfortunately it’s not open to the general public just yet but it’s definitely one to keep an eye on.

I’m not sure if I’d want it to completely replace Disqus though; I can easily go both ways on that sort of thing. And in the meantime, there’s also Bridgy which will forward WebMention stuff on to Disqus, which I might end up setting up as well. (That also has the dubious benefit of pulling in twitter-based responses among other things as well.)

As far as sending WebMention goes, that side of things looks a lot simpler, and I already have a basic plan forward, although that will definitely require writing code. Also at the moment the plan forward means also re-sending the mentions out every time an item gets re-indexed, and on Heroku deployments in particular that will get quite spammy. I’m thinking that for that stuff it might be okay to recommend an optional configuration of having a persistent database for outgoing WebMentions; fortunately that’s not a thing that will be subject to schema changes since all it really needs to track is:

  • The entry ID
  • The outgoing URL
  • Whether it’s been sent successfully (or a general status code I guess)
  • When the mention was most recently attempted

I’m not really clear on what the intention is supposed to be yet on re-sending mentions; like, once a mention gets sent successfully, can we assume that the mention will always be remembered down the road and should never be re-sent? Is it okay to re-send mentions and assume that the recipient will automatically filter out duplicates? What happens as a blog grows to a few thousand entries, and links to blogs that don’t support WebMentions originally but later we want to try re-sending retroactive mentions in case a site has gained that ability? And so on.

Or maybe the outgoing mentions should be done as a log? Like, we just look at the most recent <source,target> pair that matches, and if the code was a failure and was more than, say, a week ago, we try again?

Update: Per the spec it seems that the expectation is that any time an entry updates for whatever reason it should re-send all its pings. Well, I guess that means I’m not going to worry about persisting information about pings that have been sent (although obviously I’ll de-dupe them on each update).

Anyway, one neat thing I learned about from webmention.io is an emerging cross-site authentication mechanism via IndieAuth, which seems to be a really nice way of supporting OAuth without requiring a crapton of OAuth endpoints! I think that gives me a mechanism for going forward on my long-planned-but-never-quite-thought-out friends-only/ACL stuff. (Although that also requires some thought when it comes to persistence. Gahhhhh persistence keeps on rearing its ugly head….)

Well, whatever. This seems to be a great time to be developing software along these principles that I’ve always held, and it’s great seeing this critical mass forming around these things I’ve been espousing on and off since 2001 or so.

(Now if only I had the spoons to also develop a heckin' next-gen RSS/Atom reader…)