v0.4.24 — target tvOS, biên dịch chéo iOS/macOS từ Linux, perry login

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.

terminal

$ 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!

10
Mục tiêu
25+
Widget UI gốc
0 ms
Thời gian khởi động
App Store
Sẵn sàng

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

Ổn định

iOS

UIKit

Ổn định

iPadOS

UIKit

Ổn định

Android

Views

Ổn định

Linux

GTK4

Ổn định

Windows

Win32

Ổn định

watchOS

SwiftUI

Ổn định

tvOS

SwiftUI

Ổn định

WASM

WebAssembly

Ổn định

Web

JavaScript

Ổn định
So sánh framework

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.

FrameworkNgôn ngữMã gốcWidget gốcChi phí 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
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
Biên dịch gốc
Widget nền tảng thực sự
Không có chi phí runtime

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.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);
 
// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
Binary gốc

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ốPerryNode.jsBun
Kích thước binary2-5 MB~80 MB~90 MB
Thời gian khởi động~1 ms~30 ms~10 ms
Phụ thuộc runtimeKhông cóNode.jsBun
Chi phí bộ nhớTối thiểuV8 + GCJSC + 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)

closure
4.5x
object create
3.5x
array read
3.0x
math intensive
3.0x
method calls
3.0x
binary trees
2.7x
string concat
2.5x
fibonacci
2.1x
mandelbrot
1.9x
factorial
1.7x
Kích thước binaryThấp hơn là tốt hơn
Perry
5 MB
Node.js
80 MB
Bun
90 MB

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

terminal
$ brew tap PerryTS/perry
$ brew install perry

Yêu cầu Homebrew. Hỗ trợ macOS arm64 và x86_64.

2Sử dụng

Biên dịch tệp
perry build main.ts

Biên dịch main.ts thành tệp thực thi gốc

Đầu ra tùy chỉnh
perry build main.ts -o myapp

Chỉ định tên tệp thực thi đầu ra

Với V8 runtime
perry build main.ts --enable-js-runtime

Bật V8 để tương thích với các gói npm JavaScript

Kiểm tra tương thích
perry check ./src

Xá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ỗ trợ đầy đủ
Một phần

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

mysql2pgmongodbbetter-sqlite3ioredis

Bảo mật

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Xử lý dữ liệu

cheeriosharpzliblodash

Ngày và giờ

dayjsmomentdate-fnsnode-cron

Tiện ích

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Chỉ cần import và sử dụng — Perry tự động dùng triển khai gốc

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.

perry buildBiên dịch và ký
perry publishĐóng gói và gửi
Cửa hàng và tải vềApp Store, Play Store, trực tiếp
perry verifyKiểm thử mọi nền tả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

TypeScriptTệp .ts
SWC
Bộ phân tíchPhân tích nhanh
HIR
Chuyển đổiMonomorphization
Crane
lift
Sinh mãMã máy
Tệp thực thiBinary 2-5 MB

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