Perry: TypeScript compiler generates 2-5MB native binaries without Node.js runtime

One code source compiles to eight platforms without specializing in each language
Perry allows teams to build once and deploy across macOS, iOS, Android, Linux, Windows, watchOS, tvOS, and WebAssembly.

Perry compiles TypeScript directly to native executables (2-5MB) using SWC and LLVM, eliminating runtime dependencies and supporting 8+ platforms from single source. Unlike Bun/Deno which optimize runtime execution, Perry targets distribution scenarios where lightweight, self-contained binaries reduce adoption friction and infrastructure costs.

  • Perry generates 2-5MB native binaries from TypeScript without Node.js or external runtimes
  • Current version is 0.5.306 with generational GC and lazy JSON tape optimizations
  • Embedded V8 option for npm compatibility adds approximately 15MB to binary size
  • Compiles to 8+ platforms from single source code using SWC and LLVM architecture

Perry, a Rust-based TypeScript compiler, generates 2-5MB native binaries without Node.js or external runtimes, offering an alternative to Bun and Deno for CLI tools and desktop applications.

A new TypeScript compiler called Perry is quietly reshaping how developers think about shipping software. Built in Rust, it transforms TypeScript code directly into standalone native binaries between 2 and 5 megabytes in size—no Node.js, no Electron, no external runtime required. The current version, 0.5.306, includes optimizations like generational garbage collection and lazy JSON tape parsing, and its creators claim it outperforms Node and Bun on most benchmarks. For founders building SaaS platforms or developer tools, this is more than another build tool. It's a different way to distribute software entirely.

The architecture works through a clean combination of two mature technologies. SWC, already standard in modern tooling for its speed, handles the front-end work—parsing and transforming TypeScript at remarkable velocity. LLVM takes over from there, generating the actual native code that becomes your final binary. This approach differs fundamentally from Bun, Deno, and esbuild, which all optimize how JavaScript and TypeScript run inside a runtime environment. Perry solves a different problem: how to ship TypeScript as native software with a single, self-contained artifact. There is a trade-off. Perry offers a flag called --enable-js-runtime that embeds V8 for compatibility with npm packages, but this adds roughly 15 megabytes to the final binary. You choose based on what matters more for your use case: npm compatibility or a smaller footprint.

Understanding when to reach for Perry versus its competitors matters for your technical decisions in 2026. Perry compiles ahead-of-time to native code and excels when you need a distributable CLI, a desktop utility, a local agent, or an embedded application—anything where a single artifact without runtime dependencies reduces friction. Bun provides its own runtime based on JavaScriptCore, making it excellent for rapid development and integrated tooling, but it doesn't generate independent native binaries. Deno emphasizes security and web-standard APIs, supports TypeScript natively, but requires the Deno runtime to be installed. esbuild remains the reference for bundling speed, but its output is JavaScript, not native code. If you're building a traditional SaaS with a web frontend and API backend, Bun or Deno might be more direct. If you need a distributable CLI or desktop application, Perry fits the narrative of shipping one binary.

For founders, especially those building in Spanish-speaking markets, Perry opens concrete opportunities. First, it reduces friction in distributing tools. If you have a CLI, local agent, or utility that users need to install, a 2-to-5 megabyte binary with no external dependencies removes barriers to adoption. Your users don't need to install Node, manage versions, or handle dependency chains. Second, native binaries with less runtime overhead can accomplish more work with fewer resources. For specific workloads—local processing, edge workers, backend utilities—this translates to lower infrastructure costs at scale. Third, one code source compiles to eight or more platforms. Your team doesn't need to specialize in Swift for iOS, Kotlin for Android, or C# for Windows.

There are concrete steps you can take this week. Evaluate specific use cases rather than replacing your entire Node or Bun stack immediately. Identify components where a native binary adds real value: a CLI tool, local agents, deployment utilities. Clone the Perry repository, compile a small tool, and measure what matters—binary size, startup time, compatibility with the libraries you actually use. Document the trade-offs. If you need extensive npm compatibility, the embedded V8 mode adds 15 megabytes; decide whether that overhead is worth it versus maintaining a separate runtime. Monitor the ecosystem's maturity. Perry is at version 0.5.x. For mission-critical production work, verify compatibility with your key dependencies before committing your roadmap.

Perry exists within a larger trend. Rust-native tooling is replacing traditional JavaScript tools across 2025 and 2026—SWC, esbuild, Turbopack all follow this philosophy, prioritizing speed and efficiency. The persistent challenge is npm ecosystem compatibility. Many libraries assume Node.js runtime APIs, making 100 percent native compilation difficult without additional support. Perry acknowledges this limit explicitly through its embedded V8 option. For startups, the lesson is practical: use Rust-native tooling for speed, JavaScript runtimes for compatibility, and ahead-of-time native compilation for specific cases. It's not a competition where one tool wins. It's about choosing the right tool for each layer of your stack.

Before adopting Perry in production, weigh the risks. The project is actively developed at version 0.5.306. For enterprise or critical systems, evaluate stability against more mature tools like Bun or Deno. If your code depends heavily on npm packages with Node.js API dependencies, you may face incompatibilities. Test exhaustively before migrating. Perry claims superiority over Node and Bun on most benchmarks, but public documentation doesn't include complete testing methodology. Validate with your own workloads before making architectural decisions based solely on marketing claims.

Perry represents a genuine opportunity for founders who need to distribute TypeScript software as lightweight native binaries. The 2-to-5 megabyte size, multi-platform support, and SWC plus LLVM architecture make it a viable option for CLIs, desktop utilities, and specific stack components. It's not a universal replacement for Node, Bun, or Deno. The real value emerges in use cases where simple distribution, fast startup, and the absence of runtime dependencies are critical. For traditional SaaS with web frontend and API backend, runtime-based tools remain more practical. Your job as a founder is to ask: does your product benefit from self-contained native binaries? If yes, Perry deserves a place in your 2026 technology evaluation.

Perry solves a different problem: how to ship TypeScript as native software with a single, self-contained artifact
— Analysis of Perry's positioning versus Bun, Deno, and esbuild
La Conversación del Hearth Otra perspectiva de la historia
Inventor

Why does a 2-to-5 megabyte binary matter when most developers have gigabytes of storage?

Model

It's not really about storage. It's about friction. A user downloads your CLI, runs it immediately, no installation steps, no version conflicts. That's adoption.

Inventor

But doesn't the embedded V8 option defeat the purpose if you need npm packages?

Model

It does add 15 megabytes, yes. But you're choosing consciously. Some projects don't need npm at all. Others do, and they accept the trade-off. That clarity is valuable.

Inventor

How does this compare to just using Bun for everything?

Model

Bun is excellent for development and running TypeScript servers. Perry is for shipping a tool your users install once and forget about. Different problems.

Inventor

What's the biggest risk for a startup betting on Perry right now?

Model

It's at 0.5.x. The ecosystem around it is still forming. If your core dependencies don't compile natively, you're stuck. You have to test thoroughly before committing.

Inventor

So this is really for CLI tools and utilities, not web applications?

Model

Exactly. Desktop apps, local agents, command-line tools, embedded systems. Anywhere you want to ship a single binary. Web applications still need a runtime.

Inventor

Why hasn't this existed before if it's so useful?

Model

The pieces—SWC, LLVM, Rust maturity—only came together recently. And there's still the npm compatibility problem. Perry acknowledges it rather than pretending it doesn't exist.

Contáctanos FAQ