More projects of mine can be found on my GitHub repositories page.

Active Personal Projects


guh is a project template for building modern web applications with TypeScript and Sass. It's my go-to scaffold for web projects, and it supports isolated debug/production builds, live reloading, and massive code reuse.


Lua (especially LuaJIT) was lacking a simple HTTP(S) request model, as most other platforms seem to have. I wrote a cURL binding and a small library to fill that gap for LuaJIT users.


love-microphone is a simple microphone interface for LÖVE. It produces SoundData objects to be queued by 0.10.0's possibly upcoming SoundQueue, or by internal QueueableSource objects for playback.

Previous Projects


Matchmaker aims to reduce bitrot on systems where installing multiple versions of LÖVE is no fun. It provides a single command line interface that automatically chooses a LÖVE runtime for each game you execute.

LÖVE Test Suite

Presently on hold, LÖVE Test Suite is an attempt to test LÖVE with unit and integration testing. It's a massive undertaking, so the repository exists primarily as a proof-of-concept at present.

Carbon for Lua

Carbon is a large utility kit aiming to provide functionality similar to .NET, but for Lua. It supports Lua 5.1 and LuaJIT, and provides a wide range of features, partly thanks to Graphene.

Graphene for Lua

Graphene is a library that provides .NET-style namespacing and library embedding in Lua. It simplifies including dependencies within projects and customizing require paths without modifying large swaths of code. It provides the basis for Carbon.


love-polyfill provides features from future, unstable LÖVE versions for existing, stable LÖVE distributions. It might eventually get replaced by a project called HATE, but for now is one of the best ways to dabble in small bugfixes and features from the future.


FFI++ for LuaJIT is a C++ FFI in the works that essentially turns mangled C++ symbols into a workable C API. It's the only active project of its kind and one of the only reasonable ways to bind C++ objects to LuaJIT.

LCORE Framework

lcore is a generic framework written in pure LuaJIT 2. It interfaces with existing frameworks for Lua like LÖVE and Coeus. It has been mostly replaced by Carbon, but I still have a few legacy projects that use it.


Coeus is a full-featured game engine implemented in (almost) pure LuaJIT. It's more of a prototype than anything else, and I've developed it with the help of a friend of mine, Kyle Emmerich. It has undergone a couple rewrites evaluating the practicality of various concepts but has mostly been replaced by Hexane

Ludum Dare

Ludum Dare 29 (Jam) - Whac-A-Something!

Whac-A-Something! is a twist on the classic whac-a-mole game with random items instead of just moles.
Ludum Dare 29's theme was "Beneath the Surface."

Ludum Dare 28 (Jam) - Warrior

Warrior is a one-button fighting game my girlfriend Cassie and I built for Ludum Dare 28.
Ludum Dare 28's theme was "You Only Get One."

Ludum Dare 27 (Jam) - :Fast :Food!

Fast Food! is a game about a vampire whose feasting schedule sadly overlaps with the day.
Ludum Dare 27's theme was "10 Seconds."

Ludum Dare 26 (Compo) - JOHN

JOHN is a top-down game about a young boy caught in a terrible dream.
Ludum Dare 26's theme was "Minimalism."

Ludum Dare 25 (Compo) - London Bridges

London Bridges is a game where you are a bridge on the verge of destruction, and you must prevent anyone from crossing you.
Ludum Dare 25's theme was "You Are the Villain."

Ludum Dare 24 (Compo) - UNBOUND

UNBOUND was the first game I built for Ludum Dare. You play as a curious journalist reporting about the mysterious legend of Daniel McArthur. It's essentially a glorified puzzle game.
Ludum Dare 24's theme was "Evolution."