คอมไพล์ TypeScript เป็นเนทีฟ
โค้ดเดียว ทุกแพลตฟอร์ม
Perry คอมไพล์ TypeScript เป็นแอป GUI และ CLI เนทีฟบน macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, HarmonyOS, WebAssembly และเว็บ ไม่ต้องมี runtime ไม่ต้องมี Electron เป็นไบนารีเนทีฟล้วน ๆ
$ perry compile main.ts
กำลังคอมไพล์ main.ts...
✓ คอมไพล์ไฟล์สำเร็จ: main (2.3 MB)
$ ./main
Hello, World!
แอปจริงที่คอมไพล์จาก TypeScript ด้วย Perry
ทำไมต้อง Perry?
ทุกอย่างที่คุณต้องการเพื่อคอมไพล์ TypeScript เป็นแอปพลิเคชันเนทีฟ
ไม่ต้องมี Runtime
สร้างไฟล์ปฏิบัติการเนทีฟแบบ standalone ไม่ต้องมี Node.js, ไม่ต้องมี V8, ไม่มี dependency ที่รันไทม์ เป็นไบนารีตัวเดียวที่รันได้ทุกที่
คอมไพล์เร็ว
คอมไพล์ TypeScript เป็นโค้ดเนทีฟโดยตรง ใช้ SWC สำหรับการแยกวิเคราะห์และ LLVM สำหรับการสร้างโค้ดที่ปรับแต่ง ไม่มี JavaScript ตัวกลาง
ไบนารีขนาดเล็ก
ไบนารีเอาต์พุตโดยทั่วไปมีขนาด 2-5 MB พร้อม V8 runtime เสริมสำหรับแพ็กเกจ npm JS จะอยู่ที่ 15-20 MB ส่งน้อยลง ติดตั้งเร็วขึ้น
บิวด์แบบกำหนดผลล่วงหน้าได้
อินพุตเหมือนกัน บิวด์ออกมาเหมือนกัน ทำซ้ำได้ในทุกเครื่อง ทุกการรัน CI และทุกทีม ไม่มีการบิวด์ใหม่แบบลึกลับ
Standard Library ที่ครอบคลุม
มีการ implement เนทีฟในตัวของ fs, path, crypto, os, Buffer, child_process และอื่น ๆ ใช้ API ของ Node.js ที่คุ้นเคย
npm Package จริง
axios, zod, express, fastify และ hono คอมไพล์เป็น native binary แพ็กเกจที่เป็น JavaScript ล้วนรันบน runtime ฝังตัวแบบเสริม — self-contained ในตัวเอง โดยไม่มี node_modules ตอน runtime
วิดเจ็ต UI เนทีฟ 35+ ตัว
ปุ่ม, ตาราง, date picker, drag & drop, แผนภูมิ, แผนที่, command palette, QR code, rich text และอื่น ๆ — ทั้งหมดคอมไพล์เป็นวิดเจ็ตแพลตฟอร์มจริงผ่าน AppKit, UIKit, GTK4, Win32 (Fluent/Mica) และ JNI
ระบบปลั๊กอินแบบ Compile-Time
โมดูลประกอบกันในเวลา build — ไม่มี overhead ของปลั๊กอินที่รันไทม์ ไม่มีขอบเขต IPC dependency ของคุณจะกลายเป็นการเรียกฟังก์ชันเนทีฟโดยตรงในไบนารีสุดท้าย
Multi-Threading ที่แท้จริง
เธรด OS จริงพร้อม parallelMap, parallelFilter และ spawn ความปลอดภัยระดับ compile-time ปฏิเสธการจับค่าที่เปลี่ยนแปลงได้ — ไม่มี SharedArrayBuffer, ไม่มี worker, มีแค่เธรด
i18n แบบ Compile-Time
แยกสตริงอัตโนมัติ, กฎพหูพจน์ CLDR สำหรับ 30+ locale, การตรวจสอบแบบ compile-time การแปลถูกฝังในไบนารีโดยแทบไม่ต้อง lookup ที่รันไทม์
เจาะลึกยิ่งขึ้น: Perry คอมไพล์ TypeScript เป็นไบนารีอย่างไร อะไรที่ทำให้มันเป็นคอมไพเลอร์ TypeScript เนทีฟ และเทียบกับทางเลือกแทน Electronได้อย่างไร
ดูสิ่งที่ผู้คนสร้าง
แอปเนทีฟจริง คอมไพล์จาก TypeScript ไม่มี Electron ไม่มี Web View — แค่ UI เนทีฟบนทุกแพลตฟอร์ม
Mango
GUI MongoDB เนทีฟ — สร้างด้วย TypeScript ทั้งหมด


Hone
โค้ดเอดิเตอร์เนทีฟขับเคลื่อนด้วย AI — TypeScript สู่ไบนารีเนทีฟ

เนทีฟบนทุกแพลตฟอร์ม
Perry คอมไพล์ TypeScript ของคุณเป็นเฟรมเวิร์ก UI เนทีฟ, WebAssembly และ JavaScript — ไม่ใช่ web view, ไม่ใช่ Electron วิดเจ็ตเนทีฟจริงบนทุกแพลตฟอร์ม รวมถึงเว็บ
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
จากโค้ดสู่ App Store
Perry ไม่แค่คอมไพล์แอปของคุณ — แต่ส่งมอบถึงมือผู้ใช้
บิลด์และลงนาม
บิลด์ข้ามแพลตฟอร์มด้วยคำสั่งเดียว การลงนามโค้ดสำหรับ macOS, iOS, Android และ Windows จัดการให้คุณ ไม่ต้องต่อสู้กับ provisioning profile ของ Xcode หรือ keystore ของ Android
แจกจ่าย
ส่งไปยัง App Store, Play Store หรือให้ดาวน์โหลดโดยตรง Perry Publish จัดการการแพ็กเกจ, การรับรอง และการส่ง
ตรวจสอบ
ขับเคลื่อนโดย Geisterhand ทดสอบ UI อัตโนมัติบนทั้ง 6 แพลตฟอร์ม รู้ว่าแอปของคุณทำงานได้ทุกที่ก่อนที่ผู้ใช้จะบอกคุณว่ามันใช้ไม่ได้
ฟรีสำหรับโปรเจกต์โอเพนซอร์ส แพลนสำหรับทีม → /publish
เฟรมเวิร์กเดียวที่ตรงตามทุกข้อกำหนด
TypeScript คอมไพล์เป็นโค้ดเนทีฟ วิดเจ็ตแพลตฟอร์มจริง ไม่มี overhead ที่รันไทม์
| เฟรมเวิร์ก | ภาษา | โค้ดเนทีฟ | วิดเจ็ตเนทีฟ | Overhead ที่รันไทม์ |
|---|---|---|---|---|
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 | บางส่วน | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | ไม่มี UI ที่ใช้ร่วมกัน | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | บางส่วน | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
เขียน TypeScript ส่งมอบแบบเนทีฟ
ใช้ syntax และ API ของ TypeScript ที่คุ้นเคย Perry จัดการส่วนที่เหลือ
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!การเปรียบเทียบประสิทธิภาพ
การคอมไพล์เนทีฟให้ประสิทธิภาพที่ไม่มีใครเทียบได้
| ตัวชี้วัด | Perry | Node.js | Bun |
|---|---|---|---|
| ขนาดไบนารี | 2-5 MB | ~80 MB | ~90 MB |
| เวลาเริ่มต้น | ~1 ms | ~30 ms | ~10 ms |
| Dependencies ที่รันไทม์ | ไม่มี | Node.js | Bun |
| Overhead หน่วยความจำ | น้อยมาก | V8 + GC | JSC + GC |
ผลเบนช์มาร์ก: เร็วกว่าสูงสุด 18 เท่า
Perry v0.5.279 vs Node.js v25 — ค่ากลาง RUNS=11, Apple M1 Max (ยิ่งต่ำยิ่งดี)
เริ่มต้น
ติดตั้ง Perry และเริ่มคอมไพล์ TypeScript เป็นไฟล์ปฏิบัติการเนทีฟ
1การติดตั้ง
$ brew tap PerryTS/perry$ brew install perryต้องมี Homebrew รองรับ macOS arm64 และ x86_64
2การใช้งาน
perry compile main.tsคอมไพล์ main.ts เป็นไฟล์ปฏิบัติการเนทีฟ
perry compile main.ts -o myappระบุชื่อไฟล์ปฏิบัติการเอาต์พุต
perry compile main.ts --enable-js-runtimeเปิดใช้ V8 สำหรับความเข้ากันได้กับแพ็กเกจ npm ที่เป็น JavaScript
perry check ./srcตรวจสอบโค้ด TypeScript สำหรับการคอมไพล์เนทีฟ
การรองรับฟีเจอร์
ครอบคลุม API ของ TypeScript และ 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
แพ็กเกจ npm เนทีฟ 30+ ตัว
แพ็กเกจ npm ยอดนิยมที่ implement ใหม่ในเนทีฟ Rust ไม่ต้อง npm install ไม่ต้อง node_modules แค่โค้ดเนทีฟที่เร็ว
ฐานข้อมูล
ความปลอดภัย
HTTP
การประมวลผลข้อมูล
วันที่และเวลา
ยูทิลิตี้
มันทำงานอย่างไร
จากซอร์สโค้ด TypeScript เป็นไฟล์ปฏิบัติการเนทีฟในไม่กี่วินาที
อยากรู้ว่าคอมไพเลอร์ทำงานภายในอย่างไร? โครงสร้างภายในคอมไพเลอร์
เจาะลึก: TypeScript บน LLVM — monomorphization, NaN-boxing และเหตุผลที่ Perry ทิ้ง Cranelift
คำถามที่พบบ่อย
ทุกอย่างที่คนถามก่อนคอมไพล์ไบนารีตัวแรกของพวกเขา
Perry ต้องมี Node.js หรือรันไทม์หรือไม่?
ไม่ต้อง Perry คอมไพล์ TypeScript ล่วงหน้าเป็นไฟล์ปฏิบัติการเนทีฟแบบ standalone ไบนารีนี้รันได้โดยไม่ต้องมี Node.js, Bun, Deno หรือ JavaScript runtime ใด ๆ ติดตั้งอยู่บนเครื่อง สำหรับแพ็กเกจ npm ที่ยังคอมไพล์แบบเนทีฟไม่ได้ มี V8 fallback แบบฝังตัวเป็นตัวเลือกเสริมผ่าน --enable-js-runtime
ไบนารีที่คอมไพล์แล้วมีขนาดใหญ่แค่ไหน?
ไบนารี hello-world มีขนาดประมาณ 330 KB เครื่องมือ CLI ทั่วไปอยู่ที่ 2–5 MB แอปพลิเคชันเต็มรูปแบบที่ดึงเฟรมเวิร์กขนาดใหญ่เข้ามา (Fastify, mysql2 และอื่น ๆ) มีขนาดประมาณ 48 MB — ยังคงต่ำกว่า ~80–150 MB ที่แอป Electron หรือไบนารีแบบฝังรันไทม์เริ่มต้นไว้มาก
ใช้แพ็กเกจ npm ได้หรือไม่?
ได้ แพ็กเกจ TypeScript/JavaScript ล้วนคอมไพล์แบบเนทีฟได้ผ่าน perry.compilePackages — axios, zod v4, express, fastify และ hono คอมไพล์และรันได้แล้วในวันนี้ แพ็กเกจที่ต้องการ semantics ของ JS engine เต็มรูปแบบสามารถรันผ่าน V8 fallback แบบเสริมด้วย --enable-js-runtime
Perry รองรับแพลตฟอร์มใดบ้าง?
10 เป้าหมายการคอมไพล์: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly และ Web/JS แอป GUI ใช้วิดเจ็ตแพลตฟอร์มเนทีฟ — AppKit, UIKit, GTK4, Win32 และ Android ผ่าน JNI
Perry ฟรีและเป็นโอเพนซอร์สหรือไม่?
ใช่ คอมไพเลอร์นี้ฟรีและเป็นโอเพนซอร์ส การคอมไพล์และรันในเครื่องไม่มีค่าใช้จ่ายและไม่ต้องมีบัญชี Perry Publish — ไปป์ไลน์สำหรับ build, ลงนาม และส่งขึ้นสโตร์แบบโฮสต์ — มีแพลนฟรี (เผยแพร่ได้ 15 ครั้งต่อเดือน) และแพลน Pro
Perry ต่างจาก Bun หรือ Deno compile อย่างไร?
Bun และ Deno รวม JavaScript ของคุณเข้ากับรันไทม์ของตัวเองไว้ในไฟล์เดียว — hello world มีขนาดประมาณ 60–100 MB ขึ้นอยู่กับแพลตฟอร์ม และโค้ดยังคงถูกรันแบบ JIT อยู่ Perry คอมไพล์ TypeScript ล่วงหน้าเป็นโค้ดเครื่องผ่าน LLVM: ไม่มี engine ฝังตัว, hello world ขนาด ~330 KB, เริ่มทำงานใน ~1 ms ดูการเปรียบเทียบแบบเต็มที่ Perry vs Bun และ Perry vs Deno
Perry ต่างจาก Electron หรือ Tauri อย่างไร?
Electron ส่งมอบ Chromium และ Node.js ไปกับทุกแอป ทำให้ตัวติดตั้งเริ่มต้นที่ประมาณ 80–150 MB Tauri มีขนาดเล็กกว่ามากแต่ยังคงเรนเดอร์ web frontend ใน webview ของระบบ โดยมี app logic เป็น Rust Perry ไม่ใช้ webview เลย: TypeScript คอมไพล์เป็นโค้ดเครื่องที่ขับวิดเจ็ตแพลตฟอร์มจริง — AppKit, UIKit, GTK4, Win32 — ในโพรเซสเดียว ดูการเปรียบเทียบแบบเต็มที่ Perry vs Electron และ Perry vs Tauri
Perry มีความสมบูรณ์แค่ไหน?
Perry อยู่ในขั้น pre-1.0 และพัฒนาอย่างรวดเร็ว แต่แอปจริงที่สร้างด้วยมันก็กำลังส่งมอบอยู่แล้วในวันนี้ — รวมถึง Bloom Engine, Mango, Hone, Pry และ dB Meter ดูรายละเอียดที่ showcase
มีคำถามเพิ่มเติมไหม? อ่านคู่มือเริ่มต้นใช้งาน หรือถามได้ที่ GitHub Discussions