技術的な事実と測定上の注意事項は、翻訳間のずれを防ぐため英語を正本として管理しています。
TypeScript をネイティブへコンパイル。
One Codebase, Many Targets.
Perry compiles TypeScript to native GUI and CLI apps for macOS, iOS, iPadOS, visionOS, tvOS, watchOS, Android, Wear OS, Windows, Linux, and Web/WebAssembly, with a separate HarmonyOS preview. Native binaries statically link the Perry runtime and GC; they do not require Node.js or an external JavaScript engine.
$ perry compile main.ts
main.tsをコンパイル中...
✓ Example executable written: main (size varies by linked features)
$ ./main
Hello, World!
なぜPerryなのか?
The current compiler, runtime, UI, and tooling surfaces — with limitations called out
No External JS Engine
Native builds run without Node.js, Bun, Deno, or an external JavaScript engine installed. The Perry runtime and garbage collector are statically linked into each target-specific binary.
高速コンパイル
SWCによるパースとLLVMによる最適化されたコード生成で、TypeScriptからネイティブコードへ直接コンパイルします。中間JavaScriptは不要です。
Size Scales With Features
Hello world can be about 330 KB and Mango is published at about 7 MB. Applications that link the full standard library or optional V8 fallback can be much larger; size depends on target, imports, and build profile.
Cacheable Builds
Perry caches module objects and can pin a CPU baseline for portable output. Default host builds tune for the local CPU, and final binaries may contain platform UUIDs, timestamps, or signatures, so byte-for-byte cross-machine reproducibility is not promised.
Tracked Node.js APIs
Native implementations cover many familiar Node.js APIs across 53 tracked modules. Coverage is broad but not complete; use perry check and the published limitations for your project.
本物の npm パッケージ
Many pure TypeScript and JavaScript packages compile natively. Packages that depend on unsupported dynamic or engine-specific semantics may need the optional embedded V8 fallback or may not work.
35+ Native UI Widgets
35+ native UI widgets map to platform toolkits including AppKit, UIKit, GTK4, Win32, Android SDK APIs, SwiftUI on watches, and a DOM/CSS bridge on Web/WASM. Availability varies by target.
Compile-Time Plugin System
Modules can compose at build time and statically linked dependencies can become direct native calls. Dynamic dispatch and runtime support remain where JavaScript semantics require them.
True Multi-Threading
Real OS threads with parallelMap, parallelFilter, and spawn. Mutable captures are rejected by default; SharedArrayBuffer and Atomics provide explicit shared-memory coordination, with documented typed-view caveats.
Compile-Time i18n
Automatic string extraction, CLDR plural rules for 30+ locales, and compile-time validation. Translations are baked into the binary; lookup cost depends on the generated catalog and call site.
さらに詳しく:Perry がTypeScript をバイナリにコンパイルする仕組み、Perry をTypeScript ネイティブコンパイラたらしめているもの、そしてElectron の代替と比べてどうなのか。
みんなが作っているもの
Public native applications compiled from TypeScript, with platforms and capabilities taken from their current project pages.
Mango
ネイティブMongoDB GUI — TypeScriptで完全構築


Hone
ネイティブAIコードエディタ — TypeScriptからネイティブバイナリへ

Native across documented targets
Eleven documented targets share Perry’s compiler and UI model. Web and WASM are aliases; visionOS, watchOS, and Wear OS have narrower core support, and HarmonyOS is a separate preview.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
visionOS
UIKit (2D)
tvOS
UIKit
watchOS
SwiftUI
Android
Android SDK
Wear OS
Android SDK
Windows
Win32
Linux
GTK4
Web / WASM
DOM/CSS bridge
--target web and --target wasm are aliases
HarmonyOS
ArkUI
Separate preview; not included in the 11 documented targets
11 documented targets; HarmonyOS is listed separately as a preview. See the platform status guide
コードからApp Storeへ
The perry publish command supports build, signing, packaging, verification, and submission workflows. Availability and prerequisites vary by platform and hosted-service configuration.
Build & Sign
Create platform artifacts and use configured signing credentials. Apple, Android, and Windows workflows require their platform SDKs, accounts, and certificates.
Distribute
Prepare store submissions or direct-download artifacts for supported targets. Store acceptance and processing remain controlled by each store.
Verify
Run available launch and UI checks through Perry and Geisterhand. Test depth and target coverage depend on the selected environment.
Local compilation is free and MIT licensed. Check hosted-service availability → /publish
Perry’s native compilation model
Ahead-of-time machine code and real platform widgets, with an explicitly linked runtime and documented compatibility tradeoffs.
Designed for
- ✓Ahead-of-time machine code through LLVM
- ✓Real platform widgets where each target supports them
- ✓No external Node.js installation or JavaScript engine by default
Tradeoffs to evaluate
- –The Perry runtime and GC are statically linked; overhead is not “none”
- –Perry implements a practical TypeScript and Node.js subset; some packages need the optional V8 fallback
- –Platform capabilities and maturity differ across desktop, mobile, wearable, TV, and Web/WASM targets
Competitor-specific pages are dated and link to upstream documentation. View sourced comparisons
TypeScriptを書いて、ネイティブで出荷
Use familiar TypeScript syntax and validate each API or package against Perry’s current compatibility surface.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Output size varies with target and linked features// No external JavaScript runtime installation needed!Published measurements
Current public results include wins, mixed results, and losses. Treat microbenchmarks as workload-specific measurements, not a universal speed claim.
| 指標 | Perry | Node.js | Bun |
|---|---|---|---|
| バイナリサイズ | ~330 KB hello world; ~7 MB Mango | Application plus an installed Node.js runtime | Standalone executable embeds the Bun runtime |
| 起動時間 | ~3.2 ms* | Engine boot and warmup; workload-dependent | Engine boot and warmup; workload-dependent |
| ランタイム依存 | Statically linked Perry runtime + GC | External Node.js runtime | Embedded Bun / JavaScriptCore runtime |
| メモリオーバーヘッド | Workload-dependent | Workload-dependent | Workload-dependent |
* Measured runtime-only macOS hello world on an Apple M-series host (5.0 → 3.2 ms after removing unused dynamic-library links). Application startup varies.
Full public suite: wins and losses
Perry 0.5.1355 · Node.js 22.23.1 · Bun 1.3.14 · Apple M1, 8 GB · 2026-08-08
Lower wall-clock median is better. Five complete process samples; correctness checks passed. Benchmark names and descriptions remain English technical identifiers.
| Benchmark | Perry | Node.js | Bun | Result |
|---|---|---|---|---|
factorial Modular accumulation | 94 ms | 95 ms | 95 ms | Win vs both |
method calls Class method dispatch | 9 ms | 10 ms | 8 ms | Mixed |
closure Closure creation and invocation | 47 ms | 49 ms | 49 ms | Win vs both |
binary trees Tree allocation and traversal | 4 ms | 6 ms | 6 ms | Win vs both |
string concat String append loop | 2 ms | 4 ms | 1 ms | Mixed |
prime sieve Sieve of Eratosthenes | 28 ms | 6 ms | 5 ms | Loss vs both |
mandelbrot Complex-number iteration | 22 ms | 24 ms | 28 ms | Win vs both |
matrix multiply Matrix multiplication | 85 ms | 33 ms | 33 ms | Loss vs both |
JSON roundtrip Parse and stringify ~1 MB JSON | 184 ms | 380 ms | 220 ms | Win vs both |
はじめる
Perryをインストールして、TypeScriptをネイティブ実行ファイルにコンパイルしましょう
1インストール
$ npm install -g @perryts/perryRecommended cross-platform install. Native targets still require the relevant platform SDK and linker; run perry doctor after installation.
2使い方
perry doctorChecks the compiler, linker, SDK, and target setup
perry compile main.tsmain.tsをネイティブ実行ファイルにコンパイルします
perry compile main.ts -o myapp出力実行ファイル名を指定します
perry compile main.ts --enable-js-runtimeJavaScript npmパッケージの互換性のためにV8を有効化
perry check ./srcTypeScriptコードのネイティブコンパイル互換性を検証します
機能サポート
Tested surfaces and known partial areas — not a blanket claim of complete TypeScript or Node.js compatibility
コア言語
- ✓Numbers (f64 + selected unboxed representations)
- ✓Strings (UTF-8)
- ✓Booleans
- ✓Arrays
- ✓Objects
- ✓BigInt (fixed 1024-bit)
- –Proxy
- –eval / runtime-generated code
関数
- ✓Function declarations
- ✓Arrow functions
- ✓Default parameters
- ✓Rest parameters
- ✓Closures
- ✓Higher-order functions
- ✓Async / await
- –Runtime-computed dynamic import
クラス
- ✓Classes and constructors
- ✓Private fields (#)
- ✓Static methods / fields
- ✓Getters / setters
- ✓Inheritance and super
- –Decorators and reflection
- –Dynamic prototype manipulation
- –Weak references / finalizers
型システム
- ✓Type annotations
- ✓Local type inference
- ✓Generics / specialization
- ✓Interfaces
- ✓Union types and guards
- –Runtime type validation
標準ライブラリ
- –fs / path / os
- –crypto
- –Buffer and streams
- –http / http2 / net / tls
- –child_process / worker_threads
- –WebAssembly global
- –~97% Node suite · 53 modules
“Partial” means the API or syntax exists with documented gaps. Exact behavior changes as parity work lands. Read the current limitations
~50 Native Packages and Node APIs
Many popular packages and Node APIs have native implementations. Coverage is package- and feature-specific; perry check and the compatibility documentation are the source of truth.
データベース
セキュリティ
HTTP
データ処理
日付と時刻
ユーティリティ
仕組み
From TypeScript source through SWC, Perry HIR, LLVM, and the linked runtime
コンパイラの内部の仕組みを知りたいですか? コンパイラ内部構造
深掘り:LLVM 上の TypeScript――単相化、NaN-boxing、そして Perry が Cranelift を離れた理由。
よくある質問
最初のバイナリをコンパイルする前に、誰もが疑問に思うこと
Perry には Node.js やランタイムが必要ですか?
Native Perry binaries run without Node.js, Bun, Deno, or an external JavaScript engine installed. They do include the Perry runtime and garbage collector, statically linked. Packages that need engine semantics can use the optional embedded V8 fallback.
コンパイルされたバイナリのサイズはどれくらいですか?
Size depends on the target, imports, and build profile. The published examples range from about 330 KB for hello world to about 7 MB for Mango; full-standard-library or optional-V8 builds can be much larger. Treat any size as a measured example, not a universal output size.
npm パッケージは使えますか?
Many pure TypeScript/JavaScript packages compile natively, and roughly 50 package/API implementations are tracked. Compatibility is not universal: packages using native addons, unsupported dynamic behavior, or engine-specific semantics may need the optional V8 fallback or may not work. Run perry check and consult the limitations.
Perry はどのプラットフォームに対応していますか?
Perry documents 11 targets: macOS, iOS, iPadOS, visionOS, tvOS, watchOS, Android, Wear OS, Windows, Linux, and Web/WASM. Web and WASM are aliases; HarmonyOS is a separate preview. Platform maturity and API coverage differ, so consult the platform guide.
Perry は無料でオープンソースですか?
The compiler and runtime repository is MIT licensed, and local compilation requires no account. Hosted Perry Publish and commercial support are separate services; availability, limits, and pricing are confirmed in the service or in writing.
Perry は Bun や Deno compile とどう違いますか?
Bun and Deno standalone executables bundle their runtimes; Perry native builds compile through LLVM and do not embed a JavaScript engine by default, although they statically link the Perry runtime and GC. Exact size and startup comparisons are version-, platform-, and workload-specific. See the dated Perry vs Bun and Perry vs Deno pages.
Perry は Electron や Tauri とどう違いますか?
Electron ships Chromium and Node.js; Tauri uses a system webview with native-side application code. Perry instead maps its UI model to platform widgets where supported. Bundle size and platform capability vary, so use the dated Perry vs Electron and Perry vs Tauri comparisons rather than a universal size claim.
Perry の成熟度はどれくらいですか?
Perry is pre-1.0 and changes quickly. Real projects use it today, but language, package, and platform parity are still active work. Review the showcase, current limitations, and changelog before committing a production workload.
他に質問があれば、はじめにガイドを読むか、GitHub Discussionsで質問してください。