scriptc compiles TypeScript and JavaScript to native executables and WebAssembly. It uses TypeScript's type information to compile supported code to native instructions. Executables run without Node.js or a JavaScript engine.
Application code and eligible npm dependencies compile to native instructions. Unsupported operations produce diagnostics; there is no runtime JavaScript engine fallback.
scriptc is experimental and supports a subset of JavaScript, TypeScript, and Node.js APIs. See the limitations and Node.js compatibility reference before using it for an existing project.
Install with Node.js 24 or later and npm:
$ npm install -g scriptcThe installed compiler runs natively on supported macOS, Linux, and Windows hosts. Native compilation and execution do not require Node.js. Standalone compiler archives are also available from GitHub Releases.
Executable builds require a platform linker and SDK/sysroot. See the quickstart for prerequisites and platform support for host requirements, cross-compilation, and WebAssembly.
Create hello.ts:
const who = process.argv.length > 2 ? process.argv[2] : "world";
console.log(`hello, ${who}`);Compile and run it in one step:
$ scriptc run hello.ts
hello, worldOr write a standalone executable:
$ scriptc build hello.ts -o hello
$ ./hello scriptc
hello, scriptcThese examples use POSIX shell syntax. On Windows, build hello.exe and run it with .\hello.exe.
Use scriptc coverage hello.ts to check which operations compile statically and which operations are unsupported. See coverage reports for details.
Supported Node APIs compile to the native runtime. For example, server.ts:
import { createServer } from "node:http";
const server = createServer((req, res) => {
res.setHeader("content-type", "application/json");
res.end(JSON.stringify({ path: req.url }));
});
server.listen(8080, () => {
console.log("listening on http://localhost:8080");
});$ scriptc build server.ts -o server
$ ./server
listening on http://localhost:8080Eligible npm packages compile to native code by default. The executable does not read node_modules at runtime.
Create cli.ts:
import pc from "picocolors";
console.log(pc.green("hello from scriptc"));$ npm install picocolors
$ scriptc build cli.ts -o cli
$ ./cli
hello from scriptcPackage support is partial. See npm dependencies for eligibility, package resolution, and compilation diagnostics.
- Quickstart: installation and your first executable.
- CLI reference: commands, options, and output formats.
- Native program objects: use compiler output in external builds.
- Native FFI: call C ABI functions from compiled programs.
- WebAssembly modules: build and embed WASI modules.
- Examples: programs and integration examples in this repository.
See CONTRIBUTING.md for source setup, testing, native artifact builds, and docs development.