Over 1 million Webmentions will have been sent across the internet since the specification was made a full Recommendation by the W3C—the standards body that guides the direction of the web—in early January 2017. That number is rising rapidly, and in the last few weeks I’ve seen a growing volume of chatter on social media and the blogosphere about these new “mentions” and the people implementing them.
So what are Webmentions and why should we care?
While the technical specification published by the W3C may seem incomprehensible to most, it’s actually a straightforward and extremely useful concept with a relatively simple implementation. Webmentions help to break down some of the artificial walls being built within the internet and so help create a more open and decentralized web. There is also an expanding list of major web platforms already supporting Webmentions either natively or with easy-to-use plugins (more on this later).
Put simply, Webmention is a (now) standardized protocol that enables one website address (URL) to notify another website address that the former contains a reference to the latter. It also allows the latter to verify the authenticity of the reference and include its own corresponding reference in a reciprocal way. In order to understand what a big step forward this is, a little history is needed.The rise of @mentions
By now most people are familiar with the ubiquitous use of the “@” symbol in front of a username, which originated on Twitter and became known as @mentions and @replies (read “at mentions” and “at replies”). For the vast majority, this is the way that one user communicates with other users on the platform, and over the past decade these @mentions, with their corresponding notification to the receiver, have become a relatively standard way of communicating on the internet.Tweet from Wiz Khalifa
Many other services also use this type of internal notification to indicate to other users that they have been referenced directly or tagged in a post or photograph. Facebook allows it, so does Instagram. Google+ has a variant that uses + instead of @, and even the long-form article platform Medium, whose founder Ev Williams also co-founded Twitter, quickly joined the @mentions party.The biggest communications problem on the internet
If you use Twitter, your friend Alice only uses Facebook, your friend Bob only uses his blog on WordPress, and your pal Chuck is over on Medium, it’s impossible for any one of you to @mention another. You’re all on different and competing platforms, none of which interoperate to send these mentions or notifications of them. The only way to communicate in this way is if you all join the same social media platforms, resulting in the average person being signed up to multiple services just to stay in touch with all their friends and acquaintances.
Given the issues of privacy and identity protection, different use cases, the burden of additional usernames and passwords, and the time involved, many people don’t want to do this. Possibly worst of all, your personal identity on the internet can end up fragmented like a Horcrux across multiple websites over which you have little, if any, control.
Imagine if AT&T customers could only speak to other AT&T customers and needed a separate phone, account, and phone number to speak to friends and family on Verizon. And still another to talk to friends on Sprint or T-Mobile. The massive benefit of the telephone system is that if you have a telephone and service (from any one of hundreds or even thousands of providers worldwide), you can potentially reach anyone else using the network. Surely, with a basic architecture based on simple standards, links, and interconnections, the same should apply to the internet?The solution? Enter Webmentions!
As mentioned earlier, Webmentions allow notifications between web addresses. If both sites are set up to send and receive them, the system works like this:
- Alice has a website where she writes an article about her rocket engine hobby.
- Bob has his own website where he writes a reply to Alice’s article. Within his reply, Bob includes the permalink URL of Alice’s article.
- When Bob publishes his reply, his publishing software automatically notifies Alice’s server that her post has been linked to by the URL of Bob’s reply.
- Alice’s publishing software verifies that Bob’s post actually contains a link to her post and then (optionally) includes information about Bob’s post on her site; for example, displaying it as a comment.
A Webmention is simply an @mention that works from one website to another!
If she chooses, Alice can include the full text of Bob’s reply—along with his name, photo, and his article’s URL (presuming he’s made these available)—as a comment on her original post. Any new readers of Alice’s article can then see Bob’s reply underneath it. Each can carry on a full conversation from their own websites and in both cases display (if they wish) the full context and content.Using Webmentions, both sides can carry on a conversation where each is able to own a copy of the content and provide richer context.
User behaviors with Webmentions are a little different than they are with @mentions on Twitter and the like in that they work between websites in addition to within a particular website. They enable authors (of both the original content and the responses) to own the content, allowing them to keep a record on the web page where it originated, whether that’s a website they own or the third-party platform from which they chose to send it.Interaction examples with Webmention
Webmentions certainly aren’t limited to creating or displaying “traditional” comments or replies. With the use of simple semantic microformats classes and a variety of parsers written in numerous languages, one can explicitly post bookmarks, likes, favorites, RSVPs, check-ins, listens, follows, reads, reviews, issues, edits, and even purchases. The result? Richer connections and interactions with other content on the web and a genuine two-way conversation instead of a mass of unidirectional links. We’ll take a look at some examples, but you can find more on the IndieWeb wiki page for Webmention alongside some other useful resources.Marginalia
With Webmention support, one could architect a site to allow inline marginalia and highlighting similar to Medium.com’s relatively well-known functionality. With the clever use of URL fragments, which are well supported in major browsers, there are already examples of people who use Webmentions to display word-, sentence-, or paragraph-level marginalia on their sites. After all, aren’t inline annotations just a more targeted version of comments?An inline annotation on the post “Hey Ev, what about mentions?,” in which Medium began to roll out their @mention functionality. Reads
As another example, and something that could profoundly impact the online news business, I might post a link on my website indicating I’ve read a particular article on, say, The New York Times. My site sends a “read” Webmention to the article, where a facepile or counter showing the number of read Webmentions received could be implemented. Because of the simplified two-way link between the two web pages, there is now auditable proof of interaction with the content. This could similarly work with microinteractions such as likes, favorites, bookmarks, and reposts, resulting in a clearer representation of the particular types of interaction a piece of content has received. Compared to an array of nebulous social media mini-badges that provide only basic counters, this is a potentially more valuable indicator of a post’s popularity, reach, and ultimate impact.Listens
Building on the idea of using reads, one could extend Webmentions to the podcasting or online music sectors. Many platforms are reasonably good at providing download numbers for podcasts, but it is far more difficult to track the number of actual listens. This can have a profound effect on the advertising market that supports many podcasts. People can post about what they’re actively listening to (either on their personal websites or via podcast apps that could report the percentage of the episode listened to) and send “listen” Webmentions to pages for podcasts or other audio content. These could then be aggregated for demographics on the back end or even shown on the particular episode’s page as social proof of the podcast’s popularity.
For additional fun, podcasters or musicians might use Webmentions in conjunction with media fragments and audio or video content to add timecode-specific, inline comments to audio/video players to create an open standards version of SoundCloud-like annotations and commenting.SoundCloud allows users to insert inline comments that dovetail with specific portions of audio. Reviews
Websites selling products or services could also accept review-based Webmentions that include star-based ratings scales as well as written comments with photos, audio, or even video. Because Webmentions are a two-way protocol, the reverse link to the original provides an auditable path to the reviewer and the opportunity to assess how trustworthy their review may be. Of course, third-party trusted sites might also accept these reviews, so that the receiving sites can’t easily cherry-pick only positive reviews for display. And because the Webmention specification includes the functionality for editing or deletion, the original author has the option to update or remove their reviews at any time.Getting started with Webmentions Extant platforms with support
While the specification has only recently become a broad recommendation for use on the internet, there are already an actively growing number of content management systems (CMSs) and platforms that support Webmentions, either natively or with plugins. The simplest option, requiring almost no work, is a relatively new and excellent social media service called Micro.blog, which handles Webmentions out of the box. CMSs like Known and Perch also have Webmention functionality built in. Download and set up the open source software and you’re ready to go.
If you’re working with WordPress, there’s a simple Webmention plugin that will allow you to begin using Webmentions—just download and activate it. (For additional functionality when displaying Webmentions, there’s also the recommended Semantic Linkbacks plugin.) Other CMSs like Drupal, ProcessWire, Elgg, Nucleus CMS, Craft, Django, and Kirby also have plugins that support the standard. A wide variety of static site generators, like Hugo and Jekyll, have solutions for Webmention technology as well. More are certainly coming.
If you can compose basic HTML on your website, Aaron Parecki has written an excellent primer on “Sending Your First Webmention from Scratch.”
A weak form of Webmention support can be bootstrapped for Tumblr, WordPress.com, Blogger, and Medium with help from the free Bridgy service, but the user interface and display would obviously be better if they were supported fully and natively.
As a last resort, if you’re using Tumblr, WordPress.com, Wix, Squarespace, Ghost, Joomla, Magento, or any of the other systems without Webmention, file tickets asking them to support the standard. It only takes a few days of work for a reasonably experienced developer to build support, and it substantially improves the value of the platform for its users. It also makes them first-class decentralized internet citizens.Webmentions for developers
If you’re a developer or a company able to hire a developer, it is relatively straightforward to build Webmentions into your CMS or project, even potentially open-sourcing the solution as a plugin for others. For anyone familiar with the old specifications for pingback or trackback, you can think of Webmentions as a major iteration of those systems, but with easier implementation and testing, improved performance and display capabilities, and decreased spam vulnerabilities. Because the specification supports editing and deleting Webmentions, it provides individuals with more direct control of their data, which is important in light of new laws like GDPR.
In addition to reading the specification, as mentioned previously, there are multiple open source implementations already written in a variety of languages that you can use directly, or as examples. There are also a test suite and pre-built services like Webmention.io, Telegraph, mention-tech, and webmention.herokuapp.com that can be quickly leveraged.
Maybe your company allows employees to spend 20% of their time on non-specific projects, as Google does. If so, I’d encourage you to take the opportunity to fbuild Webmentions support for one or more platforms—let’s spread the love and democratize communication on the web as fast as we can!
And if you already have a major social platform but don’t want to completely open up to sending and receiving Webmentions, consider using Webmention functionality as a simple post API. I could easily see services like Twitter, Mastodon, or Google+ supporting the receiving of Webmentions, combined with a simple parsing mechanism to allow Webmention senders to publish syndicated content on their platform. There are already several services like IndieNews, with Hacker News-like functionality, that allow posting to them via Webmention.
If you have problems or questions, I’d recommend joining the IndieWeb chat room online via IRC, web interface, Slack, or Matrix to gain access to further hints, pointers, and resources for implementing a particular Webmention solution.The expansion of Webmentions
The big question many will now have is Will the traditional social media walled gardens like Facebook, Twitter, Instagram, and the like support the Webmention specification?
At present, they don’t, and many may never do so. After all, locking you into their services is enabling them to leverage your content and your interactions to generate income. However, I suspect that if one of the major social platforms enabled sending/receiving Webmentions, it would dramatically disrupt the entire social space.
In the meantime, if your site already has Webmentions enabled, then congratulations on joining the next revolution in web communication! Just make sure you advertise the fact by using a button or badge. You can download a copy here.
It's been 12 months since my last progress report on Drupal core's API-first initiative. Over the past year, we've made a lot of important progress, so I wanted to provide another update.
Two and a half years ago, we shipped Drupal 8.0 with a built-in REST API. It marked the start of Drupal's evolution to an API-first platform. Since then, each of the five new releases of Drupal 8 introduced significant web service API improvements.
In fact, I believe that this functionality is so crucial to the success of Drupal, that for several years now, Acquia has sponsored one or more full-time software developers to contribute to Drupal's web service APIs, in addition to funding different community contributors. Today, two Acquia developers work on Drupal web service APIs full time.Drupal core's REST API
While Drupal 8.0 shipped with a basic REST API, the community has worked hard to improve its capabilities, robustness and test coverage. Drupal 8.5 shipped 5 months ago and included new REST API features and significant improvements. Drupal 8.6 will ship in September with a new batch of improvements.
One Drupal 8.6 improvement is the move of the API-first code to the individual modules, instead of the REST module providing it on their behalf. This might not seem like a significant change, but it is. In the long term, all Drupal modules should ship with web service APIs rather than depending on a central API module to provide their APIs — that forces them to consider the impact on REST API clients when making changes.
Another improvement we've made to the REST API in Drupal 8.6 is support for file uploads. If you want to understand how much thought and care went into REST support for file uploads, check out Wim Leers' blog post: API-first Drupal: file uploads!. It's hard work to make file uploads secure, support large files, optimize for performance, and provide a good developer experience.JSON API
We had originally planned to add JSON API to Drupal 8.3, which didn't happen. When that plan was originally conceived, we were only beginning to discover the extent to which Drupal's Routing, Entity, Field and Typed Data subsystems were insufficiently prepared for an API-first world. It's taken until the end of 2017 to prepare and solidify those foundational subsystems.
The same shortcomings that prevented the REST API to mature also manifested themselves in JSON API, GraphQL and other API-first modules. Properly solving them at the root rather than adding workarounds takes time. However, this approach will make for a stronger API-first ecosystem and increasingly faster progress!
Despite the delay, the JSON API team has been making incredible strides. In just the last six months, they have released 15 versions of their module. They have delivered improvements at a breathtaking pace, including comprehensive test coverage, better compliance with the JSON API specification, and numerous stability improvements.
The Drupal community has been eager for these improvements, and the usage of the JSON API module has grown 50% in the first half of 2018. The fact that module usage has increased while the total number of open issues has gone down is proof that the JSON API module has become stable and mature.
As excited as I am about this growth in adoption, the rapid pace of development, and the maturity of the JSON API module, we have decided not to add JSON API as an experimental module to Drupal 8.6. Instead, we plan to commit it to Drupal core early in the Drupal 8.7 development cycle and ship it as stable in Drupal 8.7.GraphQL
For more than two years I've advocated that we consider adding GraphQL to Drupal core.
While core committers and core contributors haven't made GraphQL a priority yet, a lot of great progress has been made on the contributed GraphQL module, which has been getting closer to its first stable release. Despite not having a stable release, its adoption has grown an impressive 200% in the first six months of 2018 (though its usage is still measured in the hundreds of sites rather than thousands).
I'm also excited that the GraphQL specification has finally seen a new edition that is no longer encumbered by licensing concerns. This is great news for the Open Source community, and can only benefit GraphQL's adoption.
Admittedly, I don't know yet if the GraphQL module maintainers are on board with my recommendation to add GraphQL to core. We purposely postponed these conversations until we stabilized the REST API and added JSON API support. I'd still love to see the GraphQL module added to a future release of Drupal 8. Regardless of what we decide, GraphQL is an important component to an API-first Drupal, and I'm excited about its progress.OAuth 2.0
A web services API update would not be complete without touching on the topic of authentication. Last year, I explained how the OAuth 2.0 module would be another logical addition to Drupal core.
Since then, the OAuth 2.0 module was revised to exclude its own OAuth 2.0 implementation, and to adopt The PHP League's OAuth 2.0 Server instead. That implementation is widely used, with over 5 million installs. Instead of having a separate Drupal-specific implementation that we have to maintain, we can leverage a de facto standard implementation maintained by others.API-first ecosystem
While I've personally been most focused on the REST API and JSON API work, with GraphQL a close second, it's also encouraging to see that many other API-first modules are being developed:
- OpenAPI, for standards-based API documentation, now at beta 1
- JSON API Extras, for shaping JSON API to your site's specific needs (aliasing fields, removing fields, etc)
- JSON-RPC, for help with executing common Drupal site administration actions, for example clearing the cache
- … and many more
Hopefully, you are as excited for the upcoming release of Drupal 8.6 as I am, and all of the web service improvements that it will bring. I am very thankful for all of the contributions that have been made in our continued efforts to make Drupal API-first, and for the incredible momentum these projects and initiatives have achieved.
Special thanks to Wim Leers (Acquia) and Gabe Sullice (Acquia) for contributions to this blog post and to Mark Winberry (Acquia) and Jeff Beeman (Acquia) for their feedback during the writing process.
Rachel Lawson presented day three’s keynote. It was a really good session as it showed how everyone who attended, has contributed in some way to Drupal, as well as how “Drupal changes the world”. It started by “Meeting Sami”, a 10-year-old boy from Mosul, Iraq, who was captured (along with his brother) by ISIS. He was held captive for three and a half years, after which he was sent to a refugee camp. While in the camp, it was the Warchild charity that provided support, activities, education, and most importantly, ended up reuniting Sami and his brother with his family.
Now, you’re probably wondering what any of this has to do with Drupal? I know, I also did, but it became apparent that Warchild recently switched to using Drupal, making use of several modules. Rachel asked the audience to stand up, if they had made a contribution to modules used by Warchild, including paragraph and media. Almost half the room did, but I didn’t. She then went on to ask about other contributions that people in the audience had made. This time, it related to anything from documentation, to hosting meetups, and even attending camps.
By the end of the session, everyone in the room was standing, including me. It felt good to know that I had contributed in some way. During the question and answer session, the issue of becoming a member of the Drupal Association was raised, as well as the importance of doing so. Membership empowers the Drupal community to be able to do more things that are requested by users, which in turn makes a transformational difference.
“If you don’t push yourself and just go with things, then you’ll never get the amazing things.” - Rachel Lawson
Both Preston So and Lauri Eskola gave a session on decoupling Drupal, as well as the direction in which it is going. Anyone who has been working with Drupal should know that the idea of decoupling Drupal has been around for some time. Among the reasons for doing this, is that developers are free to choose any technology they want for the frontend. It’s clear that Drupal 9 will continue to use Twig, but with support client-side rendering with an API first approach. Another point was that editors prefer the non-decoupled approach, which raises the questions, “Who is requesting this? Is it the clients or developers?”
One of the most interesting and debatable sessions I attended was presented by Nemanja Drobnjak. Similar to the first keynote session, this session was about comparing Drupal from 18 months ago, with its current state. This presentation could have been perceived as very pessimistic, especially when seeing the numbers compared to other major CMS’s like WordPress. He also referred to the compare PHP frameworks blog.
All the data in the presentation had clearly been researched, so it was rather shocking to hear Nemanja predict that Drupal could go out of use within 15 years if the current trends continue. A few suggestions to prevent this were made. From improving documentation to Drupal directly targeting the education sector. This session drew a lot of questions. Firstly, “Why compare Drupal to Wordpress?”. I agree completely. It's about who is using it and benefiting from it. It reminded me of the blog post I read in which Vue.js passed React.js in the number of people who have 'starred' it on Github. Basically, it doesn’t mean that React is dying and Vue is now the norm. Both have different purposes and uses, just like, for example, Drupal and Wordpress.
Another question raised was, with Decoupled sites becoming more popular, “Can a crawler detect the backend?”. Maybe the data wasn't 100% correct.Day four An update on Drupal 8.6
The day four keynote session was presented by Gábor Hojtsy, who gave a short speech about the upcoming Drupal update. He then moved onto how we could help with several initiatives, both at Drupal Dev Days and in general, including helping with Admin UI and documentation.
Having put my Windows issues on the back burner, it was time to get the admin UI demo to work. I went over to the Admin UI innovation table where I met Lauri Eskola, Daniel Wehner, and Volker Killesreiter, all of whom helped me try to get the site working. Turns out it was because of an outdated module, so I updated the module, created a pull request and boom, my first ever contribution to Drupal was made. I then spent the rest of the day looking at the code and getting to grips with how it worked.
I was then assigned my first issue, which took some time to complete as I was still getting used to the code base. But nonetheless, I was able to fix the issue and contribute some more to the initiative. I really like how everything is broken into small issues, meaning that a single person isn't completing a large issue by themselves. It is clear that Drupal can only be maintained if people contribute back to the project and/or community.
It is never too late to contribute! Even though Drupal has been around for almost 20 years, it still relies heavily on people to contribute and come up with innovative ideas. If you are looking to contribute, but don’t know how I can suggest you take a look at the Drupal development and strategic initiatives.
Having heard the word “contribute” several times, it would have been great to hear someone repeatedly say the word, as Steve Balmer did - "developers".Day five Quo Vadis, Free Software?
The final keynote session, by Rui Seabra, was about free software. He shared thoughts on how we should have the freedom to run software as we wish, make changes to the software to make it fit for your purpose, and distribute both the original and modified version. It was clear that as users of so-called “free software”, we have a misconception about what we think is free. Rui also went on to talk about how we can help protect the internet, especially from the EU’s copyright directive. I did find the joke about the “[fill in] sucks” reference to Windows, very amusing.
Free software is everywhere, and people are forgetting that the freedom of sharing is a quintessential part of the evolution and moving forward together. “If we didn't share we wouldn't have knowledge, technology, and hardware we use today.” - Rui Seabra
The final session I attended was my colleague Blazej Owczarczyk’s talk, where he explained everything about progressive decoupling. One of his key points was that you should only decouple where it makes sense. Blazej showed some cool and interesting new features available in EcmaScript 6/7. We also learnt about the new await/async function in EcmaScript 8, which I found to very cool and cannot wait to start using. It was then time to move on and discuss how we could use these new features in our current Drupal sites.
By installing dependencies, defining a dynamic library and running a web server, you are able to create a decoupled environment for any technology of your choice. Two things I really liked about the session was 1) Blazej asking the audience to tweet a thanks to our very own Philipp Melab for the GraphQL module, and 2) the bonus question, which resulted in more questions from the audience. Way to go Blazej, we’re very proud of you here at Amazee Labs.
The rest of the day I spent contributing more to the Admin UI initiative.Many thanks
I would like to take this opportunity to thank:
Ruben Teijeiro for being so helpful throughout the week and introducing me to several people.
Christophe Jossart for not only helping me with my installation issue but for being great company and showing me around Lisbon.
Lauri Eskola, Daniel Wehner, and Volker Killesreiter for the introduction to Admin UI, which helped me find the issue as to why I couldn’t set up the site on my machine and finally allowing me to help contribute to the great initiative.
Finally, to all the sponsors, speakers, organiser, and volunteers, a huge thank you for a spectacular week, great evening social events, and for making my first ever Dev Days an amazing one. I hope to see you all at the next one.Links