Sink is a scripting language I’ve been working on for a while now. It’s a minimalistic garbage-collected language designed for embedding into larger programs, with support for a REPL ideal for debug consoles.

It is currently in beta, and I am working hard to reach version 1.0. I’m really happy with it and think it’s a great little language.

There is also an online demo that you can play with.


The polybooljs library is the result of my research into polygon clipping algorithms. It can clip polygons against each other using boolean operations (union, intersection, xor, difference), and can handle coincident edges.


I’ve been reimplementing sound effects in clean C99 code. It’s actually pretty hard to find easy to use libraries that do things like reverb, dynamic range compression, or equalization filters. Well, not anymore!

sndfilter on GitHub


The midimap program will intercept MIDI messages on Mac OSX, and manipulate them according to a script.

Some example use cases include: playing a chord when hitting a single key, mapping a sustain pedal to a key, stopping devices from sending reset commands, and printing out intercepted messages.


ADSRNode is a function that generates an ADSR envelope for use within WebAudio.

Check out the demo to get an idea of how the curve is generated. Since it’s a WebAudio node, it can be connected to any other parameter inside the WebAudio API.


I built a basic three oscillator synthesizer using WebAudio, intended to be used as a simple drop-in synth for music experiments.


Implementation of Catmull-Rom splines in C and JavaScript.

The library takes a list of points (2D, 3D, or 4D) and returns a smooth curve that passes through the points.

spline on GitHub


I put together a library for numeric, vector, quaternion, and matrix operations, with implementations in C99, JavaScript, TypeScript, and Sink:

nvqm on GitHub

Time Sink

Time Sink is a simple web app that uses my scripting language sink to create one second looping GIFs.

Just simple fun :-).