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.
$ perry compile main.ts
Compiling main.ts...
✓ Compiled executable: main (2.3 MB)
$ ./main
Hello, World!Real apps, compiled from TypeScript with Perry.
Why Perry?
Everything you need to compile TypeScript to native applications
See What People Build
Real native apps, compiled from TypeScript. No Electron, no web views — just native UI on every platform.
Mango
Native MongoDB GUI — built entirely in TypeScript


Hone
Native AI-powered code editor — TypeScript to native binary

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.
From Code to App Store
Perry doesn't just compile your app — it gets it into your users' hands.
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
The only framework that checks every box
TypeScript compiled to native code. Real platform widgets. No runtime overhead.
| Framework | Language | Native Code | Native Widgets | Runtime Overhead |
|---|---|---|---|---|
| Perry | TypeScript | ✓ Native compiled | ✓ Real platform widgets | ✓ Zero runtime overhead |
| React Native | JS / TS | JS bridge | Partial | JS engine + bridge |
| Flutter | Dart | AOT | No shared UI | Dart VM |
| Electron | JS / TS | Chromium runtime | HTML mimics | Chromium + Node |
Write TypeScript, Ship Native
Use familiar TypeScript syntax and APIs. Perry handles the rest.
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);
// Compiles to ~2MB native executable
// No runtime needed!Performance Comparison
Native compilation delivers unmatched efficiency
Get Started
Install Perry and start compiling TypeScript to native executables
Homebrew (macOS)
brew install perry-ts/perryAPT (Debian/Ubuntu)
apt-get install perryWindows (winget)
scoop install perry-ts/perryFeature 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
30+ Native npm Packages
Popular npm packages reimplemented in native Rust. No npm install, no node_modules, just fast native code.
Database
Security
HTTP
Data Processing
Date & Time
Utilities
How It Works
From TypeScript source to native executable in seconds
Want to know how the compiler works under the hood? Compiler internals
Blog
18 blog
CLI Test Post
Testing the CLI…
What aya_koto's Benchmark Taught Us About Perry's GC
A reader benchmarked Perry on AtCoder ABC451D and measured it 3.85× slower than Bun. A silent regression had widened the gap to 6.59× since. The fix wasn't where we expected, the d…
Auto-Update, a Live Inspector, and the Compiler That Halved Itself
Perry v0.5.306 → v0.5.359 in four days — 53 patch releases, ~30 issues closed, and three big things landed: perry/updater for desktop auto-update, a live inspector at localhost:767…
Generational GC, Lazy JSON, and Benchmarks That Hold Up to Scrutiny
Perry v0.5.174 → v0.5.306 in three days, plus the GC and JSON work that landed alongside. The generational GC ships as default. The Small String Optimization ships as default. The …
npm Distribution, perry dev, and Winning Every Benchmark
Perry v0.5.80 → v0.5.174 in six days. @perryts/perry ships on npm for all seven supported platforms. perry dev adds watch-mode auto-recompile on top of an in-memory AST cache and o…