Un seul code. Toutes les plateformes.
Performance native.
Perry compile TypeScript en applications GUI et CLI natives sur macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly et le Web. Pas de runtime. Pas d'Electron. Juste des binaires natifs.
$ perry compile main.ts
Compilation de main.ts...
✓ Exécutable compilé : main (2,3 Mo)
$ ./main
Hello, World!
Pourquoi Perry ?
Tout ce dont vous avez besoin pour compiler TypeScript en applications natives
Aucun runtime nécessaire
Produit des exécutables natifs autonomes. Pas de Node.js, pas de V8, aucune dépendance runtime. Juste un binaire unique qui s'exécute partout.
Compilation rapide
Compilation directe de TypeScript en code natif avec SWC pour l'analyse et Cranelift pour la génération de code. Pas de JavaScript intermédiaire.
Petits binaires
Les binaires de sortie font généralement 2 à 5 Mo. Avec le runtime V8 optionnel pour les paquets npm JS, 15 à 20 Mo. Livrez moins, déployez plus vite.
Sûreté des types
Exploite le système de types de TypeScript pour l'optimisation. Les types permettent une meilleure génération de code grâce à la monomorphization.
Bibliothèque standard complète
Implémentations natives intégrées de fs, path, crypto, os, Buffer, child_process et plus. Utilisez les APIs familières de Node.js.
Runtime V8 optionnel
Besoin d'utiliser un paquet npm JavaScript pur ? Activez le flag runtime V8 pour une compatibilité complète avec l'écosystème npm.
Plus de 25 widgets UI natifs
Boutons, champs de texte, zones de texte, tableaux, canvas, scroll views, codes QR, champs sécurisés, écrans de démarrage et plus — le tout compilé en véritables widgets de plateforme via AppKit, GTK4, Win32, UIKit et JNI.
Système de plugins au moment de la compilation
Les modules se composent au moment du build — aucun overhead de plugin à l'exécution, aucune frontière IPC. Vos dépendances deviennent des appels de fonction natifs directs dans le binaire final.
Vrai multi-threading
De vrais threads OS avec parallelMap, parallelFilter et spawn. La sûreté au moment de la compilation rejette les captures mutables — pas de SharedArrayBuffer, pas de workers, juste des threads.
i18n au moment de la compilation
Extraction automatique des chaînes, règles de pluriel CLDR pour plus de 30 langues, validation au moment de la compilation. Les traductions sont intégrées dans le binaire avec une recherche quasi nulle à l'exécution.
Natif sur toutes les plateformes
Perry compile votre TypeScript en frameworks UI natifs, WebAssembly et JavaScript — pas de web views, pas d'Electron. De vrais widgets natifs sur chaque plateforme, plus le web.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
Le seul framework qui coche toutes les cases
TypeScript compilé en code natif. De vrais widgets de plateforme. Zéro overhead runtime.
| Framework | Langage | Code natif | Widgets natifs | Overhead runtime |
|---|---|---|---|---|
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 | Partiel | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | Pas d'UI partagée | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | Partiel | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
Écrivez du TypeScript, livrez en natif
Utilisez la syntaxe et les APIs TypeScript familières. Perry s'occupe du reste.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!Comparaison des performances
La compilation native offre une efficacité inégalée
| Métrique | Perry | Node.js | Bun |
|---|---|---|---|
| Taille du binaire | 2-5 MB | ~80 MB | ~90 MB |
| Temps de démarrage | ~1 ms | ~30 ms | ~10 ms |
| Dépendances runtime | Aucune | Node.js | Bun |
| Overhead mémoire | Minimal | V8 + GC | JSC + GC |
Résultats du benchmark : 2,2x plus rapide
Perry vs Node.js v24 sur macOS ARM64 (plus bas est mieux)
Commencer
Installez Perry et commencez à compiler TypeScript en exécutables natifs
1Installation
$ brew tap PerryTS/perry$ brew install perryNécessite Homebrew. Compatible macOS arm64 et x86_64.
2Utilisation
perry build main.tsCompile main.ts en un exécutable natif
perry build main.ts -o myappSpécifier le nom de l'exécutable de sortie
perry build main.ts --enable-js-runtimeActiver V8 pour la compatibilité des paquets npm JavaScript
perry check ./srcValider le code TypeScript pour la compilation native
Support des fonctionnalités
Couverture complète des APIs TypeScript et 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
Plus de 30 paquets npm natifs
Des paquets npm populaires réimplémentés en Rust natif. Pas de npm install, pas de node_modules, juste du code natif rapide.
Base de données
Sécurité
HTTP
Traitement de données
Date et heure
Utilitaires
Du code à l<gradient>App Store</gradient>
Perry ne fait pas que compiler votre app — il la met entre les mains de vos utilisateurs.
Compiler et signer
Des builds multiplateforme en une seule commande. La signature de code pour macOS, iOS, Android et Windows est gérée pour vous. Plus besoin de se battre avec les profils de provisionnement Xcode ou les keystores Android.
Distribuer
Publiez sur l'App Store, le Play Store ou envoyez des téléchargements directs. Perry Publish gère l'empaquetage, la notarisation et la soumission.
Vérifier
Propulsé par Geisterhand. Tests UI automatisés sur les 6 plateformes. Sachez que votre app fonctionne partout avant que vos utilisateurs ne vous disent le contraire.
Gratuit pour les projets open source. Plans pour les équipes → /publish
Comment ça fonctionne
Du code source TypeScript à l'exécutable natif en quelques secondes
lift
Vous voulez savoir comment le compilateur fonctionne en coulisses ? Fonctionnement interne du compilateur