Un código fuente. Todas las plataformas.
Rendimiento nativo.
Perry compila TypeScript a aplicaciones nativas GUI y CLI en macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly y la Web. Sin runtime. Sin Electron. Solo binarios nativos.
$ perry compile main.ts
Compilando main.ts...
✓ Ejecutable compilado: main (2,3 MB)
$ ./main
Hello, World!
¿Por qué Perry?
Todo lo que necesitas para compilar TypeScript a aplicaciones nativas
Sin runtime necesario
Produce ejecutables nativos independientes. Sin Node.js, sin V8, sin dependencias de runtime. Solo un binario que se ejecuta en cualquier lugar.
Compilación rápida
Compilación directa de TypeScript a código nativo usando SWC para el análisis y Cranelift para la generación de código. Sin JavaScript intermedio.
Binarios pequeños
Los binarios de salida suelen ser de 2-5 MB. Con el runtime V8 opcional para paquetes npm de JS, 15-20 MB. Envía menos, despliega más rápido.
Seguridad de tipos
Aprovecha el sistema de tipos de TypeScript para la optimización. Los tipos permiten mejor generación de código mediante monomorphization.
Biblioteca estándar completa
Implementaciones nativas integradas de fs, path, crypto, os, Buffer, child_process y más. Usa las APIs familiares de Node.js.
Runtime V8 opcional
¿Necesitas usar un paquete npm de JavaScript puro? Activa la flag de runtime V8 para compatibilidad total con el ecosistema npm.
Más de 25 widgets UI nativos
Botones, campos de texto, áreas de texto, tablas, canvas, scroll views, códigos QR, campos seguros, pantallas de inicio y más — todo compilado a widgets reales de la plataforma vía AppKit, GTK4, Win32, UIKit y JNI.
Sistema de plugins en tiempo de compilación
Los módulos se componen en tiempo de compilación — sin overhead de plugins en runtime, sin fronteras IPC. Tus dependencias se convierten en llamadas de función nativas directas en el binario final.
Multi-threading real
Hilos reales del sistema operativo con parallelMap, parallelFilter y spawn. Seguridad en tiempo de compilación que rechaza capturas mutables — sin SharedArrayBuffer, sin workers, solo hilos.
i18n en tiempo de compilación
Extracción automática de cadenas, reglas de plural CLDR para más de 30 idiomas, validación en tiempo de compilación. Las traducciones se integran en el binario con búsqueda casi nula en runtime.
Nativo en todas las plataformas
Perry compila tu TypeScript a frameworks de UI nativos, WebAssembly y JavaScript — no web views, no Electron. Widgets nativos reales en cada plataforma, más la web.
macOS
AppKit
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
El único framework que cumple todos los requisitos
TypeScript compilado a código nativo. Widgets reales de la plataforma. Sin overhead de runtime.
| Framework | Lenguaje | Código nativo | Widgets nativos | Overhead de 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 | Parcial | Kotlin runtime + Skia | |
Swift for AndroidNative binary, no shared UI | Swift | Sin UI compartida | Swift runtime on Android | |
.NET MAUIPartial AOT via Mono | C# | Parcial | .NET / Mono runtime | |
NativeScriptJS runtime, native widget access | JS / TypeScript | V8 / JavaScriptCore | ||
IonicWeb app in native wrapper | JS / TypeScript | WebView + Capacitor |
Escribe TypeScript, envía nativo
Usa la sintaxis y APIs familiares de TypeScript. Perry se encarga del resto.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!Comparación de rendimiento
La compilación nativa ofrece eficiencia incomparable
| Métrica | Perry | Node.js | Bun |
|---|---|---|---|
| Tamaño del binario | 2-5 MB | ~80 MB | ~90 MB |
| Tiempo de inicio | ~1 ms | ~30 ms | ~10 ms |
| Dependencias de runtime | Ninguna | Node.js | Bun |
| Overhead de memoria | Mínimo | V8 + GC | JSC + GC |
Resultados del benchmark: 2,2x más rápido
Perry vs Node.js v24 en macOS ARM64 (menor es mejor)
Comenzar
Instala Perry y empieza a compilar TypeScript a ejecutables nativos
1Instalación
$ brew tap PerryTS/perry$ brew install perryRequiere Homebrew. Compatible con macOS arm64 y x86_64.
2Uso
perry build main.tsCompila main.ts a un ejecutable nativo
perry build main.ts -o myappEspecificar el nombre del ejecutable de salida
perry build main.ts --enable-js-runtimeHabilitar V8 para compatibilidad con paquetes npm de JavaScript
perry check ./srcValidar código TypeScript para compilación nativa
Soporte de características
Cobertura completa de APIs de TypeScript y 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
Más de 30 paquetes npm nativos
Paquetes npm populares reimplementados en Rust nativo. Sin npm install, sin node_modules, solo código nativo rápido.
Base de datos
Seguridad
HTTP
Procesamiento de datos
Fecha y hora
Utilidades
Del código al App Store
Perry no solo compila tu app — la pone en las manos de tus usuarios.
Compilar y firmar
Builds multiplataforma con un solo comando. La firma de código para macOS, iOS, Android y Windows se maneja por ti. Sin luchar con perfiles de aprovisionamiento de Xcode o keystores de Android.
Distribuir
Publica en el App Store, Play Store o envía descargas directas. Perry Publish maneja el empaquetado, la notarización y el envío.
Verificar
Impulsado por Geisterhand. Pruebas UI automatizadas en las 6 plataformas. Sabe que tu app funciona en todas partes antes de que tus usuarios te digan lo contrario.
Gratis para proyectos de código abierto. Planes para equipos → /publish
Cómo funciona
De código fuente TypeScript a ejecutable nativo en segundos
lift
¿Quieres saber cómo funciona el compilador internamente? Internos del compilador