v0.5.1146 — paket npm asli kini bisa dikompilasi: axios, zod, express, fastify, hono

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.

terminal

$ perry compile main.ts

Mengompilasi main.ts...

✓ Executable terkompilasi: main (2,3 MB)

$ ./main

Hello, World!

10
Target
25+
Widget UI native
0 ms
Waktu mulai
App Store
Siap

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

Mango

GUI MongoDB native — dibangun sepenuhnya dengan TypeScript

macOSLinuxWindows
Mango — document editor
Mango — query explorer
Hone

Hone

Editor kode native bertenaga AI — TypeScript ke binary native

macOSiOSWeb
Hone — native AI code editor

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

Stabil

iOS

UIKit

Stabil

iPadOS

UIKit

Stabil

Android

Views

Stabil

Linux

GTK4

Stabil

Windows

Win32

Stabil

watchOS

SwiftUI

Stabil

tvOS

SwiftUI

Stabil

WASM

WebAssembly

Stabil

Web

JavaScript

Stabil

Dari Kode ke App Store

Perry tidak hanya mengompilasi aplikasi Anda — tetapi juga mengantarkannya ke tangan pengguna.

perry compileKompilasi & tanda tangani
perry publishKemas & kirim
Toko & UnduhanApp Store, Play Store, langsung
perry verifyUji setiap platform

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

Perbandingan Framework

Satu-satunya framework yang memenuhi semua kriteria

TypeScript dikompilasi ke kode native. Widget platform asli. Nol overhead runtime.

FrameworkBahasaKode NativeWidget NativeOverhead Runtime
PerryAOT 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
Dikompilasi native
Widget platform asli
Nol overhead runtime

Tulis TypeScript, Kirim Native

Gunakan sintaks dan API TypeScript yang familiar. Perry menangani sisanya.

hello.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);
 
// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
Binary native

Perbandingan Performa

Kompilasi native memberikan efisiensi tak tertandingi

MetrikPerryNode.jsBun
Ukuran Binary2-5 MB~80 MB~90 MB
Waktu Mulai~1 ms~30 ms~10 ms
Dependensi RuntimeTidak adaNode.jsBun
Overhead MemoriMinimalV8 + GCJSC + 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)

accumulate
18x
object create
11x
json roundtrip
5.3x
loop overhead
4.5x
math intensive
3.6x
array read
3.3x
fibonacci
3.2x
array write
2.3x
loop data dependent
1.4x
nested loops
1.0x
Ukuran BinaryLebih rendah lebih baik
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Mulai

Instal Perry dan mulai mengompilasi TypeScript menjadi executable native

1Instalasi

terminal
$ brew tap PerryTS/perry
$ brew install perry

Memerlukan Homebrew. Mendukung macOS arm64 dan x86_64.

2Penggunaan

Kompilasi file
perry compile main.ts

Mengompilasi main.ts menjadi executable native

Output kustom
perry compile main.ts -o myapp

Tentukan nama executable output

Dengan runtime V8
perry compile main.ts --enable-js-runtime

Aktifkan V8 untuk kompatibilitas paket npm JavaScript

Periksa kompatibilitas
perry check ./src

Validasi 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
Dukungan Penuh
Sebagian

30+ Paket npm Native

Paket npm populer diimplementasi ulang dalam Rust native. Tanpa npm install, tanpa node_modules, hanya kode native yang cepat.

Database

mysql2pgmongodbbetter-sqlite3ioredis

Keamanan

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Pemrosesan Data

cheeriosharpzliblodash

Tanggal & Waktu

dayjsmomentdate-fnsnode-cron

Utilitas

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Cukup import dan gunakan — Perry secara otomatis menggunakan implementasi native

Cara Kerjanya

Dari kode sumber TypeScript ke executable native dalam hitungan detik

TypeScriptFile .ts
SWC
ParserParsing cepat
HIR
TransformasiMonomorphization
LLVM
CodegenKode mesin
ExecutableBinary 2-5 MB

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.