v0.4.24 — target tvOS, cross-compilazione iOS/macOS da Linux, perry login

Un solo codice. Ogni piattaforma.
Prestazioni native.

Perry compila TypeScript in applicazioni GUI e CLI native su macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly e il Web. Nessun runtime. Nessun Electron. Solo binari nativi.

terminal

$ perry compile main.ts

Compilazione di main.ts...

✓ Eseguibile compilato: main (2,3 MB)

$ ./main

Hello, World!

10
Target
25+
Widget UI nativi
0 ms
Tempo di avvio
App Store
Pronto

Perché Perry?

Tutto ciò che serve per compilare TypeScript in applicazioni native

Nessun runtime necessario

Produce eseguibili nativi autonomi. Nessun Node.js, nessun V8, nessuna dipendenza runtime. Solo un singolo binario che funziona ovunque.

Compilazione veloce

Compilazione diretta da TypeScript a codice nativo usando SWC per il parsing e Cranelift per la generazione del codice. Nessun JavaScript intermedio.

Binari compatti

I binari di output sono tipicamente 2-5 MB. Con il runtime V8 opzionale per i pacchetti npm JS, 15-20 MB. Distribuisci meno, fai il deploy più velocemente.

Type-safe

Sfrutta il sistema di tipi di TypeScript per l'ottimizzazione. I tipi permettono una migliore generazione del codice tramite monomorphization.

Libreria standard completa

Implementazioni native integrate di fs, path, crypto, os, Buffer, child_process e altro. Usa le API familiari di Node.js.

Runtime V8 opzionale

Devi usare un pacchetto npm JavaScript puro? Abilita il flag runtime V8 per la piena compatibilità con l'ecosistema npm.

Oltre 25 widget UI nativi

Pulsanti, campi di testo, aree di testo, tabelle, canvas, scroll view, codici QR, campi sicuri, schermate di avvio e altro — tutto compilato in veri widget di piattaforma tramite AppKit, GTK4, Win32, UIKit e JNI.

Sistema di plugin a tempo di compilazione

I moduli si compongono al momento del build — nessun overhead di plugin a runtime, nessun confine IPC. Le tue dipendenze diventano chiamate di funzione native dirette nel binario finale.

Vero multi-threading

Veri thread del sistema operativo con parallelMap, parallelFilter e spawn. Sicurezza a tempo di compilazione che rifiuta le catture mutabili — nessun SharedArrayBuffer, nessun worker, solo thread.

i18n a tempo di compilazione

Estrazione automatica delle stringhe, regole di plurale CLDR per oltre 30 lingue, validazione a tempo di compilazione. Le traduzioni vengono integrate nel binario con ricerca quasi nulla a runtime.

Nativo su ogni piattaforma

Perry compila il tuo TypeScript in framework UI nativi, WebAssembly e JavaScript — niente web view, niente Electron. Veri widget nativi su ogni piattaforma, più il web.

macOS

AppKit

Stabile

iOS

UIKit

Stabile

iPadOS

UIKit

Stabile

Android

Views

Stabile

Linux

GTK4

Stabile

Windows

Win32

Stabile

watchOS

SwiftUI

Stabile

tvOS

SwiftUI

Stabile

WASM

WebAssembly

Stabile

Web

JavaScript

Stabile
Confronto framework

L'unico framework che soddisfa ogni requisito

TypeScript compilato in codice nativo. Veri widget di piattaforma. Zero overhead runtime.

FrameworkLinguaggioCodice nativoWidget nativiOverhead 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
Parziale
Kotlin runtime + Skia
Swift for AndroidNative binary, no shared UI
Swift
Nessuna UI condivisa
Swift runtime on Android
.NET MAUIPartial AOT via Mono
C#
Parziale
.NET / Mono runtime
NativeScriptJS runtime, native widget access
JS / TypeScript
V8 / JavaScriptCore
IonicWeb app in native wrapper
JS / TypeScript
WebView + Capacitor
Compilato nativo
Veri widget di piattaforma
Zero overhead runtime

Scrivi TypeScript, distribuisci nativo

Usa la sintassi e le API TypeScript familiari. Perry fa il resto.

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

Confronto delle prestazioni

La compilazione nativa offre un'efficienza senza pari

MetricaPerryNode.jsBun
Dimensione binario2-5 MB~80 MB~90 MB
Tempo di avvio~1 ms~30 ms~10 ms
Dipendenze runtimeNessunaNode.jsBun
Overhead memoriaMinimoV8 + GCJSC + GC

Risultati benchmark: 2,2x più veloce

Perry vs Node.js v24 su macOS ARM64 (più basso è meglio)

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
Dimensione binarioPiù basso è meglio
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Inizia

Installa Perry e inizia a compilare TypeScript in eseguibili nativi

1Installazione

terminal
$ brew tap PerryTS/perry
$ brew install perry

Richiede Homebrew. Supporta macOS arm64 e x86_64.

2Utilizzo

Compila un file
perry build main.ts

Compila main.ts in un eseguibile nativo

Output personalizzato
perry build main.ts -o myapp

Specifica il nome dell'eseguibile di output

Con runtime V8
perry build main.ts --enable-js-runtime

Abilita V8 per la compatibilità con i pacchetti npm JavaScript

Verifica compatibilità
perry check ./src

Valida il codice TypeScript per la compilazione nativa

Supporto delle funzionalità

Copertura completa delle API TypeScript e 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
Supporto completo
Parziale

Oltre 30 pacchetti npm nativi

Pacchetti npm popolari reimplementati in Rust nativo. Nessun npm install, nessun node_modules, solo codice nativo veloce.

Database

mysql2pgmongodbbetter-sqlite3ioredis

Sicurezza

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Elaborazione dati

cheeriosharpzliblodash

Data e ora

dayjsmomentdate-fnsnode-cron

Utilità

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Basta importare e usare — Perry utilizza automaticamente l'implementazione nativa

Dal codice all<gradient>App Store</gradient>

Perry non solo compila la tua app — la mette nelle mani dei tuoi utenti.

perry buildCompila e firma
perry publishImpacchetta e invia
Store e downloadApp Store, Play Store, diretto
perry verifyTesta ogni piattaforma

Compila e firma

Build multipiattaforma con un solo comando. La firma del codice per macOS, iOS, Android e Windows viene gestita per te. Niente più lotte con i profili di provisioning Xcode o i keystore Android.

Distribuisci

Pubblica sull'App Store, Play Store o distribuisci download diretti. Perry Publish gestisce il packaging, la notarizzazione e l'invio.

Verifica

Powered by Geisterhand. Test UI automatizzati su tutte le 6 piattaforme. Sappi che la tua app funziona ovunque prima che i tuoi utenti te lo facciano notare.

Gratuito per i progetti open source. Piani per i team → /publish

Come funziona

Dal codice sorgente TypeScript all'eseguibile nativo in pochi secondi

TypeScriptFile .ts
SWC
ParserParsing veloce
HIR
TrasformazioneMonomorphization
Crane
lift
CodegenCodice macchina
EseguibileBinario da 2-5 MB

Vuoi sapere come funziona il compilatore sotto il cofano? Meccanismi interni del compilatore