See also archived projects.

External projects

(Or in other words, other people's projects I work on.)

Primary maintainer

Federated, decentralized stream server that does most of what people really want from a social network. Highly extensible via a big beautiful ActivityStreams API.



Opt out of global data surveillance programs like PRISM, XKeyscore and Tempora. Help make mass surveillance of entire populations uneconomical!

Completed projects


Filter for today's date in logfiles in an Artificial Ignorance-compatible way. Or in other words, make sure you never miss logs from today, even if you forget about stuff or if filter-other-days can't handle your logfile format.

You can read more about the background of and impetus for this design on my blog.

Make ReCaptcha's "I'm not a robot" accurate extension

Correct the "I'm not a robot" text of ReCaptcha to be more accurate - the new-and-improved version says "I want to do unpaid image classification". ReCaptcha sucks for lots of reasons - it's annoying, arbitrary, and extremely hostile to Tor users - but this is the only problem fixable in a WebExtension.

You can read more about the background for this extension on my blog, or you can skip directly to installing it in Firefox or in Chrome.

In we needed to look into what Node versions different Linux distributions ship, so we could figure out when we could drop support for old Node versions. So I went and looked at a bunch of distribution sites, put all the data into a nice JSON file, wrote some nice Jade to display it, and put it up on

Eventually, I'll add a neat JS-powered selector that lets you interactively filter distros and versions based on what Node versions you're willing to support and/or what distributions you know you have to support. In the meantime, though, the site fufills its original purpose. Hence, "completed".


lazymention helps you send Webmentions for your static IndieWeb site. When you publish to your site, you ping lazymention, and it will poll your site, parse the microformats2 markup, and send Webmentions for content it hasn't seen before.

Support for sending WebSub notifications is planned for some point in the future.


fulldom exposes a single endpoint at /<url> which, when sent an HTTP GET request, will give you back the serialized DOM of the page at <url> when the page's JS has "finished running". "Finished running" is in quotes because determining when a page's JS is "finished running" is basically impossible, so the point at which the DOM is serialized is based on a user-provided heuristic.

This is useful for scraping webpages which fill in their content with JS (i.e. webpages that suck at being webpages) with, say, Huginn.

For those times when you just gotta ask: have they tried turning it off and on again? Returns random GIFs (mostly). Conceived during the week of Open Source Bridge 2017.

The source (and more documentation) is on GitHub. The underlying module is too.


Recreate the URL scheme that GitHub Pages gives you, to avoid breaking links if you move to your own server. Currently it's a little aggressive (it deploys forks, which GitHub Pages does not) and could use some more features, but it gets the job done. Written primarily because I had this exact problem when moving to steevie.

Ongoing projects


I keep all my dotfiles on GitHub. This repository is ever-improving, because I spend way too much time customizing/playing with my environment and not enough time doing real work.


The continual maintenance and improvement of steevie. This includes both traditional system administration work as well as SaltStack stuff.


Stratic is the streaming static site generator. It's comparible to Jekyll or Wintersmith, but instead of having a monolithic framework that you have to learn, it's all implemented in streaming Node.js modules orchestrated using Gulp. That means that not only do you have the power of The Node Way™ - small, composable modules that can easily be swapped out for something different - but you have the power of all of npm, too. Zero plugins required.

Tor relay

I have maintained a Tor relay, strugees, since February 2nd, 2014. It was originally descended from the now-defunct Tor Cloud project, so it ran Ubuntu.

In March 2017 the relay crashed due to an unresolvable boot problem - I took this as an opportunity to properly configure the relay from scratch as well as switch to FreeBSD to improve the network diversity. I brought the new relay online August 5th 2017. Its configuration is version-controlled on GitHub.

Projects on the back-burner

Fractured Reality

An exploration game like no other.


Experimental story software that utilizes the concept of emergence.