v0.4.24 — objetivo tvOS, compilación cruzada iOS/macOS desde Linux, perry login

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.

terminal

$ perry compile main.ts

Compilando main.ts...

✓ Ejecutable compilado: main (2,3 MB)

$ ./main

Hello, World!

10
Plataformas
25+
Widgets UI nativos
0 ms
Tiempo de inicio
App Store
Listo

¿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

Estable

iOS

UIKit

Estable

iPadOS

UIKit

Estable

Android

Views

Estable

Linux

GTK4

Estable

Windows

Win32

Estable

watchOS

SwiftUI

Estable

tvOS

SwiftUI

Estable

WASM

WebAssembly

Estable

Web

JavaScript

Estable
Comparación de frameworks

El único framework que cumple todos los requisitos

TypeScript compilado a código nativo. Widgets reales de la plataforma. Sin overhead de runtime.

FrameworkLenguajeCódigo nativoWidgets nativosOverhead de 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
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
Compilado nativo
Widgets reales de la plataforma
Cero overhead de runtime

Escribe TypeScript, envía nativo

Usa la sintaxis y APIs familiares de TypeScript. Perry se encarga del 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

Comparación de rendimiento

La compilación nativa ofrece eficiencia incomparable

MétricaPerryNode.jsBun
Tamaño del binario2-5 MB~80 MB~90 MB
Tiempo de inicio~1 ms~30 ms~10 ms
Dependencias de runtimeNingunaNode.jsBun
Overhead de memoriaMínimoV8 + GCJSC + GC

Resultados del benchmark: 2,2x más rápido

Perry vs Node.js v24 en macOS ARM64 (menor es mejor)

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
Tamaño del binarioMenor es mejor
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Comenzar

Instala Perry y empieza a compilar TypeScript a ejecutables nativos

1Instalación

terminal
$ brew tap PerryTS/perry
$ brew install perry

Requiere Homebrew. Compatible con macOS arm64 y x86_64.

2Uso

Compilar un archivo
perry build main.ts

Compila main.ts a un ejecutable nativo

Salida personalizada
perry build main.ts -o myapp

Especificar el nombre del ejecutable de salida

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

Habilitar V8 para compatibilidad con paquetes npm de JavaScript

Verificar compatibilidad
perry check ./src

Validar 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
Soporte completo
Parcial

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

mysql2pgmongodbbetter-sqlite3ioredis

Seguridad

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Procesamiento de datos

cheeriosharpzliblodash

Fecha y hora

dayjsmomentdate-fnsnode-cron

Utilidades

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Solo importa y usa — Perry utiliza automáticamente la implementación nativa

Del código al App Store

Perry no solo compila tu app — la pone en las manos de tus usuarios.

perry buildCompilar y firmar
perry publishEmpaquetar y enviar
Tiendas y descargasApp Store, Play Store, directa
perry verifyProbar en cada plataforma

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

TypeScriptArchivos .ts
SWC
ParserAnálisis rápido
HIR
TransformaciónMonomorphization
Crane
lift
CodegenCódigo máquina
EjecutableBinario de 2-5 MB

¿Quieres saber cómo funciona el compilador internamente? Internos del compilador