v0.4.24 — alvo tvOS, compilação cruzada iOS/macOS a partir do Linux, perry login

Um único código. Todas as plataformas.
Desempenho nativo.

Perry compila TypeScript para aplicações GUI e CLI nativas em macOS, iPadOS, iOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly e Web. Sem runtime. Sem Electron. Apenas binários nativos.

terminal

$ perry compile main.ts

Compilando main.ts...

✓ Executável compilado: main (2,3 MB)

$ ./main

Hello, World!

10
Alvos
25+
Widgets UI nativos
0 ms
Tempo de inicialização
App Store
Pronto

Por que Perry?

Tudo o que você precisa para compilar TypeScript em aplicações nativas

Sem runtime necessário

Produz executáveis nativos independentes. Sem Node.js, sem V8, sem dependências de runtime. Apenas um binário que roda em qualquer lugar.

Compilação rápida

Compilação direta de TypeScript para código nativo usando SWC para análise e Cranelift para geração de código. Sem JavaScript intermediário.

Binários pequenos

Os binários de saída são tipicamente 2-5 MB. Com o runtime V8 opcional para pacotes npm JS, 15-20 MB. Envie menos, faça deploy mais rápido.

Segurança de tipos

Utiliza o sistema de tipos do TypeScript para otimização. Os tipos permitem melhor geração de código através de monomorphization.

Biblioteca padrão abrangente

Implementações nativas integradas de fs, path, crypto, os, Buffer, child_process e mais. Use as APIs familiares do Node.js.

Runtime V8 opcional

Precisa usar um pacote npm de JavaScript puro? Ative a flag de runtime V8 para compatibilidade total com o ecossistema npm.

Mais de 25 widgets UI nativos

Botões, campos de texto, áreas de texto, tabelas, canvas, scroll views, códigos QR, campos seguros, telas de abertura e mais — tudo compilado para widgets reais da plataforma via AppKit, GTK4, Win32, UIKit e JNI.

Sistema de plugins em tempo de compilação

Módulos se compõem em tempo de build — sem overhead de plugins em runtime, sem fronteiras IPC. Suas dependências se tornam chamadas de função nativas diretas no binário final.

Multi-threading real

Threads reais do sistema operacional com parallelMap, parallelFilter e spawn. Segurança em tempo de compilação rejeita capturas mutáveis — sem SharedArrayBuffer, sem workers, apenas threads.

i18n em tempo de compilação

Extração automática de strings, regras de plural CLDR para mais de 30 idiomas, validação em tempo de compilação. Traduções integradas no binário com busca quase nula em runtime.

Nativo em todas as plataformas

Perry compila seu TypeScript para frameworks UI nativos, WebAssembly e JavaScript — sem web views, sem Electron. Widgets nativos reais em cada plataforma, mais a web.

macOS

AppKit

Estável

iOS

UIKit

Estável

iPadOS

UIKit

Estável

Android

Views

Estável

Linux

GTK4

Estável

Windows

Win32

Estável

watchOS

SwiftUI

Estável

tvOS

SwiftUI

Estável

WASM

WebAssembly

Estável

Web

JavaScript

Estável
Comparação de frameworks

O único framework que marca todas as caixas

TypeScript compilado para código nativo. Widgets reais da plataforma. Zero overhead de runtime.

FrameworkLinguagemCó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
Sem UI compartilhada
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 reais da plataforma
Zero overhead de runtime

Escreva TypeScript, entregue nativo

Use a sintaxe e APIs familiares do TypeScript. Perry cuida do resto.

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

Comparação de desempenho

A compilação nativa oferece eficiência incomparável

MétricaPerryNode.jsBun
Tamanho do binário2-5 MB~80 MB~90 MB
Tempo de inicialização~1 ms~30 ms~10 ms
Dependências de runtimeNenhumaNode.jsBun
Overhead de memóriaMínimoV8 + GCJSC + GC

Resultados do benchmark: 2,2x mais rápido

Perry vs Node.js v24 no macOS ARM64 (menor é melhor)

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
Tamanho do binárioMenor é melhor
Perry
5 MB
Node.js
80 MB
Bun
90 MB

Começar

Instale Perry e comece a compilar TypeScript para executáveis nativos

1Instalação

terminal
$ brew tap PerryTS/perry
$ brew install perry

Requer Homebrew. Suporta macOS arm64 e x86_64.

2Uso

Compilar um arquivo
perry build main.ts

Compila main.ts para um executável nativo

Saída personalizada
perry build main.ts -o myapp

Especificar o nome do executável de saída

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

Ativar V8 para compatibilidade com pacotes npm JavaScript

Verificar compatibilidade
perry check ./src

Validar código TypeScript para compilação nativa

Suporte de funcionalidades

Cobertura abrangente de APIs 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
Suporte completo
Parcial

Mais de 30 pacotes npm nativos

Pacotes npm populares reimplementados em Rust nativo. Sem npm install, sem node_modules, apenas código nativo rápido.

Banco de dados

mysql2pgmongodbbetter-sqlite3ioredis

Segurança

bcryptargon2jsonwebtokencrypto

HTTP

httphttpsaxiosnode-fetchwsnodemailer

Processamento de dados

cheeriosharpzliblodash

Data e hora

dayjsmomentdate-fnsnode-cron

Utilitários

uuidnanoidslugifyvalidatordotenvrate-limiter-flexible
Basta importar e usar — Perry utiliza automaticamente a implementação nativa

Do código à App Store

Perry não apenas compila sua app — coloca-a nas mãos dos seus usuários.

perry buildCompilar e assinar
perry publishEmpacotar e enviar
Lojas e downloadsApp Store, Play Store, direto
perry verifyTestar em cada plataforma

Compilar e assinar

Builds multiplataforma com um único comando. Assinatura de código para macOS, iOS, Android e Windows feita por você. Sem lutar com perfis de provisionamento do Xcode ou keystores do Android.

Distribuir

Publique na App Store, Play Store ou envie downloads diretos. Perry Publish cuida do empacotamento, notarização e envio.

Verificar

Powered by Geisterhand. Testes de UI automatizados em todas as 6 plataformas. Saiba que sua app funciona em todos os lugares antes que seus usuários digam o contrário.

Grátis para projetos de código aberto. Planos para equipes → /publish

Como funciona

Do código-fonte TypeScript ao executável nativo em segundos

TypeScriptArquivos .ts
SWC
ParserAnálise rápida
HIR
TransformaçãoMonomorphization
Crane
lift
CodegenCódigo de máquina
ExecutávelBinário de 2-5 MB

Quer saber como o compilador funciona por dentro? Internos do compilador