v0.4.24 — tvOS-Ziel, Cross-Compile iOS/macOS von Linux, perry login

Eine Codebasis. Jede Plattform.
Native Performance.

Perry kompiliert TypeScript zu nativen GUI- und CLI-Apps auf macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly und dem Web. Keine Laufzeitumgebung. Kein Electron. Einfach native Binaries.

terminal

$ perry compile main.ts

Kompiliere main.ts...

✓ Kompilierte Datei: main (2,3 MB)

$ ./main

Hello, World!

10
Zielplattformen
25+
Native UI-Widgets
0 ms
Startzeit
App Store
Bereit

Warum Perry?

Alles, was du brauchst, um TypeScript zu nativen Anwendungen zu kompilieren

Keine Laufzeitumgebung nötig

Erzeugt eigenständige native Binaries. Kein Node.js, kein V8, keine Laufzeitabhängigkeiten. Einfach eine einzelne Datei, die überall läuft.

Schnelle Kompilierung

Direkte TypeScript-zu-nativem-Code-Kompilierung mit SWC zum Parsen und Cranelift zur Codegenerierung. Kein Zwischen-JavaScript.

Kleine Binaries

Ausgabe-Binaries sind typischerweise 2–5 MB groß. Mit optionaler V8-Laufzeitumgebung für JS-npm-Pakete 15–20 MB. Weniger ausliefern, schneller deployen.

Typsicher

Nutzt TypeScripts Typsystem zur Optimierung. Typen ermöglichen bessere Codegenerierung durch Monomorphization.

Umfassende Standardbibliothek

Eingebaute native Implementierungen von fs, path, crypto, os, Buffer, child_process und mehr. Nutze vertraute Node.js-APIs.

Optionale V8-Laufzeitumgebung

Du musst ein reines JavaScript-npm-Paket verwenden? Aktiviere das V8-Runtime-Flag für volle npm-Ökosystem-Kompatibilität.

25+ native UI-Widgets

Buttons, Textfelder, Textbereiche, Tabellen, Canvas, Scroll-Views, QR-Codes, sichere Felder, Splash-Screens und mehr — alles kompiliert zu echten Plattform-Widgets über AppKit, GTK4, Win32, UIKit und JNI.

Compile-Time-Plugin-System

Module werden zur Build-Zeit zusammengesetzt — kein Plugin-Overhead zur Laufzeit, keine IPC-Grenzen. Deine Abhängigkeiten werden zu direkten nativen Funktionsaufrufen im fertigen Binary.

Echtes Multi-Threading

Echte OS-Threads mit parallelMap, parallelFilter und spawn. Compile-Time-Sicherheit lehnt veränderbare Captures ab — kein SharedArrayBuffer, keine Workers, einfach Threads.

Compile-Time-i18n

Automatische String-Extraktion, CLDR-Pluralregeln für 30+ Sprachen, Compile-Time-Validierung. Übersetzungen werden ins Binary eingebacken mit nahezu null Laufzeit-Lookup.

Nativ auf jeder Plattform

Perry kompiliert dein TypeScript zu nativen UI-Frameworks, WebAssembly und JavaScript — keine Web-Views, kein Electron. Echte native Widgets auf jeder Plattform, plus das Web.

macOS

AppKit

Stabil

iOS

UIKit

Stabil

iPadOS

UIKit

Stabil

Android

Views

Stabil

Linux

GTK4

Stabil

Windows

Win32

Stabil

watchOS

SwiftUI

Stabil

tvOS

SwiftUI

Stabil

WASM

WebAssembly

Stabil

Web

JavaScript

Stabil
Framework-Vergleich

Das einzige Framework, das alle Punkte erfüllt

TypeScript kompiliert zu nativem Code. Echte Plattform-Widgets. Kein Laufzeit-Overhead.

FrameworkSpracheNativer CodeNative WidgetsLaufzeit-Overhead
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
Teilweise
Kotlin runtime + Skia
Swift for AndroidNative binary, no shared UI
Swift
Kein geteiltes UI
Swift runtime on Android
.NET MAUIPartial AOT via Mono
C#
Teilweise
.NET / Mono runtime
NativeScriptJS runtime, native widget access
JS / TypeScript
V8 / JavaScriptCore
IonicWeb app in native wrapper
JS / TypeScript
WebView + Capacitor
Nativ kompiliert
Echte Plattform-Widgets
Kein Laufzeit-Overhead

Schreibe TypeScript, liefere nativ aus

Verwende die vertraute TypeScript-Syntax und APIs. Perry erledigt den Rest.

hello.ts
// hello.ts
const greeting = "Hello, World!";
console.log(greeting);
 
// Compiles to ~2MB native executable
// No runtime needed!
$ perry build hello.ts
Natives Binary

Performance-Vergleich

Native Kompilierung liefert unerreichte Effizienz

MetrikPerryNode.jsBun
Binary-Größe2-5 MB~80 MB~90 MB
Startzeit~1 ms~30 ms~10 ms
LaufzeitabhängigkeitenKeineNode.jsBun
Speicher-OverheadMinimalV8 + GCJSC + GC

Benchmark-Ergebnisse: 2,2x schneller

Perry vs Node.js v24 auf macOS ARM64 (niedriger ist besser)

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
Binary-GrößeNiedriger ist besser
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Loslegen

Installiere Perry und beginne TypeScript zu nativen Binaries zu kompilieren

1Installation

terminal
$ brew tap PerryTS/perry
$ brew install perry

Erfordert Homebrew. Unterstützt macOS arm64 und x86_64.

2Verwendung

Datei kompilieren
perry build main.ts

Kompiliert main.ts zu einem nativen Binary

Benutzerdefinierte Ausgabe
perry build main.ts -o myapp

Name der Ausgabedatei angeben

Mit V8-Laufzeitumgebung
perry build main.ts --enable-js-runtime

V8 für JavaScript-npm-Paket-Kompatibilität aktivieren

Kompatibilität prüfen
perry check ./src

TypeScript-Code für native Kompilierung validieren

Feature-Unterstützung

Umfassende TypeScript- und Node.js-API-Abdeckung

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
Volle Unterstützung
Teilweise

30+ native npm-Pakete

Beliebte npm-Pakete nativ in Rust reimplementiert. Kein npm install, kein node_modules, einfach schneller nativer Code.

Datenbank

mysql2pgmongodbbetter-sqlite3ioredis

Sicherheit

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Datenverarbeitung

cheeriosharpzliblodash

Datum & Uhrzeit

dayjsmomentdate-fnsnode-cron

Hilfsprogramme

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Einfach importieren und verwenden — Perry nutzt automatisch die native Implementierung

Vom Code zum App Store

Perry kompiliert nicht nur deine App — es bringt sie in die Hände deiner Nutzer.

perry buildKompilieren & signieren
perry publishPaketieren & einreichen
Stores & DownloadsApp Store, Play Store, direkt
perry verifyJede Plattform testen

Bauen & Signieren

Cross-Plattform-Builds mit einem Befehl. Code-Signierung für macOS, iOS, Android und Windows wird für dich erledigt. Kein Kampf mit Xcode-Provisioning-Profilen oder Android-Keystores.

Verteilen

Push zum App Store, Play Store oder versende Direktdownloads. Perry Publish übernimmt Paketierung, Notarisierung und Einreichung.

Verifizieren

Basierend auf Geisterhand. Automatisiertes UI-Testing auf allen 6 Plattformen. Wisse, dass deine App überall funktioniert, bevor deine Nutzer dir das Gegenteil sagen.

Kostenlos für Open-Source-Projekte. Pläne für Teams → /publish

So funktioniert's

Von TypeScript-Quellcode zum nativen Binary in Sekunden

TypeScript.ts-Dateien
SWC
ParserSchnelles Parsen
HIR
TransformationMonomorphization
Crane
lift
CodegenMaschinencode
Ausführbare Datei2–5 MB Binary

Willst du wissen, wie der Compiler unter der Haube funktioniert? Compiler-Interna