Perry
ja
v0.5.306 — 世代別GC + 遅延JSONテープがデフォルト、ほとんどのベンチマークでNodeとBunより高速

ひとつのコードベース。すべてのプラットフォーム。
ネイティブパフォーマンス。

PerryはTypeScriptをmacOS、iPadOS、iOS、Android、Linux、Windows、watchOS、tvOS、WebAssembly、Web向けのネイティブGUI・CLIアプリにコンパイルします。ランタイム不要。Electron不要。ネイティブバイナリのみ。

terminal
$ perry compile main.ts
main.tsをコンパイル中...
✓ コンパイル済み実行ファイル: main (2.3 MB)

$ ./main
Hello, World!
10
ターゲット
25+
ネイティブUIウィジェット
<50 ms
起動時間
App Store
対応済み

なぜPerryなのか?

TypeScriptをネイティブアプリケーションにコンパイルするために必要なすべてが揃っています

noRuntime
fastCompilation
smallBinaries
deterministicBuilds
stdLib
v8Runtime
widgets
plugins
threading
i18n

みんなが作っているもの

TypeScriptからコンパイルされた本物のネイティブアプリ。Electronなし、WebViewなし — すべてのプラットフォームでネイティブUI。

Mango

Mango

ネイティブMongoDB GUI — TypeScriptで完全構築

macOSLinuxWindows
Mango — document editor
Mango — query explorer
Hone

Hone

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

macOSiOSWeb
Hone — native AI code editor

すべてのプラットフォームでネイティブ

PerryはTypeScriptをネイティブUIフレームワーク、WebAssembly、JavaScriptにコンパイルします——Webビューでもなく、Electronでもありません。すべてのプラットフォームで本物のネイティブウィジェットを、そしてWebも。

🍎
macOS
安定版
📱
iOS
安定版
📲
iPadOS
安定版
watchOS
安定版
📺
tvOS
安定版
🤖
Android
安定版
🐧
Linux
安定版
🪟
Windows
安定版
🌐
Wasm
安定版
💻
Web
安定版

コードからApp Store

Perryはアプリをコンパイルするだけでなく、ユーザーの手に届けます。

perry compileコンパイルと署名
perry publishパッケージと提出
ストアとダウンロードApp Store、Play Store、直接配布
perry verifyすべてのプラットフォームでテスト

ビルドと署名

ひとつのコマンドでクロスプラットフォームビルド。macOS、iOS、Android、Windowsのコード署名を自動処理。XcodeプロビジョニングプロファイルやAndroidキーストアとの格闘は不要です。

配布

App Store、Play Storeへのプッシュ、または直接ダウンロードとして配布。Perry Publishがパッケージング、公証、提出を処理します。

検証

Geisterhandによる自動UIテスト。6つのプラットフォームすべてでテスト。ユーザーから指摘される前に、アプリがどこでも動作することを確認できます。

オープンソースプロジェクトは無料。 チーム向けプラン → /publish

フレームワーク比較

すべての要件を満たす唯一のフレームワーク

TypeScriptをネイティブコードにコンパイル。本物のプラットフォームウィジェット。ランタイムオーバーヘッドゼロ。

フレームワーク言語ネイティブコードネイティブウィジェットランタイムオーバーヘッド
PerryTypeScript✓ ネイティブコンパイル✓ 本物のプラットフォームウィジェット✓ ランタイムオーバーヘッドゼロ
React NativeJS / TSJS bridge部分的JS engine + bridge
FlutterDartAOT共通UIなしDart VM
ElectronJS / TSChromium runtimeHTML mimicsChromium + Node

TypeScriptを書いて、ネイティブで出荷

おなじみのTypeScript構文とAPIを使用。Perryが残りを処理します。

hello.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);

// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
ネイティブバイナリ

パフォーマンス比較

ネイティブコンパイルが圧倒的な効率性を実現

バイナリサイズ
1.8 MB
Bun 96 MB · Node 110 MB
起動時間
<50 ms
Bun ~200 ms · Node ~800 ms
ランタイム依存
なし
Bun + Node need runtimes
メモリオーバーヘッド
最小限
Bun ~80 MB · Node ~120 MB

はじめる

Perryをインストールして、TypeScriptをネイティブ実行ファイルにコンパイルしましょう

Homebrew (macOS)

brew install perry-ts/perry
Homebrewが必要です。macOS arm64とx86_64に対応。

APT (Debian/Ubuntu)

apt-get install perry
x86_64およびarm64 Linuxに対応。

Windows (winget)

scoop install perry-ts/perry
Windows Package Managerが必要です。Windows x86_64とarm64に対応。

機能サポート

TypeScriptおよびNode.js APIの包括的なカバレッジ

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-OrderFunctions 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
完全サポート
部分的

30以上のネイティブnpmパッケージ

人気のnpmパッケージをネイティブRustで再実装。npm installもnode_modulesも不要、高速なネイティブコードだけ。

データベース

mysql2pgmongodbbetter-sqlite3ioredis

セキュリティ

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

データ処理

cheeriosharpzliblodash

日付と時刻

dayjsmomentdate-fnsnode-cron

ユーティリティ

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
インポートして使うだけ——Perryが自動的にネイティブ実装を使用します

仕組み

TypeScriptソースからネイティブ実行ファイルまで、わずか数秒

TypeScript.tsファイル
SWC
パーサー高速パース
HIR
変換Monomorphization
LLVM
コード生成マシンコード
実行ファイル2〜5 MBバイナリ

コンパイラの内部の仕組みを知りたいですか? コンパイラ内部構造

ブログ

16 ブログ