My Open Source work

Built with AI

Teskooano, in 2025, was my first big project built with AI. Everything here since then I've built working with AI coding agents.

Reverse engineering

Frontier: Elite II reimplementation

2026 Active

Work towards a 1:1 reimplementation of Frontier: Elite II (DOS, 1993) in Rust and wgpu, native and in the browser. The original game runs inside the port on its own 386 runtime, and gets replaced routine by routine, each one checked against the original. The AdLib music driver is already ported and plays the original music sample for sample, and there’s a viewer for every picture, song and 3D model in the game files.

GameFrame

2026 Active

A framework for reverse engineering games with AI agents. The playbook is a set of skills and agents that run inside your coding agent (Claude Code, Codex, Cursor), one for each step of the method. The toolkit is a set of tested tools built around Ghidra, the Unicorn emulator and DOSBox-X, and it checks every result against the original game.

It grew out of Un-Banished, and the same method is being used on Frontier: Elite II.

Un-Banished

2026 Active

A new engine for Banished, the city builder from Shining Rock Software, written in Rust. The original only runs on Windows; this runs on Windows, macOS, Linux and in the browser through WebAssembly. It has none of the original’s code or assets, it reads the data files from your own copy of the game.

The goal is to match the original exactly. The same seed gives the same map, and saves from the original load without changes. It also adds a few things the original never had, like multiplayer and a mod browser for Nexus Mods.

Apps and experiments

Teskooano

2025 Active

A 3D N-Body simulation engine that simulates real physics and gives you multiple views of it in real time. It has collision detection, orbital mechanics using a Verlet integrator, and generates unique star systems from a seed string. Rendering is Three.js and the state is managed with RxJS.

The name comes from Gurdjieff’s Beelzebub’s Tales to His Grandson, where a Teskooano is the telescope in Beelzebub’s observatory on Mars.

Before AI

Everything from before that, written by hand.

Apps and experiments

Stochastic Parrot

2023 Inactive

Polly the Stochastic Parrot, a psychedelic cosmic parrot that feeds from the entropy of the universe. More simply, a Mastodon bot that sent an empty prompt to the GPT-4 API and tooted whatever came back, along with Dall-E images, ElevenLabs audio and polls. It ran as a GitHub Action on the hour.

You could say it was repeating back the hallucinations of the language model.

WebSerial.app

2021 Active

WebSerial.app is a Svelte application that allows browsers to communicate with hardware devices over USB or Bluetooth serial connections.

Elite: Dangerous Immersion Toolkit

2018 Inactive

A tool that integrated with the game Elite: Dangerous to read its game log and use the data to control Philips Hue lights. For example when entering a star system, it would adjust the colour of the lights to match the stars warm or cool light temperature, or when overheating it would indicate by flashing the lights red.

Libraries and components

Humorous Web Components

2023 Inactive

Adding some humour back to the web. <web-sarcasm> and <web-satire> are Lit web components that mark up your text, with a tooltip in case anyone misses the point.

Formula

2022 Active

Formula is a library for creating dynamic, reactive forms. Take any HTML form and Formula handles the reactive bindings with your input elements, using attribute-based validation, the Constraint Validation API and ARIA. Wrap a form in <formula-form> or use the library directly. It’s the first library in Web Helpers, and is built with Vanilla JS and nanostores.

It started life in 2021 as Svelte Formula, a zero-configuration reactive forms library for Svelte.

RxJS Ninja

2020 Active

A set of NPM modules that contain Operators and Observables for any project using RxJS that give you more controls over your data - with filtering, querying and modifying data, and providing extra utilites for side effects and working with different types of streams.

ngx-editorjs

2019 Maintenance Mode

An Angular component for EditorJS allowing it to be used in Angular projects. This came with an architecture to allow the importing of EditorJS plugins

Music Markup Web Components

2017 Inactive

An experiment with Web Components and StencilJS to create components that could be used to create musical instruments in the browser.

Node Bitly

2012 Maintenance Mode

bitly is still the most popular bit.ly client for JavaScript projects with an average of 25,000 downloads a week. Currently not being activly maintained, but recently updated to support Bitly’s new v4 API.

Tools

The Obsidian Garden

2021 Inactive

Both a guide to creating your own knowledge system and a knowledge system itself, designed to be used with Obsidian.

npm-lint

2017 Inactive

An attempt at writing a linting tool for the npm package.json file to reduce the security risks posed by npx and other tools used in scripts and dependencies.

Takeoff

2017 Inactive

Takeoff is a toolkit for rapid development using Docker, allowing you to prototype web applications using a command line tool and simple blueprint that speed up development of full-stack applications.

Sublime Text 3 NodeJS

2012 Maintenance Mode

A plugin for Sublime Text 3 that provided NodeJS integration.