Tech Side-Projects

Here I list a curated slice of my side-projects. The slice will change over time, based on what I find interesting that rewrite. It only includes my own projects, not things I merely contribute to. For a more complete (but not exhaustive) list, see links.


A collection of useful single-header libraries targetting ISO C. Of particular interest is the ini.h library, the blog post on which has racked up 45k reads (at the time of writing).


Janet-Date is an ISO C99 datetime library for Janet. Through its implementation I found bugs in, for example, the MacOS libc. It’s also an example on how one could handle time, namely with time_t being the source of truth, updated immutably, with struct tm only used for output.


Jurl is an HTTP client for Janet. It’s a libcurl wrapper, with the native bindings having the explicit goal of being as complete as possible. To the best of my knowledge, it is the most complete bindings for a dynamic language of this category.

The language level bindings are then implemented on top of that. I had the goal of making them as nice and complete (but only for HTTP, rather than everything curl can do) as I could. The result is the nicest HTTP client I’ve ever used, competing roughly with python’s requests (the “request” function is roughly equivalent to requests API, with the additional API layer on top of this being a lisp/F#-like pipeline).


Patok is a runtime tokenizer in pure lua. The primary novelty involved is that it works entirely on the basis of lua’s patterns. Typically, tokenizers/parsers are built using bespoke systems rather than regular expressions or similar. Those that are regex-or-similar based are handled in AOT and as such require a separate transformation, such as bison/yacc. The only project I am (now) aware of that’s similar is the moo tokenizer for javascript.

In order to make the tokenizer useful, patok also comes with piecemeal, a fairly standard run-of-the-mill recursive descent parser built to consume patok output.