TypeScript zu Nativ kompilieren.
Eine Codebasis, jede Plattform.
Perry kompiliert TypeScript zu nativen GUI- und CLI-Apps auf macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, HarmonyOS, WebAssembly und dem Web. Keine Laufzeitumgebung. Kein Electron. Einfach native Binaries.
$ perry compile main.ts
Kompiliere main.ts...
✓ Kompilierte Datei: main (2,3 MB)
$ ./main
Hello, World!
Echte Apps, mit Perry aus TypeScript kompiliert.
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 LLVM zur optimierten 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.
Deterministische Builds
Gleicher Input, gleiches Binary. Reproduzierbar auf jeder Maschine, in jedem CI-Lauf, in jedem Team. Keine mysteriösen Rebuilds.
Umfassende Standardbibliothek
Eingebaute native Implementierungen von fs, path, crypto, os, Buffer, child_process und mehr. Nutze vertraute Node.js-APIs.
Echte npm-Pakete
axios, zod, express, fastify und hono kompilieren zu nativen Binärdateien. Reine JavaScript-Pakete laufen auf einer optionalen eingebetteten Laufzeitumgebung — self-contained, ohne node_modules zur Laufzeit.
35+ native UI-Widgets
Buttons, Tabellen, Datumsauswahlen, Drag & Drop, Diagramme, Karten, Befehlspaletten, QR-Codes, Rich Text und mehr — alles kompiliert zu echten Plattform-Widgets über AppKit, UIKit, GTK4, Win32 (Fluent/Mica) 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.
Mehr erfahren: wie Perry TypeScript zu einer Binary kompiliert, was einen nativen TypeScript-Compiler ausmacht, und wie Perry im Vergleich zu Electron-Alternativen abschneidet.
Was Menschen damit bauen
Echte native Apps, kompiliert aus TypeScript. Kein Electron, keine Web Views — einfach native UI auf jeder Plattform.
Mango
Native MongoDB-GUI — komplett in TypeScript gebaut


Hone
Nativer KI-Code-Editor — TypeScript zu nativer Binary

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
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
Vom Code zum App Store
Perry kompiliert nicht nur deine App — es bringt sie in die Hände deiner Nutzer.
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
Das einzige Framework, das alle Punkte erfüllt
TypeScript kompiliert zu nativem Code. Echte Plattform-Widgets. Kein Laufzeit-Overhead.
| Framework | Sprache | Nativer Code | Native Widgets | Laufzeit-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 | 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 |
Schreibe TypeScript, liefere nativ aus
Verwende die vertraute TypeScript-Syntax und APIs. Perry erledigt den Rest.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!Performance-Vergleich
Native Kompilierung liefert unerreichte Effizienz
| Metrik | Perry | Node.js | Bun |
|---|---|---|---|
| Binary-Größe | 2-5 MB | ~80 MB | ~90 MB |
| Startzeit | ~1 ms | ~30 ms | ~10 ms |
| Laufzeitabhängigkeiten | Keine | Node.js | Bun |
| Speicher-Overhead | Minimal | V8 + GC | JSC + GC |
Benchmark-Ergebnisse: Bis zu 18x schneller
Perry v0.5.279 vs Node.js v25 — RUNS=11 Median, Apple M1 Max (niedriger ist besser)
Loslegen
Installiere Perry und beginne TypeScript zu nativen Binaries zu kompilieren
1Installation
$ brew tap PerryTS/perry$ brew install perryErfordert Homebrew. Unterstützt macOS arm64 und x86_64.
2Verwendung
perry compile main.tsKompiliert main.ts zu einem nativen Binary
perry compile main.ts -o myappName der Ausgabedatei angeben
perry compile main.ts --enable-js-runtimeV8 für JavaScript-npm-Paket-Kompatibilität aktivieren
perry check ./srcTypeScript-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
30+ native npm-Pakete
Beliebte npm-Pakete nativ in Rust reimplementiert. Kein npm install, kein node_modules, einfach schneller nativer Code.
Datenbank
Sicherheit
HTTP
Datenverarbeitung
Datum & Uhrzeit
Hilfsprogramme
So funktioniert's
Von TypeScript-Quellcode zum nativen Binary in Sekunden
Willst du wissen, wie der Compiler unter der Haube funktioniert? Compiler-Interna
Tiefer eintauchen: TypeScript auf LLVM — Monomorphisierung, NaN-Boxing und warum Perry Cranelift verlassen hat.
Häufig gestellte Fragen
Alles, was Leute fragen, bevor sie ihre erste Binary kompilieren
Braucht Perry Node.js oder eine Laufzeitumgebung?
Nein. Perry kompiliert TypeScript ahead-of-time zu einem eigenständigen nativen Executable. Das Binary läuft ohne installiertes Node.js, Bun, Deno oder eine andere JavaScript-Laufzeitumgebung auf der Maschine. Für npm-Pakete, die noch nicht nativ kompilieren können, steht optional ein eingebetteter V8-Fallback über --enable-js-runtime zur Verfügung.
Wie groß sind die kompilierten Binaries?
Ein Hello-World-Binary ist rund 330 KB groß. Typische CLI-Tools landen bei 2–5 MB. Vollständige Anwendungen, die große Frameworks einbinden (Fastify, mysql2 usw.), liegen bei rund 48 MB — immer noch weit unter den ~80–150 MB, mit denen eine Electron-App oder ein Runtime-eingebettetes Binary startet.
Kann ich npm-Pakete verwenden?
Ja. Reine TypeScript-/JavaScript-Pakete kompilieren nativ über perry.compilePackages — axios, zod v4, express, fastify und hono kompilieren und laufen bereits heute. Pakete, die volle JS-Engine-Semantik benötigen, können über den optionalen V8-Fallback mit --enable-js-runtime laufen.
Welche Plattformen unterstützt Perry?
Zehn Kompilierungsziele: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly und Web/JS. GUI-Apps nutzen native Plattform-Widgets — AppKit, UIKit, GTK4, Win32 und Android über JNI.
Ist Perry kostenlos und Open Source?
Ja. Der Compiler ist kostenlos und quelloffen. Lokales Kompilieren und Ausführen kostet nichts und erfordert kein Konto. Perry Publish — die gehostete Pipeline für Build, Signierung und Store-Einreichung — hat eine kostenlose Stufe (15 Veröffentlichungen pro Monat) und einen Pro-Plan.
Wie unterscheidet sich Perry von Bun oder Deno compile?
Bun und Deno bündeln dein JavaScript zusammen mit ihrer Laufzeitumgebung in eine Datei — ein Hello World ist je nach Plattform rund 60–100 MB groß, und der Code wird weiterhin JIT-ausgeführt. Perry kompiliert TypeScript ahead-of-time über LLVM zu Maschinencode: keine eingebettete Engine, ~330 KB Hello World, ~1 ms Startzeit. Siehe die vollständigen Vergleiche Perry vs Bun und Perry vs Deno.
Wie unterscheidet sich Perry von Electron oder Tauri?
Electron liefert Chromium und Node.js mit jeder App aus, daher starten Installer bei rund 80–150 MB. Tauri ist deutlich kleiner, rendert aber weiterhin ein Web-Frontend in der System-Webview, mit App-Logik in Rust. Perry nutzt überhaupt keine Webview: TypeScript kompiliert zu Maschinencode, der echte Plattform-Widgets ansteuert — AppKit, UIKit, GTK4, Win32 — in einem einzigen Prozess. Siehe die vollständigen Vergleiche Perry vs Electron und Perry vs Tauri.
Wie ausgereift ist Perry?
Perry ist Pre-1.0 und entwickelt sich schnell weiter, aber echte damit gebaute Apps werden bereits heute ausgeliefert — darunter Bloom Engine, Mango, Hone, Pry und dB Meter. Details im Showcase.
Weitere Fragen? Lies den Getting-Started-Guide oder frag in den GitHub Discussions.