NURL

NURL

A compiled language without a virtual machine, garbage collector, or interpreter — designed as a target for LLM code generation, with deterministic builds and native LLVM performance.

78,880lines of NURL in the compiler
1,687compiler test programs
243stdlib modules
11tested targets
65registry packages
ContributorsHindurableiljasrb

WHY NURL

Built for generated code

NURL keeps generated code easy to parse. Fixed arity removes precedence ambiguity, short dependency windows limit context, and the grammar fits on one page.

Regular prefix-arity grammar

Every operator has a fixed arity. There is no infix syntax or precedence table.

Local semantics

A token’s meaning depends on a short span of preceding tokens.

Single-owner memory

Values auto-drop at scope exit. Borrow checking, an explicit unsafe/raw boundary, and a mechanized Lean 4 proof (formal/) guarantee memory safety.

Deterministic compiler

Bootstrap compiles the compiler twice and requires identical LLVM IR from both runs.

LLVM-backed

One LLVM pipeline targets desktops, servers, WebAssembly, RISC-V, and embedded systems.

Self-hosting

The compiler is written in NURL and builds itself from source.

SYNTAX

Prefix notation, end to end

NURL uses OP ARG1 ARG2 …. There is no operator precedence or infix syntax.

Add two integers

@ add i a i b → i { ^ + a b }

( add 3 4 )     // → 7

FizzBuzz

: ~ i i 1
~ <= i 100 {
    ? == 0 % i 15 { ( nurl_print `FizzBuzz\n` ) }
    ? == 0 % i 3  { ( nurl_print `Fizz\n` ) }
    ? == 0 % i 5  { ( nurl_print `Buzz\n` ) }
    { ( nurl_println_int i ) }
    = i + i 1
}

See the language reference for generics, traits, pattern matching, errors, channels, compile-time evaluation, and async runtime support.

BENCHMARKS

Measured runtime performance

20 verified benchmarks compare NURL with C, Rust, Node, and Python. Each implementation must produce the same output before timing.

5 languagesGitHub Actions ubuntu-latest runnerMeasured 2026-11-07Benchmark sources →CI run →
Benchmark runtime in milliseconds; lower is better.
BenchmarkNURLCRustNodePython
lcg20M-step 64-bit LCG + xorshift41 ms41 ms41 ms1,813 ms4,963 ms
packet_classifier25M unpredictable branches59 ms58 ms59 ms169 ms4,056 ms
ring_write20M ring-buffer stores44 ms44 ms45 ms71 ms6,220 ms
histogram_bins20M binned increments42 ms43 ms43 ms75 ms5,671 ms
prefix_scan1M 16-wide prefix scans24 ms24 ms24 ms69 ms4,445 ms
binary_search5M lower-bound searches42 ms40 ms43 ms111 ms5,973 ms
sort_window2M 8-element bubble sorts29 ms29 ms29 ms199 ms11,923 ms
bloom_filter4M Bloom-filter queries19 ms20 ms21 ms2,771 ms6,964 ms
hash_join5M hash-table probes29 ms29 ms32 ms3,458 ms7,757 ms
sieveSieve of Eratosthenes to 10M26 ms24 ms25 ms75 ms3,444 ms
fibRecursive fib(35)28 ms33 ms33 ms138 ms1,154 ms
collatzLongest Collatz chain below 100k15 ms14 ms15 ms56 ms714 ms
matmul256x256 integer matrix product36 ms35 ms36 ms77 ms3,138 ms
json_parse20 parses of a 64 KB document8.4 ms14 ms19 ms41 ms37 ms
nbody500k n-body integration steps26 ms42 ms28 ms105 ms3,006 ms
chacha20ChaCha20 over 16 MiB (RFC 8439)9.9 ms44 ms36 msn/an/a
poly1305Poly1305 MACs over 64 MiB (RFC 8439)14 ms34 ms23 msn/an/a
blake2bBLAKE2b-512 over 32 MiB (RFC 7693)46 ms67 ms71 msn/an/a
sha512SHA-512 over 16 MiB (FIPS 180-4)50 ms50 ms52 msn/an/a
x255191000 chained X25519 scalar mults (RFC 7748)35 ms51 ms52 msn/an/a

Median wall-clock time for the full process. Lower is better. NURL is highlighted only when its displayed time is lower than every other displayed time.

GET STARTED

Start with NURL

Install a release

curl -fsSL https://nurl-lang.org/install.sh | sh
irm https://nurl-lang.org/install.ps1 | iex
Install guide →

Editor support

The VS Code extension also works in Cursor and Windsurf, with diagnostics, completion, and formatting.

Editor guide →

TARGETS

One LLVM pipeline across targets

The compiler emits target-agnostic LLVM IR for desktop, server, browser, unikernel, and embedded targets.

Linux x86_64
Windows x86_64
macOS x86_64 and ARM64
FreeBSD x86_64
WebAssembly
Linux ARM64
Linux RISC-V64
Unikernel x86_64, ARM64, and RISC-V64
Milk-V Duo
ESP32 Xtensa
ESP32-C3/C6

Embedded hardware. NURL runs an HTTP file server on the Milk-V Duo and drives ESP32 GPIO through memory-mapped registers.

Browser builds. The playground compiles to wasm32-wasi in your tab and can cross-compile downloadable native binaries.

Bootable programs. The unikernel path links NURL programs without a host OS for x64, ARM64, and RISC-V targets.

STANDARD LIBRARY

243 modules, included with the toolchain

The standard library is plain NURL source: core types, general-purpose modules, and optional higher-level integrations.

Network

TCP, UDP, Post-Quantum TLS 1.3, QUIC, HTTP/1.1, HTTP/2, HTTP/3, WebSocket, MQTT, SMTP, and peer-to-peer networking.

Data

JSON, Protobuf, Zstandard, TOML, YAML, XML, MessagePack, CBOR, CSV, PostgreSQL, and SQLite.

Concurrency

Threads, mutexes, channels, atomics, and a stackful M:N async runtime.

Core

Collections, arbitrary-precision numbers, regex, crypto, compression, UUIDs, paths, and processes.

AI and MCP

Anthropic API support plus MCP clients, servers, sessions, and registries.

Tooling

LSP, formatter, documentation tools, test and benchmark runners, and a differential fuzzer.

Browse the standard library →

PROJECTS

NURL projects

The compiler itself

A self-hosting compiler that produces identical LLVM IR in two compilation rounds.

Explore →

A Game Boy emulator

A complete DMG emulator compiled to WebAssembly for the browser.

Explore →

The playground backend

NURL serves the playground, build service, MCP endpoint, and package registry.

Explore →

Examples

Examples include Game of Life, HTTP/2, MCP servers, agents, and embedded targets.

Explore →

PACKAGES

Packages, one command away

The registry supports semver ranges, reproducible lockfiles, and signed tarballs verified by nurlpkg before unpacking.

nurllama
whisper
onnx
tensor
grad
yoloe
nwasm
image
nq

MCP SERVER

NURL tools for agents

Connect an MCP client to build, run, and cross-compile NURL without a local toolchain.

claude mcp add --transport http nurl https://play.nurl-lang.org/mcp
Read the MCP setup guide →

REFERENCES

Source, specification, and release history

Documentation

Guides and language reference for installing, writing, and running NURL.

Read the docs →

README

A repository overview of the language, runtime, and build pipeline.

Open README →

Formal grammar

The versioned EBNF grammar and historical snapshots.

Open grammar →

Package registry

Browse packages, source, and generated API documentation.

Open registry →