Một mã nguồn. Mọi nền tảng.
Hiệu năng gốc.
Perry biên dịch TypeScript thành ứng dụng GUI và CLI gốc trên macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly và Web. Không cần runtime. Không cần Electron. Chỉ là binary gốc.
$ perry compile main.ts
Đang biên dịch main.ts...
✓ Tệp thực thi đã biên dịch: main (2,3 MB)
$ ./main
Hello, World!
Tại sao chọn Perry?
Mọi thứ bạn cần để biên dịch TypeScript thành ứng dụng gốc
Không cần Runtime
Tạo ra tệp thực thi gốc độc lập. Không Node.js, không V8, không phụ thuộc runtime. Chỉ một binary duy nhất chạy được ở mọi nơi.
Biên dịch nhanh
Biên dịch trực tiếp TypeScript sang mã gốc sử dụng SWC để phân tích cú pháp và Cranelift để sinh mã. Không có JavaScript trung gian.
Binary nhỏ gọn
Binary đầu ra thường chỉ 2-5 MB. Với V8 runtime tùy chọn cho các gói npm JS, 15-20 MB. Gửi ít hơn, triển khai nhanh hơn.
An toàn kiểu
Tận dụng hệ thống kiểu của TypeScript để tối ưu hóa. Kiểu giúp tạo mã tốt hơn thông qua monomorphization.
Thư viện chuẩn toàn diện
Triển khai gốc tích hợp sẵn của fs, path, crypto, os, Buffer, child_process và nhiều hơn nữa. Sử dụng các API Node.js quen thuộc.
V8 Runtime tùy chọn
Cần sử dụng gói npm JavaScript thuần? Bật cờ V8 runtime để tương thích đầy đủ với hệ sinh thái npm.
Hơn 25 Widget UI gốc
Nút bấm, trường văn bản, vùng văn bản, bảng, canvas, scroll view, mã QR, trường bảo mật, màn hình khởi động và nhiều hơn — tất cả biên dịch thành widget nền tảng thực sự qua AppKit, GTK4, Win32, UIKit và JNI.
Hệ thống plugin thời điểm biên dịch
Các module được kết hợp tại thời điểm build — không có chi phí plugin khi runtime, không có ranh giới IPC. Các phụ thuộc của bạn trở thành lệnh gọi hàm gốc trực tiếp trong binary cuối cùng.
Đa luồng thực sự
Thread OS thực sự với parallelMap, parallelFilter và spawn. An toàn tại thời điểm biên dịch từ chối các capture có thể thay đổi — không SharedArrayBuffer, không worker, chỉ có thread.
i18n thời điểm biên dịch
Trích xuất chuỗi tự động, quy tắc số nhiều CLDR cho hơn 30 ngôn ngữ, xác thực thời điểm biên dịch. Bản dịch được nhúng vào binary với tra cứu gần như bằng không tại runtime.
Gốc trên mọi nền tảng
Perry biên dịch TypeScript của bạn thành framework UI gốc, WebAssembly và JavaScript — không phải web view, không phải Electron. Widget gốc thực sự trên mọi nền tảng, cộng thêm web.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
Framework duy nhất đáp ứng mọi tiêu chí
TypeScript biên dịch sang mã gốc. Widget nền tảng thực sự. Không có chi phí runtime.
| Framework | Ngôn ngữ | Mã gốc | Widget gốc | Chi phí 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 | Một phần | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | Không có UI dùng chung | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | Một phần | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
Viết TypeScript, xuất bản gốc
Sử dụng cú pháp và API TypeScript quen thuộc. Perry lo phần còn lại.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!So sánh hiệu năng
Biên dịch gốc mang lại hiệu quả vượt trội
| Chỉ số | Perry | Node.js | Bun |
|---|---|---|---|
| Kích thước binary | 2-5 MB | ~80 MB | ~90 MB |
| Thời gian khởi động | ~1 ms | ~30 ms | ~10 ms |
| Phụ thuộc runtime | Không có | Node.js | Bun |
| Chi phí bộ nhớ | Tối thiểu | V8 + GC | JSC + GC |
Kết quả benchmark: Nhanh hơn 2,2 lần
Perry vs Node.js v24 trên macOS ARM64 (thấp hơn là tốt hơn)
Bắt đầu
Cài đặt Perry và bắt đầu biên dịch TypeScript thành tệp thực thi gốc
1Cài đặt
$ brew tap PerryTS/perry$ brew install perryYêu cầu Homebrew. Hỗ trợ macOS arm64 và x86_64.
2Sử dụng
perry build main.tsBiên dịch main.ts thành tệp thực thi gốc
perry build main.ts -o myappChỉ định tên tệp thực thi đầu ra
perry build main.ts --enable-js-runtimeBật V8 để tương thích với các gói npm JavaScript
perry check ./srcXác thực mã TypeScript cho biên dịch gốc
Hỗ trợ tính năng
Bao phủ toàn diện API TypeScript và Node.js
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
Hơn 30 gói npm gốc
Các gói npm phổ biến được triển khai lại bằng Rust gốc. Không npm install, không node_modules, chỉ có mã gốc nhanh.
Cơ sở dữ liệu
Bảo mật
HTTP
Xử lý dữ liệu
Ngày và giờ
Tiện ích
Từ mã nguồn đến App Store
Perry không chỉ biên dịch ứng dụng — mà còn đưa nó đến tay người dùng.
Build và Ký
Build đa nền tảng chỉ với một lệnh. Ký mã cho macOS, iOS, Android và Windows được xử lý cho bạn. Không cần vật lộn với provisioning profile của Xcode hay keystore của Android.
Phân phối
Đẩy lên App Store, Play Store hoặc cung cấp tải trực tiếp. Perry Publish xử lý đóng gói, công chứng và gửi.
Xác minh
Được hỗ trợ bởi Geisterhand. Kiểm thử UI tự động trên cả 6 nền tảng. Biết rằng ứng dụng của bạn hoạt động ở mọi nơi trước khi người dùng nói cho bạn biết nó không.
Miễn phí cho dự án mã nguồn mở. Gói cho nhóm → /publish
Cách hoạt động
Từ mã nguồn TypeScript đến tệp thực thi gốc chỉ trong vài giây
lift
Muốn biết trình biên dịch hoạt động bên trong như thế nào? Cấu trúc bên trong trình biên dịch