Perry
en
v0.5.306 — generational GC + lazy JSON tape default, faster than Node and Bun on most benchmarks

One Codebase. Every Platform.
Native Performance.

Perry compiles TypeScript to native GUI and CLI apps on macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly, and the Web. No runtime. No Electron. Just native binaries.

terminal
$ perry compile main.ts
Compiling main.ts...
✓ Compiled executable: main (2.3 MB)

$ ./main
Hello, World!
10
Targets
25+
Native UI widgets
<50 ms
Startup time
App Store
Ready

Why Perry?

Everything you need to compile TypeScript to native applications

noRuntime
fastCompilation
smallBinaries
deterministicBuilds
stdLib
v8Runtime
widgets
plugins
threading
i18n

See What People Build

Real native apps, compiled from TypeScript. No Electron, no web views — just native UI on every platform.

Mango

Mango

Native MongoDB GUI — built entirely in TypeScript

macOSLinuxWindows
Mango — document editor
Mango — query explorer
Hone

Hone

Native AI-powered code editor — TypeScript to native binary

macOSiOSWeb
Hone — native AI code editor

Native on Every Platform

Perry compiles your TypeScript to native UI frameworks, WebAssembly, and JavaScript — not web views, not Electron. Real native widgets on every platform, plus the web.

🍎
macOS
Stable
📱
iOS
Stable
📲
iPadOS
Stable
watchOS
Stable
📺
tvOS
Stable
🤖
Android
Stable
🐧
Linux
Stable
🪟
Windows
Stable
🌐
Wasm
Stable
💻
Web
Stable

From Code to App Store

Perry doesn't just compile your app — it gets it into your users' hands.

perry compileCompile & sign
perry publishPackage & submit
Stores & DownloadsApp Store, Play Store, direct
perry verifyTest every platform

Build & Sign

Cross-platform builds from one command. Code signing for macOS, iOS, Android, and Windows handled for you. No wrestling with Xcode provisioning profiles or Android keystores.

Distribute

Push to the App Store, Play Store, or ship direct downloads. Perry Publish handles packaging, notarization, and submission.

Verify

Powered by Geisterhand. Automated UI testing across all 6 platforms. Know your app works everywhere before your users tell you it doesn't.

Free for open-source projects. Plans for teams → /publish

Framework Comparison

The only framework that checks every box

TypeScript compiled to native code. Real platform widgets. No runtime overhead.

FrameworkLanguageNative CodeNative WidgetsRuntime Overhead
PerryTypeScript✓ Native compiled✓ Real platform widgets✓ Zero runtime overhead
React NativeJS / TSJS bridgePartialJS engine + bridge
FlutterDartAOTNo shared UIDart VM
ElectronJS / TSChromium runtimeHTML mimicsChromium + Node

Write TypeScript, Ship Native

Use familiar TypeScript syntax and APIs. Perry handles the rest.

hello.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);

// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
Native binary

Performance Comparison

Native compilation delivers unmatched efficiency

Binary Size
1.8 MB
Bun 96 MB · Node 110 MB
Startup Time
<50 ms
Bun ~200 ms · Node ~800 ms
Runtime Dependencies
None
Bun + Node need runtimes
Memory Overhead
Minimal
Bun ~80 MB · Node ~120 MB

Get Started

Install Perry and start compiling TypeScript to native executables

Homebrew (macOS)

brew install perry-ts/perry
Requires Homebrew. Supports macOS arm64 and x86_64.

APT (Debian/Ubuntu)

apt-get install perry
Supports x86_64 and arm64 Linux.

Windows (winget)

scoop install perry-ts/perry
Requires Windows Package Manager. Supports Windows x86_64 and arm64.

Feature Support

Comprehensive TypeScript and Node.js API coverage

Core Language

  • Numbers64-bit floating point (f64)
  • StringsUTF-8, all common methods
  • Booleanstrue/false, logical operators
  • ArraysTyped and mixed-type arrays
  • ObjectsObject literals and field access
  • BigInt256-bit integer support
  • EnumsNumeric and string enums

Functions

  • Function DeclarationNamed functions
  • Arrow Functions() => {} syntax
  • Default ParametersParameters with defaults
  • Rest Parameters...args syntax
  • ClosuresIncluding mutable captures
  • Higher-OrderFunctions as arguments/returns
  • Async/AwaitAsync function support

Classes

  • Class DeclarationBasic class syntax
  • ConstructorsWith parameters
  • Private Fields (#)ES2022 #privateField syntax
  • Static Methods/FieldsClass-level members
  • Getters/Settersget/set accessors
  • Inheritanceextends keyword
  • Super Callssuper() constructor calls

Type System

  • Type AnnotationsExplicit type declarations
  • Type InferenceAutomatic type detection
  • GenericsMonomorphization (like Rust)
  • InterfacesInterface declarations
  • Union Typesstring | number support
  • Type Guardstypeof operator
  • Type Aliasestype X = ... declarations

Standard Library

  • fsreadFileSync, writeFileSync, existsSync, etc.
  • pathjoin, dirname, basename, extname, resolve
  • cryptorandomBytes, randomUUID, sha256, md5
  • osplatform, arch, hostname, memory info
  • Bufferfrom, alloc, toString, slice, copy
  • child_processexecSync, spawnSync
  • JSON/Math/DateFull implementations
Full Support
Partial

30+ Native npm Packages

Popular npm packages reimplemented in native Rust. No npm install, no node_modules, just fast native code.

Database

mysql2pgmongodbbetter-sqlite3ioredis

Security

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Data Processing

cheeriosharpzliblodash

Date & Time

dayjsmomentdate-fnsnode-cron

Utilities

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Just import and use - Perry automatically uses the native implementation

How It Works

From TypeScript source to native executable in seconds

TypeScript.ts files
SWC
ParserFast parsing
HIR
TransformMonomorphization
LLVM
CodegenMachine code
Executable2-5 MB binary

Want to know how the compiler works under the hood? Compiler internals