04 Jul 2017


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 modules


Utilities for working with JavaScript callbacks, works in both Node.js and the browser. Async provides around 70 functions that include the usual functional suspects (map, reduce, filter, each…) as well as some common patterns for asynchronous control flow (parallel, series, waterfall…).


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

Copy Kitten

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

Progressive enhancement

Some experiments on designing templates for progressive enhancement, for my thoughts on this see the blog post.


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


Python implementation for server-side rendering.


Test suite to test server implementations of the template engine against.

Scheme (including C bindings)

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.


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


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


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

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).


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.

  • level - Abstract interface for level implementations.
  • leveldb - C binding to LevelDB providing a level implementation
  • sublevel - Namespaced access which can exposed as a level implemenation
  • level-sexp - Wraps a level implementation to automatically read/write scheme values