Appearance
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
nifleron the whole compiler tree, with no crashes or hangs across four corpora. - Type checker: 924 of 941 corpus cases byte-exact, and
std/systemtype-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| Stage | What it does |
|---|---|
| aowlparser | Nim 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. |
| aowlmony | The driver. One command from .nim to a native binary, an interpreted run, or a web build. |
| aowlrt | The runtime (strings, seqs, ARC) that the C and JS backends link against. |
| aowlhl | A shared high-level IR that feeds the TypeScript and Python emitters. |
Backends
| Backend | Output |
|---|---|
| aowlc | C, linked with gcc. |
| aowljs | JavaScript, close to native speed. |
| aowlweb | JavaScript and WebAssembly over one linear-memory model, with an async runtime. |
| aowli | A tree-walking interpreter and a bytecode VM, plus a stepping debugger. |
| aowlts | TypeScript. |
| aowlpy | Python. |
JavaScript engine
| Project | What it does |
|---|---|
| aowljs-engine | Runs 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
| Tool | What it does |
|---|---|
| aowlup | Installs and selects the components. |
| aowlcode | Claude Code plugin and MCP server for working on the toolchain. |
| aowllsp | Language server and VS Code extension. |
| aowlsuggest | Diagnostics and quick-fixes. |
| aowlfmt | Formatter. It re-parses its output and leaves your file alone if anything but whitespace changed. |
| aowltest | Test runner. It skips tests whose inputs are unchanged and reports the cache hit rate. |
| aowlhost | Runs a module as a plugin with no capabilities unless you grant them. |
| aowllens | Reads .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.

