Blog
Neuigkeiten, Tutorials und tiefe Einblicke in das Erstellen nativer Apps mit Perry.
Einen GC für einen nativen TypeScript-Compiler bauen: Entscheidungen, Überraschungen und der aktuelle Stand
Perry kompiliert TypeScript mit LLVM zu nativem Code — und braucht deshalb einen echten Garbage Collector. Unsere Entscheidungen, Fehler, die keine Spuren hinterließen, CI-Gates, die gar nicht fehlschlagen konnten, und der aktuelle Zahlenvergleich mit Node und einem AOT-Konkurrenten mit Referenzzählung.
Compiling Claude Code: One Minified Bundle, 160 Compiler Fixes
We pointed Perry at the 13 MB minified cli.js that npm ships for Claude Code and tried to turn it into a native binary. A month later it launches, logs in, streams a real API response, and paints what you type — and 160 pull requests had landed in Perry, from a no-op MessageChannel to a missing GC write barrier on RegExp headers.
Shipping a Watch-Only App to the App Store (When Nothing Else Will)
Every documented way to upload a standalone watchOS app to the App Store fails — altool, iTMSTransporter, xcodebuild, even Xcode 26's Organizer all refuse the watchOS platform. Here's the undocumented workaround that works and keeps arm64_32 for older watches: an ITSWatchOnlyContainer iOS stub, uploaded with iTMSTransporter.
Echte npm-Pakete kompilieren jetzt: axios, zod, express — und ein Conformance-Sweep
Bei den ~270 Releases von v0.5.875 bis v0.5.1146 ging es nicht um ein Benchmark — es ging darum, echte npm-Pakete zum Kompilieren und Laufen zu bringen. axios, zod v4, express, fastify und hono funktionieren jetzt; die test262-Parität sprang (String 60→79 %, Array 61→72 %); Windows wurde mit Mica Fluent; und DatePicker + Drag & Drop landeten auf jeder Plattform.
Was aya_kotos Benchmark uns über Perrys GC gelehrt hat
Ein Leser hat Perry auf AtCoder ABC451D gebenchmarkt und 3,85× langsamer als Bun gemessen. Eine stille Regression hatte die Lücke zwischenzeitlich auf 6,59× vergrößert. Der Fix lag nicht dort, wo wir ihn erwartet hatten, der bewusste GC-Trade-off, den er offenlegte, war real, und Perry v0.5.875 zieht jetzt im gleichen Bench mit Bun gleich: 425 ms vs 431 ms.
Auto-Update, ein Live-Inspector und der Compiler, der sich selbst halbiert hat
Perry v0.5.306 → v0.5.359 in vier Tagen — 53 Patch-Releases, ~30 Issues geschlossen, und drei große Sachen landeten: perry/updater für Desktop-Auto-Update, ein Live-Inspector unter localhost:7676 und ein Compiler-Refactoring, das die vier größten Dateien um 33–91 % schrumpfen ließ.
Generationen-GC, Lazy JSON und Benchmarks, die Prüfung aushalten
Perry v0.5.174 → v0.5.306 in drei Tagen, plus die GC- und JSON-Arbeit, die parallel gelandet ist. Der Generationen-GC läuft als Default. Die Small String Optimization läuft als Default. Die JSON-Pipeline bekommt ein Lazy-Tape, das bei Validate-and-Roundtrip 75 ms Median liefert — Spitze im Pack der dynamisch typisierten Runtimes. Die Benchmarks-Seite ist neu geschrieben mit RUNS=11 Median + p95 + σ, simdjson und AssemblyScript+json-as als Peers ergänzt, und jede Schwäche, die Perry hat, ehrlich aufgezeigt.
npm-Distribution, perry dev und jeden Benchmark gewinnen
Perry v0.5.80 → v0.5.174 in sechs Tagen. @perryts/perry erscheint auf npm für alle sieben unterstützten Plattformen. perry dev bringt Watch-Mode-Auto-Recompile obendrauf auf einen In-Memory-AST-Cache und einen On-Disk-Pro-Modul-Object-Cache. json_roundtrip schließt seine letzte Lücke — Perry gewinnt jetzt jeden Benchmark gegen Node.js und Bun.
Alles optimieren: Eine Woche, 68 Releases und ein 547x JSON-Speedup
Perry v0.5.13 → v0.5.80 in sieben Tagen. JSON.parse schließt eine 547x-Lücke zu Node. mimalloc wird zum globalen Allocator. Inline-Caches, Shape-Transitions, typisierte Buffer-Slots, i32-native Bitwise-Ops, Scalar Replacement und eine native Event-Loop, die Fastify- und WebSocket-Server am Leben hält.
Von Cranelift zu LLVM: Wie Perry 24x schneller wurde
Perrys Backend-Migration von Cranelift zu LLVM ist abgeschlossen. Die anfängliche Umstellung machte Benchmarks 70x langsamer — dann brachten sechs gezielte Optimierungen Perry auf 14/15 Siege gegen Node.js, mit bis zu 24,6-facher Beschleunigung.
tvOS, Cross-Compile für iOS von Linux und Perry Login
Perry v0.4.24: tvOS als 10. Kompilierungsziel, Cross-Compile für iOS und macOS von Linux via ld64.lld, perry login mit nutzungsbasierter Abrechnung, Windows-UI-Überarbeitung, macOS-Notarisierung und 120 Commits in 5 Tagen.
Echtes Multi-Threading, Compile-Time-i18n und watchOS
Perry v0.4.0: echte OS-Threads mit Compile-Time-Sicherheit, ein zeremonienloses Internationalisierungssystem für über 30 Sprachen, watchOS als 9. Kompilierungsziel, Audio- und Kamera-APIs sowie eine parallele Compiler-Pipeline.
Cross-Compile für Windows, iOS-Game-Loops und 100 % Test-Parität
103 Commits in einer Woche: Cross-Compile für Windows von Linux via lld-link, iOS-Game-Loop-Support, Crash-Reporting, eine zweistufige Hub-Build-Pipeline und der sich selbst hostende Compiler erreicht 68/68 deterministische Test-Parität.
Die komplette Pipeline: Dokumentation, Distribution und WidgetKit
82 Commits in einer Woche: eine 49-seitige Dokumentationsseite, automatisierte App-Store- und Play-Store-Veröffentlichung, Homebrew- und APT-Pakete, native WidgetKit-Erweiterungen aus TypeScript, neue Widgets, http/https-Module und ein sich selbst hostender LLVM-Compiler.
Vom Compiler zum Ökosystem: React, Datenbanken und Cloud-Builds
Perry wächst vom Compiler zum vollständigen Ökosystem. perry/ui im Kern, Prisma-kompatible ORMs für MySQL/PostgreSQL/SQLite, universelle Push-Benachrichtigungen, verteilte Builds mit App-Store-Veröffentlichung und eine React-Kompatibilitätsschicht — alles in einer Woche.
Alle sechs Plattformen, vollständige Feature-Parität
Über 20 native UI-Widgets, ein Canvas-Widget, Table-Views, Systembenachrichtigungen, Keychain-Zugriff, Multi-Window-Support und vollständige Feature-Parität auf macOS, iOS, iPadOS, Android, Linux und Windows — alles aus einer einzigen TypeScript-Codebasis.
Plugin-Systeme sind eine Performance-Steuer
Plugin-Architekturen tauschen Performance gegen Erweiterbarkeit. Doch was, wenn Erweiterbarkeit zur Build-Zeit statt zur Laufzeit stattfände? Compile-Time-Komposition bietet beides — null Overhead, volle Flexibilität.
Hono, tRPC und Strapi zu nativen Binaries kompilieren
Perry kompiliert jetzt drei große TypeScript-Frameworks — Hono, tRPC und Strapi — zu nativen ARM64-Binaries. Sie kompilieren in unter einer Sekunde, erzeugen Binaries unter 2 MB und laufen ohne Abstürze.
Pry entwickeln: Ein nativer JSON-Viewer in TypeScript
A walkthrough of building Pry, a native JSON viewer compiled from TypeScript to machine code with the Perry runtime and GC linked in and no webview.
Plattformübergreifende native UI aus TypeScript
How Perry maps one TypeScript codebase to platform widgets across its documented targets, including the platform-specific limitations and prerequisites.
Perry im Überblick
Perry compiles supported TypeScript to standalone native executables with its runtime and GC linked in, without requiring an external Node.js installation or JavaScript engine.