Perry — TypeScript → Native
v0.5.306 — generational GC + lazy JSON tape default, faster than Node and Bun on most benchmarks<br>One Codebase. Every Platform.<br>Native Performance.<br>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.<br>Get StartedView on GitHub
terminal<br>$ perry compile main.ts<br>Compiling main.ts...<br>✓ Compiled executable: main (2.3 MB)<br>$ ./main<br>Hello, World!
10<br>Targets
25+<br>Native UI widgets
0 ms<br>Startup time
App Store<br>Ready
Shipping in production<br>Real apps, compiled from TypeScript with Perry.
View all showcase projects
Mango
Native MongoDB GUI. ~7 MB binary,<br>Hone
Native code editor with built-in terminal, Git, LSP, sync.
dB Meter
Real-time decibel meter with 60 fps live waveform.
{ }<br>Pry
Fast native JSON viewer — tree, search, keyboard shortcuts.
Why Perry?<br>Everything you need to compile TypeScript to native applications
No Runtime Required<br>Produces standalone native executables. No Node.js, no V8, no runtime dependencies. Just a single binary that runs anywhere.
Fast Compilation<br>Direct TypeScript to native code compilation using SWC for parsing and LLVM for optimized code generation. No intermediate JavaScript.
Small Binaries<br>Output binaries are typically 2-5MB. With optional V8 runtime for JS npm packages, 15-20MB. Ship less, deploy faster.
Deterministic Builds<br>Same input, same binary. Reproducible across machines, across CI runs, across teams. No mystery rebuilds.
Comprehensive Standard Library<br>Built-in native implementations of fs, path, crypto, os, Buffer, child_process, and more. Use familiar Node.js APIs.
Optional V8 Runtime<br>Need to use a pure JavaScript npm package? Enable the V8 runtime flag for full npm ecosystem compatibility.
25+ Native UI Widgets<br>Buttons, text fields, text areas, tables, canvas, scroll views, QR codes, secure fields, splash screens, and more — all compiling to real platform widgets via AppKit, GTK4, Win32, UIKit, and JNI.
Compile-Time Plugin System<br>Modules compose at build time — no runtime plugin overhead, no IPC boundaries. Your dependencies become direct native function calls in the final binary.
True Multi-Threading<br>Real OS threads with parallelMap, parallelFilter, and spawn. Compile-time safety rejects mutable captures — no SharedArrayBuffer, no workers, just threads.
Compile-Time i18n<br>Automatic string extraction, CLDR plural rules for 30+ locales, compile-time validation. Translations baked into the binary with near-zero runtime lookup.
Native on Every Platform<br>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<br>AppKit
Stable
iOS<br>UIKit
Stable
iPadOS<br>UIKit
Stable
Android<br>Views
Stable
Linux<br>GTK4
Stable
Windows<br>Win32
Stable
watchOS<br>SwiftUI
Stable
tvOS<br>SwiftUI
Stable
WASM<br>WebAssembly
Stable
Web<br>JavaScript
Stable
From Code to App Store<br>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
perry compileCompile & sign
perry publishPackage & submit
Stores & DownloadsApp Store, Play Store, direct
perry verifyTest every platform
Build & Sign<br>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<br>Push to the App Store, Play Store, or ship direct downloads. Perry Publish handles packaging, notarization, and submission.
Verify<br>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<br>The only framework that checks every box<br>TypeScript compiled to native code. Real platform widgets. No runtime overhead.
FrameworkLanguageNative CodeNative WidgetsRuntime OverheadPerry★AOT compiled to native binary<br>TypeScript
NoneReact NativeJIT / interpreted at runtime<br>JS / TypeScript
Hermes / V8 + BridgeFlutterAOT compiled, custom renderer<br>Dart
Dart VM + Skia engineKMP + ComposeJVM on Android, native on iOS<br>KotlinPartial
Kotlin runtime + SkiaSwift for AndroidNative binary, no shared UI<br>Swift<br>No shared UI
Swift runtime on Android.NET MAUIPartial AOT via Mono<br>C#Partial
.NET / Mono runtimeNativeScriptJS runtime, native widget access<br>JS / TypeScript
V8 / JavaScriptCoreIonicWeb app in native wrapper<br>JS / TypeScript
WebView + Capacitor<br>Native compiled<br>Real platform widgets<br>Zero runtime overhead
Write TypeScript, Ship Native<br>Use familiar TypeScript syntax and APIs. Perry handles the rest.
Hello WorldFile SystemHTTP ClientClasses & GenericsAsync/Await
hello.ts
// hello.ts<br>const greeting = "Hello, World!";<br>console.log(greeting);
//...