Jason Warren

I build data models that make complex things easy to use. The hard part is finding the representation that's faithful to the world and tractable for the application on top of it.

A wide toolkit

Go TUIs, Tauri desktop apps, Neo4j graph queries, FastAPI microservices. A spread this wide is usually a red flag; in my case it is the residue of chasing problems into whatever language they happened to live in.

Languages, frameworks, and tools
Languages
TypeScriptJavaScriptPythonC#GoInk
Frameworks
ViteSvelte 5SvelteKitTailwind CSS v4ReactExpress
Runtimes & data
BunNode.jsPostgreSQLDenoSupabaseNeo4j
Tooling & platforms
VitestVercelDockerGitGitHub ActionsPlaywright
See all projects →

Lately

What's had the most attention recently. Rotate through to see the rest of the active work.

Showing projects 1–3 of 19

Libraries from the inside out

Each of these began as code buried inside one application. When the problem turned out to be more general than the app it lived in, I pulled the engine into its own library: still used by the original, now usable by anything that hits the same wall.

The Ink runtime was always separable from the game's content; once that was clear it moved into Nib, two files behind a single onInit seam.

The reactive card engine outgrew the duel it was written for, so it became Riffle: the same StoryNexus mechanics with no Svelte UI of its own.

The XSD parsing and validation core was the general problem hiding inside Iris; Schema Forge is that core on its own, reusable by anything that speaks XSD.

Themes the work returns to

The same 7 territories come up again and again, regardless of what I think I am sitting down to build: narrative engines, graph-native data, tools shaped around how people actually think.

  • Interactive Fiction & Narrative Systems 7
  • Procedural & Generative Systems 4
  • History & the Past Made Navigable 3
  • Graph-Native Data 5
  • AI & Language Tooling 7
  • Terminal & Native Interfaces 3
  • Accessibility & Human-Centred Tools 5
Explore the toolkit →