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.

61,778lines of NURL in the compiler
1,454compiler test programs
240stdlib 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-10-22Benchmark sources →CI run →
Benchmark runtime in milliseconds; lower is better.
BenchmarkNURLCRustNodePython
lcg20M-step 64-bit LCG + xorshift39 ms39 ms40 ms1,907 ms5,284 ms
packet_classifier25M unpredictable branches57 ms56 ms57 ms164 ms4,456 ms
ring_write20M ring-buffer stores43 ms43 ms43 ms69 ms6,408 ms
histogram_bins20M binned increments41 ms41 ms41 ms68 ms6,079 ms
prefix_scan1M 16-wide prefix scans22 ms22 ms22 ms67 ms4,552 ms
binary_search5M lower-bound searches38 ms38 ms41 ms108 ms5,961 ms
sort_window2M 8-element bubble sorts27 ms27 ms27 ms201 ms12,051 ms
bloom_filter4M Bloom-filter queries16 ms18 ms19 ms2,858 ms7,370 ms
hash_join5M hash-table probes27 ms28 ms29 ms3,443 ms8,279 ms
sieveSieve of Eratosthenes to 10M22 ms19 ms20 ms71 ms3,262 ms
fibRecursive fib(35)30 ms30 ms30 ms134 ms1,358 ms
collatzLongest Collatz chain below 100k13 ms12 ms13 ms52 ms738 ms
matmul256x256 integer matrix product34 ms34 ms34 ms84 ms3,192 ms
json_parse20 parses of a 64 KB document8.6 ms8.8 ms12 ms39 ms40 ms
nbody500k n-body integration steps25 ms40 ms25 ms101 ms3,103 ms
chacha20ChaCha20 over 16 MiB (RFC 8439)7.7 ms41 ms34 msn/an/a
poly1305Poly1305 MACs over 64 MiB (RFC 8439)24 ms32 ms21 msn/an/a
blake2bBLAKE2b-512 over 32 MiB (RFC 7693)44 ms65 ms69 msn/an/a
sha512SHA-512 over 16 MiB (FIPS 180-4)47 ms51 ms50 msn/an/a
x255191000 chained X25519 scalar mults (RFC 7748)44 ms49 ms50 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

240 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 →