Perry vs Electron
Electron permite construir aplicações desktop multiplataforma usando tecnologias web (HTML/CSS/JS) empacotando Chromium e Node.js com sua aplicação. Perry compila TypeScript diretamente para código de máquina nativo e renderiza UI através de widgets reais da plataforma — AppKit, UIKit, GTK4, Win32, JNI. A proposta do Electron é o reaproveitamento de tecnologias web; a proposta do Perry é binários nativos pequenos com UI nativa a partir de TypeScript.
O que é Electron?
Electron é um framework de código aberto para construir aplicações desktop multiplataforma usando Chromium para renderização e Node.js para acesso ao sistema. Cada aplicação Electron entrega sua própria cópia do Chromium e do Node, razão pela qual instaladores de aplicações Electron tipicamente têm 80–150 MB mesmo para um hello world. Electron tem alimentado aplicações amplamente usadas, incluindo VS Code, Slack, Discord e o cliente desktop do Figma. Tem como alvo desktops Linux, macOS e Windows; não há proposta primária para mobile, relógio ou TV.
O que é Perry?
Perry compila TypeScript diretamente para código de máquina nativo sem motor de navegador, sem Chromium e sem runtime do Node. A camada de UI (perry/ui) é um sistema declarativo estilo SwiftUI que mapeia para widgets nativos da plataforma via AppKit no macOS, UIKit no iOS/iPadOS/tvOS, GTK4 no Linux, Win32 no Windows e JNI no Android. Binários hello-world têm ~330 KB; aplicações completas com stdlib (Fastify, mysql2 etc.) ficam em torno de 48 MB.
Lado a lado
| Funcionalidade | Perry | Electron |
|---|---|---|
| Renderização | Widgets nativos da plataforma (AppKit, UIKit, GTK4, Win32, JNI) | Chromium empacotado (HTML/CSS/JS) |
| Motores empacotados | Nenhum (V8 opcional somente com --enable-js-runtime) | Chromium + Node.js |
| Tamanho do instalador hello-world | ~330 KB | ~80–150 MB |
| Instalador de aplicação completa (stdlib + frameworks) | ~48 MB | 100–200+ MB típicos |
| Uso de RAM | Nativo (típico: dezenas de MB) | Múltiplos processos do Chromium (típico: centenas de MB) |
| Mobile / relógio / TV | Sim — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | Não (apenas desktop) |
| Linguagem de UI | TypeScript com API declarativa estilo SwiftUI | HTML/CSS/JS (stack web) |
| Auto-update / empacotamento | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (ecossistema maduro) |
| Maturidade | Pré-1.0 | Estável, mais de uma década em produção |
Onde o Perry ganha
- +Tamanho do binário. Um hello world em Perry tem ~330 KB; um hello world em Electron tipicamente tem 80–150 MB porque cada aplicação entrega seu próprio Chromium.
- +Pegada de memória. Aplicações Perry rodam como um único processo nativo; aplicações Electron rodam múltiplos processos do Chromium (renderer, GPU, utility etc.) e consomem centenas de MB de RAM em ociosidade.
- +Aparência e comportamento nativos. Perry renderiza através de widgets reais da plataforma, então as aplicações herdam convenções do SO (focus rings, acessibilidade, IME, física de scroll) automaticamente.
- +Mobile, relógio, TV. Um único código Perry compila para iOS/iPadOS/Android/watchOS/tvOS/Wear OS. Electron é apenas desktop.
- +Cold start. Binários nativos não pagam o custo de inicialização do Chromium e do Node.
- +Desempenho real de CPU em código intensivo. Perry lidera microbenchmarks de computação contra o Node (que o Electron usa) por múltiplos na maioria dos kernels (veja perry/benchmarks).
Onde o Electron ganha
- +Maturidade. Electron está em produção há mais de uma década e alimenta VS Code, Slack, Discord e muitas outras aplicações com ferramentas testadas em batalha.
- +Reaproveitamento da stack web. Se sua equipe já constrói UIs web, Electron permite entregá-las como aplicação desktop sem reescrita.
- +Consistência de UI entre plataformas é fácil — o Chromium renderiza igual em todos os SOs, que é exatamente o que alguns produtos querem.
- +Vasto ecossistema de bibliotecas npm funciona em runtime; Perry roda um subconjunto nativamente e o V8 opt-in cobre o resto.
- +Ferramentas maduras de empacotamento (electron-builder, electron-updater, helpers de assinatura de código) com amplo suporte da comunidade.
- +Recursos web nativos como devtools, hot reload e velocidade de iteração fluida em CSS/HTML não têm igual.
Quando escolher Perry
Escolha o Perry se você quer binários nativos pequenos, baixo uso de memória, aparência e comportamento nativos por plataforma, ou um único código TypeScript que entrega para mobile/relógio/TV além de desktop.
Quando escolher Electron
Escolha o Electron se você tem uma UI web existente e quer entregá-la como aplicação desktop com mínima reescrita, se você precisa de máxima consistência de UI entre plataformas no desktop, ou se você depende de uma ampla gama de bibliotecas JS puras em runtime.
Veredito
Electron e Perry estão em extremos opostos do espectro multiplataforma. Electron troca tamanho de binário e memória pelo reaproveitamento de tecnologias web; Perry troca a stack web por binários nativos e UI nativa. Se você viu o instalador da sua aplicação Electron passar dos 150 MB ou sua RAM em ociosidade passar de meio gigabyte, o Perry é a resposta para esse problema específico — ao custo de um modelo de UI diferente, em estilo nativo.