v0.4.24 — cible tvOS, compilation croisée iOS/macOS depuis Linux, perry login

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.

terminal

$ perry compile main.ts

Compilation de main.ts...

✓ Exécutable compilé : main (2,3 Mo)

$ ./main

Hello, World!

10
Cibles
25+
Widgets UI natifs
0 ms
Temps de démarrage
App Store
Prêt

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

Stable

iOS

UIKit

Stable

iPadOS

UIKit

Stable

Android

Views

Stable

Linux

GTK4

Stable

Windows

Win32

Stable

watchOS

SwiftUI

Stable

tvOS

SwiftUI

Stable

WASM

WebAssembly

Stable

Web

JavaScript

Stable
Comparaison de frameworks

Le seul framework qui coche toutes les cases

TypeScript compilé en code natif. De vrais widgets de plateforme. Zéro overhead runtime.

FrameworkLangageCode natifWidgets natifsOverhead runtime
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
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
Compilé natif
Vrais widgets de plateforme
Zéro overhead runtime

Écrivez du TypeScript, livrez en natif

Utilisez la syntaxe et les APIs TypeScript familières. Perry s'occupe du reste.

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

Comparaison des performances

La compilation native offre une efficacité inégalée

MétriquePerryNode.jsBun
Taille du binaire2-5 MB~80 MB~90 MB
Temps de démarrage~1 ms~30 ms~10 ms
Dépendances runtimeAucuneNode.jsBun
Overhead mémoireMinimalV8 + GCJSC + GC

Résultats du benchmark : 2,2x plus rapide

Perry vs Node.js v24 sur macOS ARM64 (plus bas est mieux)

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
Taille du binairePlus bas est mieux
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Commencer

Installez Perry et commencez à compiler TypeScript en exécutables natifs

1Installation

terminal
$ brew tap PerryTS/perry
$ brew install perry

Nécessite Homebrew. Compatible macOS arm64 et x86_64.

2Utilisation

Compiler un fichier
perry build main.ts

Compile main.ts en un exécutable natif

Sortie personnalisée
perry build main.ts -o myapp

Spécifier le nom de l'exécutable de sortie

Avec le runtime V8
perry build main.ts --enable-js-runtime

Activer V8 pour la compatibilité des paquets npm JavaScript

Vérifier la compatibilité
perry check ./src

Valider 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
Support complet
Partiel

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

mysql2pgmongodbbetter-sqlite3ioredis

Sécurité

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Traitement de données

cheeriosharpzliblodash

Date et heure

dayjsmomentdate-fnsnode-cron

Utilitaires

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Importez et utilisez simplement — Perry utilise automatiquement l'implémentation native

Du code à l<gradient>App Store</gradient>

Perry ne fait pas que compiler votre app — il la met entre les mains de vos utilisateurs.

perry buildCompiler et signer
perry publishEmpaqueter et soumettre
Stores et téléchargementsApp Store, Play Store, direct
perry verifyTester sur chaque plateforme

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

TypeScriptFichiers .ts
SWC
ParserAnalyse rapide
HIR
TransformationMonomorphization
Crane
lift
CodegenCode machine
ExécutableBinaire de 2 à 5 Mo

Vous voulez savoir comment le compilateur fonctionne en coulisses ? Fonctionnement interne du compilateur