Indie Microblogging by Manton Reece


“As you may know, @replies were not originally part of Twitter. They were embraced by the community first, and then we built them into the system.” — Evan Williams, 2008 post about Twitter formalizing replies

In 2016 around the 10-year anniversary of Twitter’s launch, Faruk Ateş wrote a post that gives a sense of the major changes Twitter had gone through, most of which were difficult to fully understand at the time. On the change with @-replies:

The second thing is that when they started hiding @-replies to people you don’t follow, they stripped the user experience of a vital ingredient for civility: peer transparency. The tone of discourse changed much for the worse over time, following that new behavior of the timeline. Before the rollout, all your friends would see if you behaved like a jerk to someone; after the rollout that was no longer the case. It removed the natural consequences of bad behavior, thereby encouraging people to reap the benefits of such bad behavior much more frequently.

Replies on go back to that earlier Twitter design. By default, when you reply to someone’s post, all your followers see the reply even if they aren’t following the person you are replying to. If you are following people who reply a lot, you can disable that behavior with a setting:

Showing all replies by default helps your followers discover new people. Along with the Discover section, it’s one of the best places to find new people. Seeing bits of other conversations also sets expectations for what the community is like.

Replies can come in several forms. At its simplest, you click “Reply” in and write something short:

The reply is stored on and added to the timeline, threaded into the conversation. includes the reply in the timeline and Mentions section for any user referenced in the post.

Because is based on blogs, replying and mentioning other users does not work the same way as other social networks you may be used to. We’ve tried to build a system that is flexible enough to work with sites and external blogs.

There are several rules for processing replies and mentions:

  • When replying to a post that is on an external blog, will attempt to send a Webmention to that blog post.
  • If you post to your blog and include @username somewhere in the post, automatically converts that into a Markdown link to the user. also includes that mention in the user’s timeline and Mentions section.
  • For blogs hosted externally to, such as with WordPress, you are responsible for linking usernames for users you want to mention. Just including @username without a link will have no effect. It should be something like <a href="">@username</a> to indicate to that a specific user should be notified. does not automatically link any text in external blog posts. (By adding links yourself, posts will show up correctly not just on but also on your web site and in feed readers.)
  • For an external blog post that is a reply to a specific post, the external blog can send a Webmention to If the sending blog is associated with a user, that post will be copied to as a reply and threaded into the conversation.

Remember that microblog posts use HTML. doesn’t attempt to auto-linking usernames after a blog post is published. We don’t want to build a new platform that avoids HTML. Instead, it’s about making the web itself better. A microblog post on the web should be readable in a web browser.

When I was first developing, I made a choice that quick replies in the timeline should be stored separately from regular blog posts. I thought that most people wouldn’t want replies mixed in with their blog posts at their own domain name. I also liked that replies were simple, usually short and without images, because it makes the timeline much more readable.

But this design poked a hole in one of the most important goals of owning your own content by having it at your own domain name. If someone wanted more control over their replies, they would need to use an external blog like WordPress, even though had great support for Webmention and cross-site replies.

In early 2020 we finally fixed this limitation. Storing replies outside of your blog, even if you could export them or move to another IndieWeb-friendly platform, was too silo-like for the mission of

Now you can have your replies on your own blog, with reply permalink URLs at your own domain name. You can enable this on the Account screen. The popup menu will include any blog that’s hosted on, so you could even create a separate microblog just for replies:

Replies get a new reply post type in Hugo, which is used under-the-hood for your microblog. This means they won’t show up in your default feeds or home page, although you can create a custom theme to change that. adds a few Hugo parameters that can be used for reply HTML templates:

  • .Params.reply_to_url: The URL for the post you are replying to.
  • .Params.reply_to_hostname: Just the hostname part of the reply-to URL.
  • .Params.reply_to_username: The username for the user you’re replying to.
  • .Params.reply_to_avatar: The URL for the user’s profile photo.

Replies on your blog also get a special HTML template that includes the blog or username for the person you’re replying to:

This is common practice in the IndieWeb community.

You may want to link from your blog post to the conversation around that post on When reads your feed, it creates a record for your post in the timeline. If you’re hosting on, you can install Sven Dahlstrand’s plug-in Conversation on to add a link automatically to your blog posts.

If you’re hosting elsewhere or want more control, Conversation.js also includes the URL for your post on in JSON Feed’s home_page_url field.



  "version": "",
  "title": "Conversation",
  "home_page_url": "",

You can use JavaScript or a server-side script to retrieve this JSON Feed and then use the URL in home_page_url for linking from your blog to the conversation on

Next: Harassment →