// 1.0 — public release

Run JavaScript in native apps. Everywhere.

QuickJS plus a clean adapter pattern plus a build tool you understand. Wire it to any C, C++, or Rust library — and write all your application logic in JavaScript. Desktop, mobile, web, edge, middleware. Single native binary out.

~/hello-world — nr build
$nr new hello-world --template=desktop
scaffolded hello-world (desktop / appgui adapter)
 
$cd hello-world && nr build
compiling main.js → quickjs bytecode
linking adapters: appgui, fs, process
emitting native binary for linux/x86_64
built ./dist/hello-world in 1.4s
binary size: 2.8 MB
 
$./dist/hello-world
How it works

QuickJS, an adapter pattern, and a build tool.

Not a framework. Not a bridge. A repeatable methodology for connecting JavaScript to any native library, with reference adapters that ship today.

QuickJS engine

Fabrice Bellard's remarkable JavaScript engine, embedded unmodified. Small, fast, MIT-licensed. ES2023-compliant. The engine you've been waiting for.

Adapter pattern

A clean, repeatable way to wire QuickJS to any C, C++, or Rust library. Two or three core files form the substrate. Every adapter follows the same shape.

Build tool

One CLI. nr new scaffolds, nr build emits a single native binary. No framework lock-in, no runtime dependencies.

Cross-platform

Same JavaScript source, every major target. Desktop, mobile, web, edge, middleware. 90%+ shared logic across all platforms.

Small attack surface

You ship exactly the adapters you use. Not 30MB of Electron. Not Node's entire standard library. Native binary scoped to your actual dependencies.

Open ecosystem

Ship reference adapters. Browse the catalog. Write and publish your own. The adapter pattern is the contract; everything else is up to you.

373K
ctx / sec
~3 MB
typical binary
8
target platforms
0
runtime deps
JavaScript controls native

Write JavaScript. Drive native libraries.

Adapters expose native libraries to JavaScript with zero marshalling overhead. Your JS code talks directly to compiled C, C++, or Rust — no IPC, no serialization, no bridge tax.

// example: SQLite adapter, ~10 lines

// hello-world / main.js
import { open } from "nr:sqlite";
import { window } from "nr:appgui";

const db = open("./data.db");
db.exec("CREATE TABLE IF NOT EXISTS notes (text TEXT)");

const w = window({ title: "Notes", width: 600 });
w.on("submit", (text) => {
  db.exec("INSERT INTO notes VALUES (?)", [text]);
});

w.show();
Targets

Eight platforms. Same source.

Every target ships today. No "coming soon" — the build tool emits native binaries for every platform listed below from a single JavaScript codebase.

Linux
macOS
Windows
iOS
Android
Web (WASM)
Edge
Middleware
Get started

Run your first native binary in 15 minutes.

Install the CLI, scaffold a template, and ship a native binary on your machine. No framework, no Electron, no surprises.

$ npm install -g nativeruntime