NOVA
A language that reads like plain instructions and compiles to pages and live HTTP services, with zero dependencies.
- Role
- Language design, implementation, tooling
- Verification
- 300+ unit tests and 57 examples run through the real CLI, per the repository handoff
- Design record
- 19 architecture decision records
- Dependencies
- None
- Stack
- JavaScript (ESM) · Node.js · npm · VS Code extension · MIT licence
Problem
Most stacks need a different language for logic, data, pages and API. NOVA explores one readable language across those layers, small enough to specify and test completely.
What I built
- Lexer, parser, AST, semantic analyzer and tree-walking interpreter for SHOW / SET / CHANGE / IF / FOR EACH / REPEAT / DO / RETURN.
- Lists, records, typed procedures, DATA named types, TRY / CATCH, a standard library and ASK input.
- Persistence with SAVE, GET and DELETE, durable across a real server restart.
- A PAGE compiler covering static HTML, data-bound content and interactive pages, where BUTTON and WHEN CLICKED compile to JavaScript.
- SERVICE / API: a live HTTP server with GET, POST with typed request bodies, DELETE and :id path parameters, serving compiled pages alongside the API.
- FORM and INPUT for typed user input, plus an editor extension for VS Code.
Architecture
Compiler and runtime layout, from src/
src/
lexer/ parser/ ast/
analyzer/ semantic checks, diagnostics
interpreter/ tree-walking evaluator
stdlib/ standard library
persistence/ SAVE / GET / DELETE, durable store
pagecompiler/ NOVA -> HTML + JavaScript
apiserver/ SERVICE / API -> live HTTP
cli.js nova run | build | serve Example source from the repository: SET total = 0 FOR EACH product IN products SHOW "{product.name}: {product.price}" CHANGE total = total + product.price END
Engineering decisions
ADR before code
Every real design choice has a record with options and reasoning, and each record lists what is deferred, so a missing feature reads as a decision rather than an accident.
Smallest correct version per milestone
Features land one milestone at a time, from v0.1 to v0.18, and the repository handoff forbids bundling adjacent milestones.
Verify through the real CLI
Generated pages are executed rather than string-matched, durability is checked by killing a spawned server and reading back from a second process, and DELETE routes are checked with a real curl.
No dependencies
Installing it reports one package. Nothing transitive to audit, and the whole toolchain stays readable.
Current state and limits
- The npm registry lists 0.15.1 as latest while the repository is at v0.18. Install from the repository for the newest features.
- It is a tree-walking interpreter, not an optimising compiler. It is a language exploration, not a production runtime.
- The language is young and has no third-party users that I can point to.