Kompilasi TypeScript ke Native.
Satu Kode Sumber, Semua Platform.
Perry mengompilasi TypeScript menjadi aplikasi GUI dan CLI native di macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, HarmonyOS, WebAssembly, dan Web. Tanpa runtime. Tanpa Electron. Hanya binary native.
$ perry compile main.ts
Mengompilasi main.ts...
✓ Executable terkompilasi: main (2,3 MB)
$ ./main
Hello, World!
Aplikasi nyata, dikompilasi dari TypeScript dengan Perry.
Mengapa Perry?
Semua yang Anda butuhkan untuk mengompilasi TypeScript menjadi aplikasi native
Tanpa Runtime
Menghasilkan executable native yang berdiri sendiri. Tanpa Node.js, tanpa V8, tanpa dependensi runtime. Hanya satu binary yang berjalan di mana saja.
Kompilasi Cepat
Kompilasi langsung dari TypeScript ke kode native menggunakan SWC untuk parsing dan LLVM untuk pembuatan kode yang dioptimalkan. Tanpa JavaScript perantara.
Binary Kecil
Binary output biasanya berukuran 2-5 MB. Dengan runtime V8 opsional untuk paket npm JS, 15-20 MB. Kirim lebih sedikit, deploy lebih cepat.
Build deterministik
Input sama, biner sama. Dapat direproduksi di mesin mana pun, di setiap proses CI, di tim mana pun. Tidak ada rebuild misterius.
Standard Library Lengkap
Implementasi native bawaan untuk fs, path, crypto, os, Buffer, child_process, dan lainnya. Gunakan API Node.js yang familiar.
Paket npm Nyata
axios, zod, express, fastify, dan hono dikompilasi menjadi binary native. Paket JavaScript murni berjalan di runtime ter-embed opsional — self-contained, tanpa node_modules saat runtime.
35+ Widget UI Native
Tombol, tabel, date picker, drag & drop, chart, peta, command palette, kode QR, rich text, dan lainnya — semuanya dikompilasi menjadi widget platform nyata melalui AppKit, UIKit, GTK4, Win32 (Fluent/Mica), dan JNI.
Sistem Plugin Waktu Kompilasi
Modul dikomposisi saat build — tanpa overhead plugin saat runtime, tanpa batasan IPC. Dependensi Anda menjadi pemanggilan fungsi native langsung di binary akhir.
Multi-Threading Sejati
Thread OS nyata dengan parallelMap, parallelFilter, dan spawn. Keamanan waktu kompilasi menolak capture yang bisa berubah — tanpa SharedArrayBuffer, tanpa worker, hanya thread.
i18n Waktu Kompilasi
Ekstraksi string otomatis, aturan jamak CLDR untuk 30+ bahasa, validasi waktu kompilasi. Terjemahan ditanam ke binary dengan pencarian runtime hampir nol.
Pelajari lebih dalam: bagaimana Perry mengompilasi TypeScript menjadi binary, apa yang membuatnya menjadi kompiler TypeScript native, dan bagaimana perbandingannya dengan alternatif Electron.
Lihat Apa yang Orang Bangun
Aplikasi native nyata, dikompilasi dari TypeScript. Tanpa Electron, tanpa web view — hanya UI native di setiap platform.
Mango
GUI MongoDB native — dibangun sepenuhnya dengan TypeScript


Hone
Editor kode native bertenaga AI — TypeScript ke binary native

Native di Semua Platform
Perry mengompilasi TypeScript Anda ke framework UI native, WebAssembly, dan JavaScript — bukan web view, bukan Electron. Widget native asli di setiap platform, plus web.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
Dari Kode ke App Store
Perry tidak hanya mengompilasi aplikasi Anda — tetapi juga mengantarkannya ke tangan pengguna.
Build & Tanda Tangani
Build lintas platform dengan satu perintah. Penandatanganan kode untuk macOS, iOS, Android, dan Windows ditangani untuk Anda. Tidak perlu bergulat dengan provisioning profile Xcode atau keystore Android.
Distribusi
Push ke App Store, Play Store, atau kirim unduhan langsung. Perry Publish menangani pengemasan, notarisasi, dan pengiriman.
Verifikasi
Didukung oleh Geisterhand. Pengujian UI otomatis di semua 6 platform. Ketahui bahwa aplikasi Anda bekerja di mana saja sebelum pengguna memberi tahu Anda bahwa tidak.
Gratis untuk proyek open source. Paket untuk tim → /publish
Satu-satunya framework yang memenuhi semua kriteria
TypeScript dikompilasi ke kode native. Widget platform asli. Nol overhead runtime.
| Framework | Bahasa | Kode Native | Widget Native | Overhead Runtime |
|---|---|---|---|---|
Perry★AOT compiled to native binary | TypeScript | None | ||
React NativeJIT / interpreted at runtime | JS / TypeScript | Hermes / V8 + Bridge | ||
FlutterAOT compiled, custom renderer | Dart | Dart VM + Skia engine | ||
KMP + ComposeJVM on Android, native on iOS | Kotlin | Sebagian | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | Tanpa UI bersama | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | Sebagian | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
Tulis TypeScript, Kirim Native
Gunakan sintaks dan API TypeScript yang familiar. Perry menangani sisanya.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!Perbandingan Performa
Kompilasi native memberikan efisiensi tak tertandingi
| Metrik | Perry | Node.js | Bun |
|---|---|---|---|
| Ukuran Binary | 2-5 MB | ~80 MB | ~90 MB |
| Waktu Mulai | ~1 ms | ~30 ms | ~10 ms |
| Dependensi Runtime | Tidak ada | Node.js | Bun |
| Overhead Memori | Minimal | V8 + GC | JSC + GC |
Hasil Benchmark: Hingga 18x Lebih Cepat
Perry v0.5.279 vs Node.js v25 — median RUNS=11, Apple M1 Max (lebih rendah lebih baik)
Mulai
Instal Perry dan mulai mengompilasi TypeScript menjadi executable native
1Instalasi
$ brew tap PerryTS/perry$ brew install perryMemerlukan Homebrew. Mendukung macOS arm64 dan x86_64.
2Penggunaan
perry compile main.tsMengompilasi main.ts menjadi executable native
perry compile main.ts -o myappTentukan nama executable output
perry compile main.ts --enable-js-runtimeAktifkan V8 untuk kompatibilitas paket npm JavaScript
perry check ./srcValidasi kode TypeScript untuk kompilasi native
Dukungan Fitur
Cakupan API TypeScript dan Node.js yang komprehensif
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-Order FunctionsFunctions 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+ Paket npm Native
Paket npm populer diimplementasi ulang dalam Rust native. Tanpa npm install, tanpa node_modules, hanya kode native yang cepat.
Database
Keamanan
HTTP
Pemrosesan Data
Tanggal & Waktu
Utilitas
Cara Kerjanya
Dari kode sumber TypeScript ke executable native dalam hitungan detik
Ingin tahu bagaimana kompiler bekerja di balik layar? Struktur internal kompiler
Pendalaman: TypeScript di atas LLVM — monomorphization, NaN-boxing, dan mengapa Perry meninggalkan Cranelift.
Pertanyaan yang Sering Diajukan
Semua yang ditanyakan orang-orang sebelum mengompilasi binary pertama mereka
Apakah Perry membutuhkan Node.js atau runtime?
Tidak. Perry mengompilasi TypeScript secara ahead-of-time menjadi executable native standalone. Binary berjalan tanpa Node.js, Bun, Deno, atau runtime JavaScript apa pun yang terinstal di mesin. Untuk paket npm yang belum bisa dikompilasi secara native, fallback V8 tertanam opsional tersedia melalui --enable-js-runtime.
Seberapa besar binary yang dikompilasi?
Binary hello-world berukuran sekitar 330 KB. Tool CLI tipikal berada di kisaran 2–5 MB. Aplikasi lengkap yang menyertakan framework besar (Fastify, mysql2, dll.) berukuran sekitar 48 MB — masih jauh di bawah ~80–150 MB yang menjadi titik awal ukuran aplikasi Electron atau binary dengan runtime tertanam.
Bisakah saya menggunakan paket npm?
Ya. Paket TypeScript/JavaScript murni dikompilasi secara native melalui perry.compilePackages — axios, zod v4, express, fastify, dan hono sudah bisa dikompilasi dan berjalan hari ini. Paket yang membutuhkan semantik engine JS penuh dapat berjalan melalui fallback V8 opsional dengan --enable-js-runtime.
Platform apa saja yang didukung Perry?
Sepuluh target kompilasi: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly, dan Web/JS. Aplikasi GUI menggunakan widget platform native — AppKit, UIKit, GTK4, Win32, dan Android melalui JNI.
Apakah Perry gratis dan open source?
Ya. Kompiler ini gratis dan open source. Mengompilasi dan menjalankan secara lokal tidak memerlukan biaya maupun akun. Perry Publish — pipeline build, penandatanganan, dan pengiriman ke toko yang di-hosting — memiliki tingkat gratis (15 publikasi per bulan) dan paket Pro.
Apa bedanya Perry dengan Bun atau Deno compile?
Bun dan Deno membundel JavaScript Anda bersama runtime-nya menjadi satu file — hello world berukuran sekitar 60–100 MB tergantung platform, dan kodenya tetap dieksekusi secara JIT. Perry mengompilasi TypeScript secara ahead-of-time menjadi kode mesin melalui LLVM: tanpa engine tertanam, hello world ~330 KB, startup ~1 ms. Lihat perbandingan lengkap Perry vs Bun dan Perry vs Deno.
Apa bedanya Perry dengan Electron atau Tauri?
Electron mengirim Chromium dan Node.js dengan setiap aplikasi, sehingga installer berukuran sekitar 80–150 MB. Tauri jauh lebih kecil tetapi tetap merender frontend web di webview sistem, dengan logika aplikasi di Rust. Perry sama sekali tidak menggunakan webview: TypeScript dikompilasi menjadi kode mesin yang menggerakkan widget platform asli — AppKit, UIKit, GTK4, Win32 — dalam satu proses tunggal. Lihat perbandingan lengkap Perry vs Electron dan Perry vs Tauri.
Seberapa matang Perry?
Perry masih pra-1.0 dan bergerak cepat, tetapi aplikasi nyata yang dibangun dengannya sudah dikirim hari ini — di antaranya Bloom Engine, Mango, Hone, Pry, dan dB Meter. Lihat showcase untuk detailnya.
Ada pertanyaan lain? Baca panduan memulai atau tanyakan di GitHub Discussions.