a language built from scratch, in public

Code that reads like English.
Runs like machine code.

Nova is a small language with no indentation rules and no semicolons. Write it once, then run the exact same .nova file three different ways — interpreted in Python, interpreted in JavaScript, or compiled straight to native x86-64 machine code.

playground.nova — running live in your browser
// output appears here — press Run
This is the real Nova interpreter, running as JavaScript in your browser right now — not a mockup.
one language, three engines

The same source file, run three different ways

Nova didn't start as a compiler project — it grew into one. Each stage kept the exact same syntax and semantics while trading simplicity for speed.

01 — reference implementation

Python interpreter

A hand-written lexer, recursive-descent parser, and tree-walking interpreter in a single readable file. Built first, to prove the language design before anything else.

nova.py
02 — zero-dependency port

JavaScript interpreter

The same grammar and behavior, ported line-for-line to run anywhere Node runs — verified to produce byte-for-byte identical output to the Python version on every test program.

nova.js
03 — real compiler

x86-64 machine code

Compiles Nova straight to GAS assembly, which assembles and links into a static Linux binary. No interpreter, no libc, no runtime at all — just tagged 64-bit values and raw syscalls.

novac.js → real .s / .o / ELF
syntax

Built to be easier to read than Python

No indentation sensitivity, no colons, no semicolons. Blocks just end with end.

factorial.nova
func factorial(n)
  if n <= 1 then
    return 1
  end
  return n * factorial(n - 1)
end

say factorial(10)
factorial.py
def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

print(factorial(10))
why compile at all

Skipping the interpreter entirely

235×
faster, same source file

fib(30), computed recursively — no tricks, no memoization, the same Nova code on both sides.

JavaScript interpreter
7.30s
compiled to x86-64
0.031s