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.

36,757lines of NURL in the compiler
1,102compiler test programs
232stdlib modules
11tested targets
63registry 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 drop at scope exit. Borrow checking rejects use-after-move, double-free aliases, and escaping captures.

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

15 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-09-19Benchmark sources →CI run →
Benchmark runtime in milliseconds; lower is better.
BenchmarkNURLCRustNodePython
lcg20M-step 64-bit LCG + xorshift39 ms39 ms39 ms2,056 ms5,224 ms
packet_classifier25M unpredictable branches56 ms56 ms56 ms162 ms4,327 ms
ring_write20M ring-buffer stores42 ms42 ms42 ms67 ms6,282 ms
histogram_bins20M binned increments40 ms41 ms40 ms67 ms6,220 ms
prefix_scan1M 16-wide prefix scans22 ms22 ms22 ms64 ms4,452 ms
binary_search5M lower-bound searches39 ms38 ms37 ms106 ms5,967 ms
sort_window2M 8-element bubble sorts27 ms27 ms27 ms198 ms11,534 ms
bloom_filter4M Bloom-filter queries17 ms18 ms18 ms2,866 ms7,870 ms
hash_join5M hash-table probes27 ms28 ms29 ms3,450 ms8,689 ms
sieveSieve of Eratosthenes to 10M21 ms20 ms21 ms70 ms3,748 ms
fibRecursive fib(35)26 ms31 ms26 ms131 ms1,391 ms
collatzLongest Collatz chain below 100k12 ms12 ms12 ms52 ms731 ms
matmul256x256 integer matrix product33 ms33 ms33 ms78 ms3,245 ms
json_parse20 parses of a 64 KB document10 ms9.0 ms12 ms36 ms39 ms
nbody500k n-body integration steps25 ms40 ms24 ms102 ms3,081 ms

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

232 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, TLS, HTTP/1.1, HTTP/2, WebSocket, MQTT, SMTP, and peer-to-peer networking.

Data

JSON, 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 →