visaljs

JavaScript in. A native binary out.

A simple ahead-of-time compiler. It reads your JavaScript, turns it into C, and compiles it to a native binary, all in one step.

Smaller binaries, less memory

One small binary to copy and run, with nothing else to install. The same servers, from a bare node:http one to Next.js, built by visaljs, Bun and Node.

HTTP server

Binary size

  • visaljs3.2 MB
  • Bun91 MB
  • Node127 MB

Memory under load

  • visaljs13.2 MB
  • Bun62.8 MB
  • Node81.2 MB
Hono

Binary size

  • visaljs4.5 MB
  • Bun91 MB
  • Node127 MB

Memory under load

  • visaljs18.4 MB
  • Bun78.7 MB
  • Node106.6 MB
Express

Binary size

  • visaljs11 MB
  • Bun92 MB
  • Node128 MB

Memory under load

  • visaljs28.0 MB
  • Bun87.8 MB
  • Node102.3 MB
vinext

Binary size

  • visaljs20 MB
  • Bun—
  • Node—

Memory under load

  • visaljs57.8 MB
  • Bun244.0 MB
  • Node528.8 MB
Next.js

Binary size

  • visaljs45 MB
  • Bun—
  • Node—

Memory under load

  • visaljs108.3 MB
  • Bun270.8 MB
  • Node518.0 MB

Measured nightly on GitHub's runners, last on 2026-10-19. Node and Bun can't build Next.js or vinext into one binary: their rows runnext start and vinext start, without a size.

Node compatibility

Use Node v24's built-in modules in your compiled program.

89.2%

30/58 modules fully supported

SupportedPartiallyNot yet
  • assert
  • assert/strict
  • async_hooks
  • buffer
  • console
  • diagnostics_channel
  • domain
  • events
  • fs/promises
  • https
  • net
  • os
  • path
  • path/posix
  • path/win32
  • punycode
  • querystring
  • readline/promises
  • sea
  • stream
  • stream/promises
  • string_decoder
  • sys
  • test/reporters
  • timers
  • timers/promises
  • trace_events
  • util
  • util/types
  • zlib
  • child_process
  • cluster
  • constants
  • crypto
  • dns
  • dns/promises
  • fs
  • http
  • http2
  • inspector
  • inspector/promises
  • module
  • perf_hooks
  • process
  • readline
  • repl
  • stream/consumers
  • stream/web
  • test
  • tls
  • tty
  • url
  • v8
  • vm
  • worker_threads
  • dgram
  • sqlite
  • wasi

How to use

A single command: point it at your JavaScript, and visaljs does its best to compile it, npm packages included. All you need is Node 22 or later and a C compiler.

Compiling a file
npx visaljs build app.js
./app

Builds app.js and the npm packages it imports into one native binary, ./app.

Compiling a project
npx visaljs build
./my-app

In your project's folder: visaljs tries to detect your framework and entry file, and compiles them into one native binary named after the folder.