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.
$ perry compile main.ts
Compilando main.ts...
✓ Executável compilado: main (2,3 MB)
$ ./main
Hello, World!
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
iOS
UIKit
iPadOS
UIKit
Android
Views
Linux
GTK4
Windows
Win32
watchOS
SwiftUI
tvOS
SwiftUI
WASM
WebAssembly
Web
JavaScript
O único framework que marca todas as caixas
TypeScript compilado para código nativo. Widgets reais da plataforma. Zero overhead de runtime.
| Framework | Linguagem | 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 | 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 |
Escreva TypeScript, entregue nativo
Use a sintaxe e APIs familiares do TypeScript. Perry cuida do resto.
// hello.tsconst greeting = "Hello, World!";console.log(greeting); // Compiles to ~2MB native executable// No runtime needed!Comparação de desempenho
A compilação nativa oferece eficiência incomparável
| Métrica | Perry | Node.js | Bun |
|---|---|---|---|
| Tamanho do binário | 2-5 MB | ~80 MB | ~90 MB |
| Tempo de inicialização | ~1 ms | ~30 ms | ~10 ms |
| Dependências de runtime | Nenhuma | Node.js | Bun |
| Overhead de memória | Mínimo | V8 + GC | JSC + GC |
Resultados do benchmark: 2,2x mais rápido
Perry vs Node.js v24 no macOS ARM64 (menor é melhor)
Começar
Instale Perry e comece a compilar TypeScript para executáveis nativos
1Instalação
$ brew tap PerryTS/perry$ brew install perryRequer Homebrew. Suporta macOS arm64 e x86_64.
2Uso
perry build main.tsCompila main.ts para um executável nativo
perry build main.ts -o myappEspecificar o nome do executável de saída
perry build main.ts --enable-js-runtimeAtivar V8 para compatibilidade com pacotes npm JavaScript
perry check ./srcValidar 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
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
Segurança
HTTP
Processamento de dados
Data e hora
Utilitários
Do código à App Store
Perry não apenas compila sua app — coloca-a nas mãos dos seus usuários.
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
lift
Quer saber como o compilador funciona por dentro? Internos do compilador