Skip to content

aoughwl ​

aoughwl is a rewrite of the Nim / Nimony compiler as a set of separate programs: a parser, a type checker, a lowering pass, and several code generators. Each one reads a file and writes a file, so you can stop after any stage and look at what it produced.

The intermediate format is AIF, which is byte-for-byte Nimony's NIF. That means our stages and Nimony's can be mixed: nifler, nimsem and hexer read and write the same files as aowlparser, aowlsem and aowlhexer. We wrote each stage from scratch and check it against the original by diffing the output bytes.

The playground runs the parser, checker and interpreter in your browser, with nothing to install.

Status ​

  • Parser: byte-exact against nifler on the whole compiler tree, with no crashes or hangs across four corpora.
  • Type checker: 924 of 941 corpus cases byte-exact, and std/system type-checks to within 89 tokens (measured 2026-09-09, on Windows).
  • Lowering: still runs Nimony's own passes. The page says so.

Everything that is missing, and why, is on the parity page.

Stages ​

 .nim ─► aowlparser ─► aowlsem ─► aowlhexer ─┬─ aowlc   C / native
         parse         typecheck  lower       ├─ aowljs  JavaScript
                                              ├─ aowlweb JavaScript + WASM
                                              ├─ aowli   interpreter
                                              └─ aowlts, aowlpy  TypeScript, Python
StageWhat it does
aowlparserNim source → .p.nif. Self-hosted, and runs in a browser.
aowlsem.p.nif → typed .s.nif: symbols, overloads, generic instantiation.
aowlhexer.s.nif → .c.nif: ARC, closures, iterators, exceptions, monomorphisation. Private.
aowlmonyThe driver. One command from .nim to a native binary, an interpreted run, or a web build.
aowlrtThe runtime (strings, seqs, ARC) that the C and JS backends link against.
aowlhlA shared high-level IR that feeds the TypeScript and Python emitters.

Backends ​

BackendOutput
aowlcC, linked with gcc.
aowljsJavaScript, close to native speed.
aowlwebJavaScript and WebAssembly over one linear-memory model, with an async runtime.
aowliA tree-walking interpreter and a bytecode VM, plus a stepping debugger.
aowltsTypeScript.
aowlpyPython.

JavaScript engine ​

ProjectWhat it does
aowljs-engineRuns JavaScript: an interpreter and an x86-64 JIT written in nimony. Passes 53,477 of 53,479 test262 tests; faster than QuickJS and V8's interpreter on its benchmarks.

Tools ​

ToolWhat it does
aowlupInstalls and selects the components.
aowlcodeClaude Code plugin and MCP server for working on the toolchain.
aowllspLanguage server and VS Code extension.
aowlsuggestDiagnostics and quick-fixes.
aowlfmtFormatter. It re-parses its output and leaves your file alone if anything but whitespace changed.
aowltestTest runner. It skips tests whose inputs are unchanged and reports the cache hit rate.
aowlhostRuns a module as a plugin with no capabilities unless you grant them.
aowllensReads .s.nif and prints JSON: declarations, outline, type at a position.

Libraries: net stack (TCP, TLS 1.3, HTTP, WebSocket), LLM clients, web / html / css, regex, unicode, jit, ovh.

Source and price ​

Paid: aowli, its debugger, and the TypeScript, Python and JavaScript/WASM backends are one $9.99/month subscription, installed with aowlup login YOUR-KEY. See the store page. A second product, Jester, is upcoming at $19.99/month.

Public repos: aowlparser, aowlmony, aowlup, aowlrt, aowlhl, aowlfmt, aowllsp, aowlsuggest, aiflens, aowljs, aowljs-engine, aowlc.

Private repos: aowlsem, aowlhexer, aowlhost, aowlcode, aowltest, and the four paid components (aowli, aowlweb, aowlts, aowlpy). The docs for all of them are public.

Contact ​

Ask on Discord (timbuktu_guy). Questions about how something works are welcome, and so is disputing the parity numbers.

aoughwl — self-hosted platform for things n stuff. Contact / Support on Discord for access to the private backends.