Perry vs Electron
Electron erlaubt dir, plattformübergreifende Desktop-Apps mit Web-Technologien (HTML/CSS/JS) zu bauen, indem Chromium und Node.js mit deiner App gebündelt werden. Perry kompiliert TypeScript direkt zu nativem Maschinencode und rendert UI über echte Plattform-Widgets — AppKit, UIKit, GTK4, Win32, JNI. Electrons Versprechen ist Web-Tech-Wiederverwendung; Perrys Versprechen sind kleine native Binaries mit nativer UI aus TypeScript.
Was ist Electron?
Electron ist ein Open-Source-Framework zum Erstellen plattformübergreifender Desktop-Anwendungen, das Chromium für das Rendering und Node.js für Systemzugriff nutzt. Jede Electron-App liefert ihre eigene Kopie von Chromium und Node aus, weshalb Electron-App-Installer typischerweise 80–150 MB groß sind, selbst für ein Hello World. Electron treibt weit verbreitete Apps an, darunter VS Code, Slack, Discord und Figmas Desktop-Client. Es zielt auf Linux-, macOS- und Windows-Desktops; eine First-Party-Story für Mobile, Watch oder TV gibt es nicht.
Was ist Perry?
Perry kompiliert TypeScript direkt zu nativem Maschinencode ohne Browser-Engine, ohne Chromium und ohne Node-Runtime. Die UI-Schicht (perry/ui) ist ein deklaratives System im SwiftUI-Stil, das auf native Plattform-Widgets abbildet — AppKit auf macOS, UIKit auf iOS/iPadOS/tvOS, GTK4 auf Linux, Win32 auf Windows und JNI auf Android. Hello-World-Binaries sind ~330 KB; vollständige Apps mit Stdlib (Fastify, mysql2 etc.) liegen bei rund 48 MB.
Direktvergleich
| Feature | Perry | Electron |
|---|---|---|
| Rendering | Native Plattform-Widgets (AppKit, UIKit, GTK4, Win32, JNI) | Gebündeltes Chromium (HTML/CSS/JS) |
| Gebündelte Engines | Keine (optional V8 nur mit --enable-js-runtime) | Chromium + Node.js |
| Hello-World-Installer-Größe | ~330 KB | ~80–150 MB |
| Vollständiger App-Installer (Stdlib + Frameworks) | ~48 MB | Typischerweise 100–200+ MB |
| RAM-Verbrauch | Nativ (typisch: zweistellige MB) | Mehrere Chromium-Prozesse (typisch: hunderte MB) |
| Mobile / Watch / TV | Ja — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | Nein (nur Desktop) |
| UI-Sprache | TypeScript mit deklarativer SwiftUI-Stil-API | HTML/CSS/JS (Web-Stack) |
| Auto-Update / Paketierung | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (ausgereiftes Ökosystem) |
| Reife | Pre-1.0 | Stabil, über ein Jahrzehnt im produktiven Einsatz |
Wo Perry gewinnt
- +Binary-Größe. Ein Perry-Hello-World ist ~330 KB; ein Electron-Hello-World ist typischerweise 80–150 MB groß, weil jede App ihr eigenes Chromium ausliefert.
- +Speicher-Footprint. Perry-Apps laufen als ein einzelner nativer Prozess; Electron-Apps laufen als mehrere Chromium-Prozesse (Renderer, GPU, Utility etc.) und verbrauchen im Leerlauf hunderte MB RAM.
- +Natives Look-and-Feel. Perry rendert über echte Plattform-Widgets, sodass Apps OS-Konventionen (Fokusringe, Barrierefreiheit, IME, Scroll-Physik) automatisch erben.
- +Mobile, Watch, TV. Eine Perry-Codebasis kompiliert für iOS/iPadOS/Android/watchOS/tvOS/Wear OS. Electron läuft nur auf Desktop.
- +Cold Start. Native Binaries zahlen keine Chromium- und Node-Startup-Kosten.
- +Echte CPU-Performance bei tightem Code. Perry führt in Compute-Mikrobenchmarks gegen Node (das Electron nutzt) bei den meisten Kerneln um ein Vielfaches (siehe perry/benchmarks).
Wo Electron gewinnt
- +Reife. Electron ist seit über einem Jahrzehnt im produktiven Einsatz und treibt VS Code, Slack, Discord und viele andere Apps mit erprobtem Tooling an.
- +Web-Stack-Wiederverwendung. Wenn dein Team bereits Web-UIs baut, kannst du sie mit Electron als Desktop-App ohne Rewrite ausliefern.
- +UI-Konsistenz über Plattformen hinweg ist einfach — Chromium rendert auf jedem OS gleich, was genau das ist, was manche Produkte wollen.
- +Riesiges Ökosystem an npm-Bibliotheken funktioniert zur Laufzeit; Perry führt einen Teil nativ aus, und das opt-in V8 deckt den Rest ab.
- +Ausgereiftes Paketierungs-Tooling (electron-builder, electron-updater, Code-Signing-Helfer) mit breiter Community-Unterstützung.
- +Web-native Features wie DevTools, Hot Reload und flüssige CSS/HTML-Iterationsgeschwindigkeit sind unerreicht.
Wann Perry wählen
Wähle Perry, wenn du kleine native Binaries, niedrigen Speicherverbrauch, natives Look-and-Feel pro Plattform oder eine TypeScript-Codebasis willst, die zusätzlich zu Desktop auch für Mobile/Watch/TV ausliefert.
Wann Electron wählen
Wähle Electron, wenn du eine bestehende Web-UI hast und sie als Desktop-App mit minimalem Rewrite ausliefern willst, wenn du maximale plattformübergreifende UI-Konsistenz auf Desktop brauchst, oder wenn du auf eine breite Palette reiner JS-Bibliotheken zur Laufzeit angewiesen bist.
Fazit
Electron und Perry sitzen an entgegengesetzten Enden des plattformübergreifenden Spektrums. Electron tauscht Binary-Größe und Speicher gegen Web-Tech-Wiederverwendung; Perry tauscht den Web-Stack gegen native Binaries und native UI. Wenn du gesehen hast, wie der Installer deiner Electron-App über 150 MB wuchs oder ihr Idle-RAM ein halbes Gigabyte überschritt, ist Perry die Antwort auf genau dieses Problem — auf Kosten eines anderen, nativ orientierten UI-Modells.