v0.5.1146 — các gói npm thật giờ đã biên dịch được: axios, zod, express, fastify, hono

Biên dịch ahead-of-time TypeScript sang gốc.
Một mã nguồn. Mọi nền tảng.

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, HarmonyOS, 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à LLVM để sinh mã tối ưu. 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.

Build có tính tất định

Cùng đầu vào, cùng binary. Tái tạo được trên mọi máy, mọi lần chạy CI và mọi đội. Không có lần build lại bí ẩn.

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.

Các package npm thực tế

axios, zod, express, fastify, và hono compile thành binary native. Các package JavaScript thuần chạy trên một runtime nhúng tùy chọn — tự chứa, không có node_modules lúc runtime.

Hơn 35 Widget UI gốc

Nút bấm, bảng, bộ chọn ngày, drag & drop, biểu đồ, bản đồ, command palette, mã QR, văn bản định dạng phong phú, và nhiều hơn — tất cả biên dịch thành widget nền tảng thực sự qua AppKit, UIKit, GTK4, Win32 (Fluent/Mica), 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.

Tìm hiểu sâu hơn: cách Perry biên dịch TypeScript thành binary, điều gì khiến nó trở thành một trình biên dịch TypeScript gốc, và nó so sánh thế nào với các giải pháp thay thế Electron.

Xem mọi người xây dựng

Ứng dụng native thực sự, biên dịch từ TypeScript. Không Electron, không web view — chỉ UI native trên mọi nền tảng.

Mango

Mango

GUI MongoDB native — xây dựng hoàn toàn bằng TypeScript

macOSLinuxWindows
Mango — document editor
Mango — query explorer
Hone

Hone

Trình soạn thảo code native hỗ trợ AI — TypeScript sang binary native

macOSiOSWeb
Hone — native AI code editor

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

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 compileBiê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

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 tới 18 lần

Perry v0.5.279 vs Node.js v25 — trung vị RUNS=11, Apple M1 Max (thấp hơn là tốt hơn)

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
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 compile main.ts

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

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

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

Với V8 runtime
perry compile 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

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
LLVM
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

Tìm hiểu chuyên sâu: TypeScript trên LLVM — monomorphization, NaN-boxing, và lý do Perry rời bỏ Cranelift.

Các câu hỏi thường gặp

Mọi điều mọi người thắc mắc trước khi biên dịch binary đầu tiên của mình

Perry có cần Node.js hay runtime không?

Không. Perry biên dịch ahead-of-time TypeScript thành một tệp thực thi gốc độc lập. Binary chạy được mà không cần cài Node.js, Bun, Deno hay bất kỳ runtime JavaScript nào trên máy. Với các gói npm chưa thể biên dịch gốc, có một tùy chọn V8 nhúng dự phòng qua --enable-js-runtime.

Các binary đã biên dịch lớn cỡ nào?

Một binary hello-world có kích thước khoảng 330 KB. Các công cụ CLI điển hình rơi vào khoảng 2–5 MB. Ứng dụng đầy đủ có tích hợp framework lớn (Fastify, mysql2, v.v.) khoảng 48 MB — vẫn thấp hơn nhiều so với mức khởi điểm ~80–150 MB của một ứng dụng Electron hay binary nhúng runtime.

Tôi có thể dùng gói npm không?

Có. Các gói TypeScript/JavaScript thuần biên dịch gốc qua perry.compilePackages — axios, zod v4, express, fastify và hono đã có thể biên dịch và chạy ngay hôm nay. Các gói cần đầy đủ ngữ nghĩa engine JS có thể chạy qua tùy chọn V8 dự phòng với --enable-js-runtime.

Perry hỗ trợ những nền tảng nào?

Mười mục tiêu biên dịch: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly và Web/JS. Ứng dụng GUI sử dụng widget nền tảng gốc — AppKit, UIKit, GTK4, Win32 và Android qua JNI.

Perry có miễn phí và mã nguồn mở không?

Có. Trình biên dịch này miễn phí và mã nguồn mở. Biên dịch và chạy cục bộ hoàn toàn miễn phí và không cần tài khoản. Perry Publish — dịch vụ đám mây lo việc build, ký và gửi lên store — có gói miễn phí (15 lượt xuất bản mỗi tháng) và gói Pro.

Perry khác gì so với Bun hay Deno compile?

Bun và Deno đóng gói JavaScript của bạn cùng runtime của chúng thành một tệp — một hello world nặng khoảng 60–100 MB tùy nền tảng, và mã vẫn được thực thi bằng JIT. Perry biên dịch ahead-of-time TypeScript thành mã máy qua LLVM: không có engine nhúng, hello world ~330 KB, khởi động ~1 ms. Xem so sánh đầy đủ Perry vs BunPerry vs Deno.

Perry khác gì so với Electron hay Tauri?

Electron đóng gói Chromium và Node.js cùng mọi ứng dụng, nên trình cài đặt khởi điểm ở khoảng 80–150 MB. Tauri nhỏ hơn nhiều nhưng vẫn render giao diện web trong webview hệ thống, với logic ứng dụng viết bằng Rust. Perry không dùng webview: TypeScript biên dịch thành mã máy điều khiển các widget nền tảng thực sự — AppKit, UIKit, GTK4, Win32 — trong một tiến trình duy nhất. Xem so sánh đầy đủ Perry vs ElectronPerry vs Tauri.

Perry đã trưởng thành đến mức nào?

Perry vẫn ở giai đoạn trước 1.0 và đang phát triển nhanh, nhưng các ứng dụng thực tế xây dựng bằng Perry đã ra mắt ngay hôm nay — trong đó có Bloom Engine, Mango, Hone, Pry và dB Meter. Xem showcase để biết chi tiết.

Còn thắc mắc khác? Đọc hướng dẫn bắt đầu hoặc hỏi trên GitHub Discussions.