✓ drop-in replacement · ∞ written in itself · ⇩ mostly private - requests welcome
parser
·
semantic checker
·
lowering
·
interpreter
·
debugger
C
·
native JavaScript
·
faithful JavaScript / WASM
·
TypeScript
·
Python
runtime
·
ABI
·
LSP / VS Code
·
MCP
·
Claude Code
suggestions
·
formatter
·
obfuscator
·
standard library
·
net stack
·
typed HTML / CSS
... and much, much more!
Jester - Unity, turned into a game you mod while it is running.
a small host, mods compiled from source and hot-swapped in place - Electron's idea, without a browser per app
▸ Join the Discord ▸ Visit our website
minecraft — new repository, 3 commits. A playable Minecraft, built as a Jester application rather than as a mod loader for the real one: 15 mods and one modpack, with the blocks, textures and sounds read out of the copy the player already installed.
jester — 40 commits. Options screens that really move something, an inventory HUD that does not walk every row per item, and entities, containers and chat carried on the wire. The host surface reached 1.9.0, and every figure the documentation states about it is now derived from the engine's own dispatch table instead of typed by hand. A browser build holds a real library and was measured at what it costs there.
jester — 32 commits. A world that follows the player, blocks that break and drop, a sky overhead and a loading screen to stop at. Minecraft's protocol is spoken to a real server one packet at a time, and its audio decoded by the host.
aowlsem — 10 commits. Const initialisers, symbol ownership and the openArray conversion path. All five of the game's build tools now compile under it, and the binaries built through aowlmony behave identically to the ones nimony builds.
aoughwl.github.io — 2 commits. Jester on the website, with the interpreter running on the page — a demo that used to last 35 seconds now holds.
jester — 119 commits. The boundary between a mod and the engine is 498 host calls, and the C# dispatch table and the mod-side declarations are checked against each other name by name before anything ships. Grid inventories, text fields, audio and skinned animation reached that surface on the day, and a mod may now be a window, an application, or a page in a browser. Forty-one mods were rebuilt against one SDK, and a build that had grown to 400 MB gave two thirds of it back.
The toolchain on Windows — 59 commits across seven repos. The semantic checker, the build driver, the installer, the C backend, the lowering pass and the Claude Code server each built, found their own artifacts and linked there for the first time. aowlsem's differential corpus grew 936 → 942; aowlc's claims gate reads its own README and stands at 78/78, with its slowest run down 976s → 42s.
aowlspt · aoughwl.github.io — 8 commits. Deprecated: this work is Jester's now. Its 63 documents were published as their own section first, and the bot AI, the settings schema and the content importers cross over as ordinary mods.
jester — new repository, 14 commits. A Unity host of a few thousand lines that draws nothing and plays nothing: it loads an interpreter, hands it a mod, and answers the calls that come back. Everything above that — the player, the weapons, the world, the menu you just used — is a mod written in aowlmony, compiled, and swapped while the game runs with its data left where it was. The comparison people reach for is Electron, and the difference is the point: Electron ships a copy of the browser per application, while Jester is installed once and shared, so an application weighs what its own content weighs.
aowlspt — 13 commits. The install carries the compiler and proves it runs on the machine it landed on. Four tools that had been reporting success for work that never happened now say what actually happened, and the in-game error dialog is caught rather than watched.
aowlspt — 194 commits. The reference documentation is generated out of the source, behind a gate that refuses to publish when the two disagree. A full-screen map on a key, an explicit choice of renderer so a legacy toggle can no longer blank it, and the post-processing panels drawn by the game's own toolkit.
aowlspt — 82 commits. Performance, and the native drawing path. The menu the player passes through on the way into a raid went 2.75s → ~350ms, an ESP draws onto a canvas discovered at runtime instead of over the frame, and each boss rolls its own chance once per raid rather than all of them arriving together.
aowlspt — 49 commits. The in-raid map and the radar became one spatial widget that rotates with the player and honours its settings while the game is running, loading screens carry the art for the place being loaded, and the single-player branding holds with the inspector switched off.
aowlspt — 67 commits. A retained-mode widget framework of our own, drawn over either render backend, and settings a mod declares rather than hand-draws. A live-scene API on top of the proven call layers, the item templates the payloads referenced and the database never had, and the bot family presented as one thing everywhere a player looks.
aowli — 3 commits. The boundary between interpreted and compiled code now moves while the program is running: at a breakpoint a module goes native, compiled into the live process, or comes back under the interpreter, without a restart. The debugger reaches hybrid mode for the first time, so a program runs compiled everywhere except the file being stepped through. A new lane carries 27 assertions and reports, per module, how many calls each side actually answered rather than only that the answer was right — hybrid 28/28, the debugger's own lane 138/138, and the two engines agree with each other and with native at 11/11.
aoughwl.github.io — 11 commits. A storefront: products, plans, licence keys and machine seats as one generic mechanism rather than a page per product, and the first thing on it priced as a subscription. A buy button whose product is not in the catalogue now says so rather than inviting a click it cannot honour.
aoughwl-bot · discord — 2 commits. The subscriber role, granted when a payment clears and taken back when it lapses, and an Authorization scheme that callers choose rather than inherit.
aowlsem — 17 commits. Generic instance identity, the base type a projection loads through, and bitwise classification on the copy path. A type now hashes to one instance in every module, std/tables compiles and runs, and one more standard-library module compares equal — 35 → 36 of 55. The end-to-end gate — build, link and run a program aowlsem processed — grew from 6 cases to 51 on the day and stands at 49/51, both reds diagnosed.
aowltarkov — new, and not yet a repository. A first look at Escape From Tarkov as a target: an ontology of the game's data, a demo that reduces against it, and a local server stub.
aowlsem — 67 commits. Template expansion across module boundaries, typed-template conversions, block arguments, comparisons over type variables, and the sizeof path. Divergence from the reference compiler fell 37% on the day, 2,649 → 1,662 tokens over 55 modules, 46 of which now compare equal once line information is normalised, and the differential corpus is 921/921.
aowlmony — 8 commits. The build cache, the project model, dependency locking, and the dangling-pointer checker. A warm rebuild now costs 0ms of compile time, 0.27s wall, down from 1.3s; dependencies pin content as well as revision; and the driver has its first packaged release. Gates: cache 11/11, project 8/8, dependencies 10/10, memory 13/13, and 19 of 22 commands byte-identical to the previous implementation with three listed differences.
aowlup — 8 commits. Release install, registry repair, and per-tool shims. A cold machine installs the manager and then the driver from published releases with no source checkout — 7/7 on that gate — and the command surface is 40 of 48 byte-identical to the previous implementation with eight listed differences; registry 16/16.
aowlcas — 2 commits. New repository: the content-addressed store that the build cache, the package store and the driver become views over. Blobs addressed by content, recorded answers keyed separately, roots and a collector — 14/14, including a case that corrupts a blob and requires the verifier to catch and name it.
aowlsem — 2 commits. Index sections for exported converters. The end-to-end gate — build, link and run a program whose macros aowlsem expanded — is 6/6, which leaves no red gate in the repository; one more standard-library module is byte-identical, 44 → 45 of 55.
aowlsem — 37 commits. Template expansion, generic instantiation and converters, overload-set ordering, pointer coercion, symbol numbering, and lifetime hooks and instance reuse for types imported from another module. Divergence from the reference compiler fell 32% on the day, 3,877 → 2,641 tokens over 54 modules; three more standard-library modules are byte-identical — 41 → 44 of 54 — and the differential corpus is 911/911 — with the module that compiles aowlsem itself measured against its own grown source, so its figure rose even though the day's fixes cut it too.
aowlsem — 24 commits. Generic type aliases, tuple assignment, enum members visible under two names at once, and comparison lowering inside instantiated generics. Two more standard-library modules are byte-identical — 39 → 41 of 54 — divergence from the reference compiler stands at 3,877 tokens, and the differential corpus is 909/909.
aowli — 1 commit. Floating-point classification moved into the JavaScript runtime, and all four browser bundles were rebuilt against it.
aowlsem — 73 commits. Borrowed parameters, template expansion, overload resolution and generic instantiation. Divergence from the reference compiler fell 24% on the day, 5,138 → 3,908 tokens over 54 modules; two more modules went byte-identical, and the differential corpus grew 883 → 902 cases. Six of the day's fixes were programs the reference compiler accepts and aowlsem was rejecting outright, rather than formatting differences. The playground now checks with aowlsem by default.
aowli — 1 commit. Floating-point classification in the JavaScript environment.
🎉 aowlsem passed its 2,000th commit today — 27 days after the first, 173 of them today. 45,679 lines of Nimony, checking the language it is itself written in.
aowlsem — 173 commits. Overload resolution, enum handling and generic instantiation. Divergence from the reference compiler fell 31% on the day, 11,244 → 7,736 tokens, and two more standard-library modules are now byte-identical; three of the day's fixes were wrong-output bugs rather than formatting differences. Differential corpus 869/869 on a cold cache, diagnostics 176/176, no library module falling back to abort 54/54.
aowlparser — 16 commits. YAML and ini/nim.cfg take the byte-exact set to ten languages, and a new JSON reader runs at 2,343 MB/s where V8 manages 621 and CPython 225 on the same 9.9MB document. Every parser is now held to an outside implementation rather than to its own expectations — CPython's json over 10,029 files and 494,373 truncated prefixes, CPython's tokenize over 3,492 Python files, the official yaml-test-suite over 402 cases — which surfaced 27 disagreements in the YAML dialect alone that reproducing the input byte for byte cannot see. CSS, HTML and <style> markup inside it now fail the build when they are invalid, through a Nimony plugin; unclosed HTML elements report at the opening tag, with 3 reports across 400 real pages and all three genuine.
aowlsem — 74 commits. Overload resolution and generic-body copying: 737 tokens of divergence closed, one of them a call bound to the wrong module's function. Corpus 839/839 cold, no-abort 54/54, all 46 library rows at baseline.
aowlparser · css — 11 commits. A Nim-only parser became a library covering eight languages, each checked by reproducing its input byte for byte: 11,556 JavaScript files, 5,920 Markdown, 4,326 JSON, 2,885 Python, 1,224 CSS grammars and 150 HTML pages. Stylesheets now validate against the CSS specification's own value grammars — Bootstrap, 4,368 declarations, none invalid.
aowlcode — 2 commits. Conditional breakpoints in the debugger.
aowlsem — 171 commits. Generic instantiation, try as an expression, and lifetime hooks. Library divergence 31,170 → 30,391 tokens; corpus 799/799 cold, diagnostics 416/418, end-to-end 4/6.
aowli — 39 commits. The foreign-function boundary, and the first measured cut to what interpretation costs: string hashing as a primitive took 18.7% off interpreter work on a real compile, output byte-identical.
aowlsem — 89 commits. Lifetime hooks for reference fields, overload arity, and overload-set ordering. Four programs run end to end for the first time, 0/6 → 4/6; corpus 797/797 cold, 31 of 54 library modules byte-identical.
aowlcode — 30 commits. Running long-lived sessions unattended: supervision, restart limits, an on-disk mailbox, and attachable terminals. Gates 72/72 and 39/39, negative cases first.
aowli — 10 commits. Foreign-function crossings generated from signatures rather than hand-written bindings; TLS now runs interpreted.
aowlsem — 41 commits. End-to-end compilation, module rejection and cycle-collection hooks; five library modules the reference compiles were being rejected outright. 31 of 52 modules byte-identical, corpus 785/785. A shared test cache took one gate from 49.4s to 1.8s.
aowli — 4 commits. Nested acquisition of the machine-wide compile lock; one gate went from over 400 seconds to 146.
discord · colors · json — 7 commits. A Discord bot client on our own network stack — gateway WebSocket, REST, slash commands.
aowlsem — 93 commits. Generic instances and field lookup — five wrong-output bugs of one shape. Corpus 772/772, no-abort 46/46.
aowlabi — 20 commits. The ABI is now gated against everything that re-spells it: the JavaScript value representation, the C runtime's hand-copied offsets, and gcc at 32 bits. 122/122 layout, 208/208 heap, 1269/1269 marshalling.
aowlc — 20 commits. The C backend's two printers are compared against each other and against the reference — 73/73, exemption list empty; every module compiles and links alone, 77/77.
aowli — 25 commits. A public wrong-answer fix, released as v0.3.5. Both engines 461/461 across 53 categories, zero divergences.
aowljs — 9 commits. sizeof of aggregates now comes from the ABI layout engine rather than a table of its own. Corpus 124/124.
aowlsem — 62 commits. Type identity: eight details were missing from it, so genuinely different types could share one generic instance. Corpus 745 → 762/762; library divergence 48,579 → 42,190 tokens, 96.54% of 1,220,605 matching byte for byte — about 5,000 of that drop a re-baseline rather than new ground.
aowli — 54 commits. Hot-swapping, the foreign-function boundary and cache tooling. Hybrid 24/24, corpus 460/460 across 53 categories, destructor mode 18/18 on both engines.
aowljs — 45 commits. Value semantics on a reference-semantics target — assignment, equality, in/find, byte strings, and five statement kinds that had been dropped whole. Corpus 18 → 102/102.
aowlc — 31 commits. Three miscompiles that survived because the gate could not hear what gcc was reporting.
aowlabi — 6 commits. The gates measured the checker's sizeof rather than the struct that reaches a binary.
aowlsem — 150 commits. Library divergence fell 73,809 → 48,579 tokens (−34%), and 30 modules are byte-exact, up from 20.
aowli — 81 commits. Capability grants, destructors on the error path, and the just-in-time compiler's in-process route.
aowlc — 5 commits. Translation-unit ordering.
aowli — 124 commits. Objects can live in flat allocated memory — the storage the compiler's own token buffers use — and the interpreter grew record/replay. Replay 19/19, cross-engine 189 agreeing, 0 diverging; the interpreter now runs the real compiler end to end.
aowlsem — 48 commits. Imported templates in overload resolution, and compile-time predicates. Corpus 718/718, accept/reject 403/403, diagnostics 175/175.
aowlabi — 20 commits. The canonical-layout claim checked against the compiler for the first time, which found every inherited field at the wrong offset. 96/96 layout, 153/153 heap, 857/857 marshalling.
aowlcode — 3 commits · aowlmony — 3 commits · aowltest — 1 commit. Token cost measured for the first time; verify --memory catching dangling pointers; the test gate turned into a corpus any implementation can run against.
aowlsem — 35 commits. Compile-time evaluation moved beyond const initialisers, then got bounded by a capability policy. Corpus 685 → 701/701, const evaluation 18/18.
aowli — 21 commits. Interpreted code is now replaceable and compilable while the process runs. Corpus 449/449, hot-swap 9/9, just-in-time 6/6, policy 11/11.
aowltest — new repo, 3 commits · aowlrepl — new repo, 4 commits · aowlhost — new repo, 4 commits. Test results keyed by the hash of their transitive inputs, so an unchanged closure is never re-run (41/41); a REPL on the interpreter, cold 2.15s and warm 0.19s; and a module run as a plugin under a capability policy, with the interpreter embedded as a library.
web · css · web-state · aowlui — 20 commits. The typed HTML and CSS surface.
aowlsem — 71 commits. Macros and const initialisers stopped being matched by shape and started being run. Corpus 677/677, accept/reject 400/400, diagnostics 175/175.
aowlcode — 53 commits. Every tool re-examined for what its verdict actually rests on: 197 curated plus 116 swept cases, 107 unit, 39 end-to-end, all 8 hooks smoke-tested.
aowli — 35 commits. Silent wrong answers — plausible output, exit 0, empty stderr. 414/414, later 434/434, three-way cross-check with zero divergences.
serve — 29 commits. h2spec 95/146 → 146/146 over both h2c and TLS; 128 MiB streamed byte-exact at 6 MB peak memory.
🎉 aowlsem passed its 1,000th commit — 16 days after the first, 98 of them today, ~32,500 lines of self-hosted Nimony.
aowlsem — 98 commits. Generic instantiation: when an instance is created, and what a generic declaration may resolve while its arguments are still abstract. Byte-exact corpus 632 → 659, no-false-positive gate 23 → 35; std/sets 7,530 → 147 tokens, std/bitabs 5,863 → 1,236, std/widestrs 5,009 → 415.
aoughwl — 18 commits · aowlmcp — 2 commits.
aowlsem — 89 commits. Gained its second half: an optimizer over the checked IR — twenty-one passes to a fixpoint, kept structurally separate from the checker so the byte-parity claim and the meaning-preservation claim never share an exit path. A scale gate runs every real program three ways and demands identical output: 103 → 344 of 609 programs, and it caught nine miscompiles the small suite passed. Hot loops 5.3x, 2.8x, 1.8x; whole library modules 1–3% smaller.
aowlcode — 8 commits. 1.0: the tool gate is on by default, and aowl mode denies code searches and raw compiler invocations in favour of four bounded tools.
aoughwl — 19 commits. Anonymous sum types, construction through of-pattern matching, across module boundaries.
aowlsem — 120 commits. The half of a checker that never shows up in its output: deciding which programs are wrong. About thirty new checks and four false positives removed, each confirmed to fire for the right reason rather than by coincidence. Corpus 618 modules, accept/reject agreement 76 → 139, error-message snapshots 64 → 97, and all 71 diagnostic codes carry a long-form article.
aoughwl — 25 commits. The playground became a real in-browser IDE — multi-file projects, clone-a-repo-from-a-link, split editors, and the debugger's flame timeline, all running in the tab.
aowlsem — 123 commits. Byte-level parity against the reference's typed output: generic ref object types, value objects carrying methods, and definite assignment — reading a variable before it is set is now an error. ~21.7k lines, corpus 500/500, accept/reject 10/10, std/system clean.
aowli — 8 commits. Debugging a large program stopped meaning recompiling it: first debug of a session ~47s, every one after ~1 second. Released v0.3.3 — hybrid mode now crosses ref and seq-bearing data.
aowlsem — 118 commits. Generic type instantiation brought in line with the reference. ~18.6k lines, corpus 498/498, std/system checking clean.
aowli — 9 commits. The debugger can pause a running program and step through it interactively rather than printing snapshots after the fact, with values rendered under a size budget and single fields addressable by name. Released v0.3.2 — two shipped-runtime correctness fixes found by running a real argument parser under the interpreter.
aowlmcp — 2 commits. Speaks the MCP 2026-07-28 spec — a stateless core, mid-call input elicitation, and a tasks extension — while still serving the previous version, negotiated per request. Proven over all three transports: stdio 27/27, HTTP 15/15, HTTP/3 4/4.
aowlsem — 25 commits · aowli — 7 commits · aowlcode — 4 commits. Released aowli v0.3.1: the interpreter runs the semantic checker itself, byte-identical to a native compile — 520/520 tokens, after three root-cause fixes including an uninitialised-pointer class caught under valgrind.
aowli — 27 commits. Released v0.3.0, the correctness-complete build: both engines at zero in-scope divergence across a 423-program corpus, agreeing with each other and with native. Value semantics landed, the last OS-boundary gaps closed, and hybrid mode executed real foreign C for the first time.
aowlmony — 4 commits.
aowlabi — 3 commits, new repo. One source of truth for how values are laid out — sizes, field offsets, heap block layout, and which types cross a native boundary how. The interpreter and both backends had each kept their own copy, and they had drifted.
aowli — 34 commits. A real runtime layer: the scattered crossings into faster or foreign executors became one provider registry, one codec, and a policy that is never silently wrong. The payoff is hybrid execution — interpret the file you care about, run every other module native, byte-identical either way.
aowli — 35 commits. Became an actual runtime: flat memory, casts, allocation, unchecked arrays, file I/O, environment access, ownership hooks and refcounted ref objects, with fail-fast on unsupported calls. It runs about 92% of compiler-buildable programs with no known silent wrong answers.
aowlsem — 35 commits · aowli — 12 commits. Released aowli-release v0.1.0 — stripped binaries, a fail-closed licence gate, and no source paths or internal names.
aowlmcp — 6 commits, new repo · aowljson — new repo. Transport-independent MCP dispatch over stdio, HTTP and HTTP/3 (13/13, 6/6, 4/4), on reusable JSON values with error-as-value parsing.
serve — 11 commits · aowlcode — 5 commits.
aowlsem — 55 commits · aoughwl — 39 commits. Generics and the toolchain around them.
aoughwl — 17 commits · aowlsem — 2 commits. A light day.
aowlsem — 55 commits. A generics push: typevar calls and signatures, generic object applications with substituted field types and attached hooks, generic array bounds, var forwarding through generic parameters, and late-bound hook calls. Around it, out parameters, sink normalisation, typed pointer comparisons, and threadvar globals.
aowlsem — 126 commits. The clean-room checker's core: 397/397 corpus fixtures byte-exact, and a complete zero-diagnostic traversal of the whole of std/system — ~6,383 lines, 0 errors, 0 log lines. Parity against the reference's own output down to ~33k canonical diff lines from ~62k, a 46.5% reduction. It also grows diagnostics the reference does not have.
obfuscate · aowlup — the distribution story. Private components still ship to everyone: an IR-only obfuscator that cannot corrupt runtime data because it never touches source text, a hardening harness, and a toolchain version manager with interchangeable variants per pipeline slot.
aowlsuggest — 9 commits · aowlparser — 9 commits. Both now run client-side in the playground, so fix-its surface as you edit.
aowlparser — 44 commits. Full 310/310 structural parity with the Nim standard library — the entire stdlib round-trips — plus a real check lint mode with fix-its, three parser hangs fixed, and a hardened lexer.
aowlsem — 78 commits. A step toward a true drop-in: auto-import, real include splicing, definite assignment honouring noinit/threadvar/importc, typedesc modelled as a type, templates as an overload set, and the first value-object lifetime-hook synthesis.
aowlsuggest — 36 commits · aowlts — 22 commits · aowljs — 18 commits. The interpreter and the JavaScript backend moved onto one shared high-level IR — one lowering, many emitters.
The docs site was rebuilt from the ground up — off Jekyll onto a single-page app with instant navigation, local search and self-hosted fonts, the playground preserved byte-identically.
aowlsem — 99 commits · aowlparser — 85 commits · aowli — 26 commits. Repositioned as a ground-up Nimony toolchain, with the interop contract written down: our IR is byte-for-byte the reference's, so any Nim or Nimony program behaves identically. The compiler stages were renamed to aowl* and the docs split into reference and engineering notes.
aowlparser — 27 commits · aowlsem — 13 commits, first day · aowli — 9 commits. The hexer, the C and JavaScript backends and the checker all got their repos; the playground took 21 commits.
aowlparser — 9 commits · aowli — 5 commits. The interpreter went private, and took a 6–10× performance gain.
aowlparser — 29 commits · aowli — 6 commits. The parser was finalised against the full reference suite, byte-identical to the reference parser, and gained curly-brace support.
aowli — 24 commits · aowlparser — 7 commits. The parser and the in-browser playground were created.
aowli — 16 commits, new repo. A Nimony IR interpreter.
6 commits. A language server with a universal plugin system, and the editor extension that hosts it.
aoughwl — 22 commits · nimony-lsp — 14 commits. The core spec finalised, incremental compilation fixed, and a NIF rewriting tool created. Live diagnostics as you type.
net stack — 40 commits across eight repos. TLS 1.3 client and server, HTTPS with a concurrent worker pool, HTTP/2 and HTTP/3, a native WebSocket, dual-stack IPv6, and one-shot gzip/brotli/zstd — each tested against real clients.
nimony-lsp — 13 commits. Incremental compilation went ~1s → ~10ms, and a NIF viewing tool made live diagnostics and suggestions work as you type.
31 commits across four repos. The official aoughwl/nimony fork starts here — features, bug fixes, and a more substantial standard library — alongside the language-server side and a Claude Code plugin focused on cutting token use with Nim and Nimony.
