🇵🇸 Donate eSIMs to Gaza 🇵🇸

Personal Browser Extensions

An image of Bob the Builder holding a microphone with the words
Personalizing my experience on the web.

I’ve been lurking on SFF author Charles Stross’s blog for years now. His blog posts spawn lively conversations in the comment section, which I often find weeks after the fact – at which point they’ve accumulated hundreds of comments.

These discussions often have multiple threads of conversation all happening at once, but the comments are laid out in a single column, one after the other, and I have trouble following along.

Scrolling through a recent blog post that has over 2000 comments.

So naturally, I decided I had to build a personal Chrome extension to change the layout of the comments!


On Stross’s blog, a comment can be made in reply to another earlier comment, but they’re all displayed as one flat list:

  • Comment 1
  • Comment 2
  • Comment 3 - in reply to Comment 1
  • Comment 4 - in reply to Comment 2
  • Comment 5 - in reply to Comment 3
  • Comment 6
  • Comment 7 - in reply to Comment 2
An example list of comments as displayed on the blog post.

This works to a point, but I find it gets a bit hard to follow once you get comments that are several layers deep, or have a comment that’s replying to a much earlier comment. By the time you get to Comment 7, you’ve probably forgotten what Comment 2 was about.

Another way to represent comments like this is as a “tree”, where child comments are nested below their parents.

  • Comment 1
  • Comment 3 - in reply to Comment 1
  • Comment 5 - in reply to Comment 3
  • Comment 2
  • Comment 4 - in reply to Comment 2
  • Comment 7 - in reply to Comment 2
  • Comment 6
The comments above in a nested tree representation.

This may be familiar to you as the way that Facebook, Reddit, and others represent their comments. I think it makes reading the comments much easier, and so I decided that this would be the goal of my Chrome extension.

After some noodling around, I ended up making a UI where I would show one branch of the tree at a time.

  • Comment 1
  • Comment 3 - in reply to Comment 1
  • Comment 5 - in reply to Comment 3
  • Comment 2
  • Comment 4 - in reply to Comment 2
  • Comment 7 - in reply to Comment 2
  • Comment 6

I think this makes it easier to drill into one conversation topic without getting lost.

The big downside to this view is that if somebody writes a comment that’s a reply to a previous comment, but doesn’t mark it as such, it won’t get picked up by the tree view. For my personal use that tradeoff is worth it, but if you’re ever building a chat app it’s worth thinking about!


After my Chrome Extension has run, the page looks like this:

The same blog post above, but with my chrome extension modifying the UI.

The UI is a bit clunky, but it gets the job done!

I can read the comments thread by thread, and collapse sub-threads as I go if I’m not interested. I probably miss out on some comments that weren’t marked as replies, but when I’m skimming through a couple thousand comments, I think that’s ok.

All in all, it’s the perfect https://antipope.org/charlie/blog-static reading experience for me!


It feels a bit weird to be writing this blog post right after Chrome turned on their “Manifest V3” extension spec, effectively killing adblockers for good.

I think browser extensions are such a good way to take power from the ad-tech companies and put it back where it belongs: in the hands of the people.

Despite Google’s shitfuckery, you can still do a lot with Chrome extensions. And there’s other browser options out there!

The Chrome API is very similar to Firefox’s, with most Chrome extensions working out-of-the-box on Firefox. The Brave browser is also an option, as they’re built on top of Chrome and have an adblocker built in, but unfortunately, their CEO is an asshole.

So I recommend Firefox instead.

You do need to know a fair bit of Javascript to build your own extensions, but if you’ve ever had any interest in learning, I think tinkering with browser extensions is a good way to learn! There’s no stakes, and I always find it really motivating to work on something that will tangibly improve my own life.

I’ve built a few of these at this point, just little bits of code to make my web browsing experience a little bit nicer.

I’ve found it really rewarding, and I hope you will too!