Perry frente a Electron
Electron permite construir apps de escritorio multiplataforma usando tecnologías web (HTML/CSS/JS) empaquetando Chromium y Node.js con tu app. Perry compila TypeScript directamente a código máquina nativo y renderiza la UI a través de widgets reales de cada plataforma — AppKit, UIKit, GTK4, Win32, JNI. La propuesta de Electron es reutilizar tecnologías web; la de Perry es binarios nativos pequeños con UI nativa desde TypeScript.
¿Qué es Electron?
Electron es un framework de código abierto para construir aplicaciones de escritorio multiplataforma usando Chromium para renderizar y Node.js para acceso al sistema. Cada app de Electron se distribuye con su propia copia de Chromium y Node, motivo por el que los instaladores de apps Electron suelen pesar 80–150 MB incluso para un hello world. Electron ha potenciado apps ampliamente usadas como VS Code, Slack, Discord y el cliente de escritorio de Figma. Apunta a Linux, macOS y Windows en escritorio; no hay una historia oficial para móvil, watch o TV.
¿Qué es Perry?
Perry compila TypeScript directamente a código máquina nativo sin motor de navegador, sin Chromium y sin runtime de Node. La capa de UI (perry/ui) es un sistema declarativo al estilo SwiftUI que mapea a widgets nativos vía AppKit en macOS, UIKit en iOS/iPadOS/tvOS, GTK4 en Linux, Win32 en Windows y JNI en Android. Los binarios hello world son de ~330 KB; las apps completas con stdlib (Fastify, mysql2, etc.) rondan los 48 MB.
Lado a lado
| Característica | Perry | Electron |
|---|---|---|
| Renderizado | Widgets nativos de la plataforma (AppKit, UIKit, GTK4, Win32, JNI) | Chromium empaquetado (HTML/CSS/JS) |
| Motores empaquetados | Ninguno (V8 opcional solo con --enable-js-runtime) | Chromium + Node.js |
| Tamaño del instalador hello world | ~330 KB | ~80–150 MB |
| Instalador de app completa (stdlib + frameworks) | ~48 MB | 100–200+ MB típico |
| Uso de RAM | Nativo (típico: decenas de MB) | Múltiples procesos de Chromium (típico: cientos de MB) |
| Móvil / watch / TV | Sí — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | No (solo escritorio) |
| Lenguaje de UI | TypeScript con API declarativa al estilo SwiftUI | HTML/CSS/JS (stack web) |
| Auto-actualización / empaquetado | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (ecosistema maduro) |
| Madurez | Pre-1.0 | Estable, más de una década en producción |
Dónde gana Perry
- +Tamaño de binario. Un hello world de Perry es ~330 KB; uno de Electron suele pesar 80–150 MB porque cada app distribuye su propio Chromium.
- +Huella de memoria. Las apps Perry corren como un único proceso nativo; las apps Electron corren múltiples procesos de Chromium (renderer, GPU, utility, etc.) y consumen cientos de MB de RAM en reposo.
- +Look and feel nativo. Perry renderiza a través de widgets reales de la plataforma, así que las apps heredan automáticamente las convenciones del sistema operativo (focus rings, accesibilidad, IME, física del scroll).
- +Móvil, watch, TV. Un solo código Perry compila a iOS/iPadOS/Android/watchOS/tvOS/Wear OS. Electron es solo escritorio.
- +Arranque en frío. Los binarios nativos no pagan el coste de arranque de Chromium ni de Node.
- +Rendimiento real de CPU en código ajustado. Perry lidera en microbenchmarks de cómputo frente a Node (que es lo que Electron usa) por múltiplos en la mayoría de los kernels (consulta perry/benchmarks).
Dónde gana Electron
- +Madurez. Electron lleva más de una década en producción y potencia VS Code, Slack, Discord y muchas otras apps con tooling probado en batalla.
- +Reutilización del stack web. Si tu equipo ya construye UIs web, Electron te permite distribuirlas como app de escritorio sin reescritura.
- +La consistencia de UI entre plataformas es fácil — Chromium renderiza igual en cada SO, que es exactamente lo que algunos productos quieren.
- +Vasto ecosistema de librerías npm que funciona en runtime; Perry ejecuta un subconjunto a nativo y el V8 opcional cubre el resto.
- +Tooling de empaquetado maduro (electron-builder, electron-updater, ayudantes de firma de código) con amplio soporte de la comunidad.
- +Funcionalidades nativas de la web como devtools, hot reload y la velocidad de iteración fluida en CSS/HTML son inigualables.
Cuándo elegir Perry
Elige Perry si quieres binarios nativos pequeños, bajo uso de memoria, look and feel nativo en cada plataforma, o un único código TypeScript que llegue a móvil/watch/TV además de a escritorio.
Cuándo elegir Electron
Elige Electron si tienes una UI web existente y quieres distribuirla como app de escritorio con mínima reescritura, si necesitas la máxima consistencia de UI multiplataforma en escritorio, o si dependes de un amplio rango de librerías JS puras en runtime.
Veredicto
Electron y Perry se sitúan en extremos opuestos del espectro multiplataforma. Electron cambia tamaño de binario y memoria por reutilización de tecnologías web; Perry cambia el stack web por binarios nativos y UI nativa. Si has visto cómo el instalador de tu app Electron supera los 150 MB o su RAM en reposo el medio gigabyte, Perry es la respuesta a ese problema concreto — al coste de un modelo de UI distinto, de estilo nativo.