This is a selection of projects I've worked on over the years. It's not an exhaustive list — you can find more of my code on GitHub.


JavaScript libraries


Popular async utilities for node and the browser. According to GitHub this is now relied upon by over 4.5 million repositories!


High-level streams library for Node.js and the browser, with strict laziness so it can be used to sequence side-effects. Read the article.

Copy Kitten

A tiny immutable JSON data structures library (< 1kb gzipped). I wrote this for time when Immutable.js was overkill.


A follow-on experiment from Pithy in developing ergonomic internal DSLs for generating DOM elements.


A convenient chainable API for Node.js HTTP responses.


A really simple URL dispatcher that allows arbitrarily nested regular expressions for matching URLs and calling an associated function.

Collaborative editing


A wiki designed around collaborative text editing developed in Rust, WebAssembly, and React. Still in early development.

Progressive enhancement

Some experiments on designing templates for progressive enhancement. For my thoughts on this see the associated article.


The JavaScript implementation of the template engine. Allows incremental DOM updates based on server-rendered templates.


Python implementation for server-side rendering.


Test suite to test server implementations against.

Scheme and C libraries

Raspberry Pi GPIO

Provides a CHICKEN Scheme interface to the Raspberry Pi GPIO pins. Co-authored with Jörg F. Wittenberger.


Scheme implementation of RFC 3492. Encodes internationalised domain names in the ASCII subset supported by DNS. See the associated article.


Scheme code to parse and serialise Bencode, the encoding used by BitTorrent for storing and transmitting loosely structured data.


Partial Scheme bindings to the libsodium crypto library, a "portable, cross-compatible, installable, packageable fork of NaCl, with a compatible API, and an extended API to improve usability even further".


Parser for CommonMark, a more highly specified version of Markdown. This is a very simple binding to the libcmark library. See the associated article.


Scheme implementation of a TOML markup parser. Passes toml-test suites for encoding and decoding.


A fast HTTP server for CHICKEN Scheme based around Joyent's http-parser C library (used internally by Node.js).

LMDB (lolevel)

Low level bindings to Lightning Memory-Mapped Database (LMDB) for CHICKEN Scheme, closely following the C API (but without the manual memory management). See related articel on exploring LMDB.


Complementary CHICKEN Scheme packages for working with LevelDB, a key/value database library by Google. The abstract interface is provided by the level egg, and the real LevelDB backed store is implemented in the leveldb egg. This is similar to the LevelUP / LevelDOWN split used in the Node.js bindings.

Rust packages


Macros for creating request routers in hyper. Created to more easily support async request handlers.


Drive a Sharp Memory Display module from a Raspberry Pi.


Some older projects no longer in active development.


One of the very first unit testing frameworks for Node.js. It provided a simple TDD and export based syntax later used by expresso (which itself was later replaced by Mocha).


An easy way to create, parse, and validate forms in Node.js


A JavaScript package manager focused on the browser. It was created slightly before Bower and provided a (still to this day) very nice installation workflow which meant you could jam install jquery, then immediately require("jquery") in your frontend application using RequireJS - no manual build step (e.g. Browserify, Webpack) required.

Of course, it failed to gain much traction, and there has since been a huge amount of development in this space with projects like Yarn and Webpack, and NPM positioning itself as a more general JavaScript repository (not just Node.js).


Secure cookie-based session middleware for Connect.


A lightweight client for CouchDB for Node.js and the browser.


A really powerful set of tools for creating JavaScript apps that ran directly on CouchDB (called CouchApps). Kanso saw a number of real-world uses cases, including projects to collect healthcare data in Africa and a First Nations dictionary project in the Northwest Territories. For a demonstration of it's capabilities, see the screencast.


Standalone code based on CouchDB's proxy module for proxying mochiweb requests.


A Music Player Daemon (MPD) client module for Erlang. Read the original article. I'm not sure, but this might be my first open-source code! It's either that or a Erlang language definition for the SHJS highlighting library.