Blog
Notizie, tutorial e approfondimenti sulla creazione di app native con Perry.
Costruire un GC per un compilatore TypeScript nativo: decisioni, sorprese e come sta andando
Perry compila TypeScript in codice nativo con LLVM, quindi ha bisogno di un vero garbage collector. Le decisioni prese, i bug che non lasciavano tracce, i gate CI che non potevano fallire e il confronto attuale con Node e con un concorrente AOT basato sul reference counting.
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.
Veri pacchetti npm ora compilano: axios, zod, express — e una passata di conformance
Le circa 270 release da v0.5.875 a v0.5.1146 non riguardavano un singolo benchmark — riguardavano il far compilare e girare veri pacchetti npm. axios, zod v4, express, fastify e hono ora funzionano; la parità test262 è salita (String 60→79%, Array 61→72%); Windows è diventato Fluent con Mica; e DatePicker + drag & drop sono atterrati su ogni piattaforma.
Cosa il benchmark di aya_koto ci ha insegnato sul GC di Perry
Un lettore ha fatto il benchmark di Perry su AtCoder ABC451D e l'ha misurato 3,85× più lento di Bun. Una regressione silenziosa aveva nel frattempo allargato il gap a 6,59×. Il fix non era dove ce lo aspettavamo, il trade-off deliberato del GC che ha esposto era reale, e Perry v0.5.875 ora pareggia con Bun sullo stesso bench: 425 ms vs 431 ms.
Auto-Update, un Inspector Live e il Compilatore che si è Ridotto a Metà
Perry v0.5.306 → v0.5.359 in quattro giorni — 53 patch release, ~30 issue chiuse e tre cose grosse atterrate: perry/updater per l'auto-update desktop, un inspector live a localhost:7676 e un refactor del compilatore che ha ridotto i quattro file più grandi del 33–91%.
GC generazionale, JSON lazy e benchmark che reggono il controllo
Perry v0.5.174 → v0.5.306 in tre giorni, più il lavoro su GC e JSON atterrato in parallelo. Il GC generazionale diventa il default. La Small String Optimization diventa il default. La pipeline JSON ottiene una tape lazy che atterra a 75 ms di mediana su validate-and-roundtrip — la migliore del gruppo a tipizzazione dinamica. La pagina benchmark è riscritta con mediana RUNS=11 + p95 + σ, simdjson e AssemblyScript+json-as aggiunti come peer, e ogni debolezza di Perry esposta onestamente.
Distribuzione npm, perry dev e vincere ogni benchmark
Perry v0.5.80 → v0.5.174 in sei giorni. @perryts/perry viene distribuito su npm per tutte e sette le piattaforme supportate. perry dev aggiunge la ricompilazione automatica in watch-mode sopra una cache AST in memoria e una cache degli oggetti per-modulo su disco. json_roundtrip chiude la sua ultima lacuna — Perry ora vince ogni benchmark contro Node.js e Bun.
Ottimizzare tutto: una settimana, 68 release e uno speedup JSON 547x
Perry v0.5.13 → v0.5.80 in sette giorni. JSON.parse chiude un divario 547x con Node. mimalloc diventa l'allocatore globale. Inline cache, transizioni di shape, slot Buffer tipizzati, operazioni bitwise native in i32, scalar replacement e un event loop nativo che tiene vivi i server Fastify e WebSocket.
Da Cranelift a LLVM: come Perry è diventato 24x più veloce
La migrazione del backend di Perry da Cranelift a LLVM è completata. Il passaggio iniziale ha reso i benchmark 70x più lenti — poi sei ottimizzazioni mirate hanno portato Perry a 14/15 vittorie contro Node.js, con accelerazioni fino a 24,6x.
tvOS, cross-compilazione iOS da Linux e Perry Login
Perry v0.4.24: tvOS come 10° target di compilazione, cross-compilazione iOS e macOS da Linux via ld64.lld, perry login con fatturazione a consumo, rinnovamento dell'UI Windows, notarizzazione macOS e 120 commit in 5 giorni.
Vero multi-threading, i18n a tempo di compilazione e watchOS
Perry v0.4.0: veri thread OS con sicurezza a tempo di compilazione, un sistema di internazionalizzazione senza cerimonie per oltre 30 lingue, watchOS come 9° target di compilazione, API audio e fotocamera e una pipeline di compilazione parallela.
Cross-compilazione per Windows, game loop iOS e 100% di parità nei test
103 commit in una settimana: cross-compilazione per Windows da Linux via lld-link, supporto game loop iOS, crash reporting, una pipeline di build Hub a due stadi e il compilatore self-hosted raggiunge 68/68 di parità deterministica nei test.
La pipeline completa: documentazione, distribuzione e WidgetKit
82 commit in una settimana: un sito di documentazione di 49 pagine, pubblicazione automatizzata su App Store e Play Store, pacchetti Homebrew e APT, estensioni WidgetKit native da TypeScript, nuovi widget, moduli http/https e un compilatore LLVM self-hosted.
Da compilatore a ecosistema: React, database e build cloud
Perry cresce da compilatore a ecosistema completo. perry/ui al centro, ORM compatibili con Prisma per MySQL/PostgreSQL/SQLite, notifiche push universali, build distribuiti con pubblicazione su App Store e un layer di compatibilità React — tutto in una settimana.
Tutte e sei le piattaforme, parità completa delle funzionalità
Oltre 20 widget UI nativi, un widget Canvas, viste tabella, notifiche di sistema, accesso al portachiavi, supporto multi-finestra e parità completa delle funzionalità su macOS, iOS, iPadOS, Android, Linux e Windows — tutto da un unico codice TypeScript.
I sistemi di plugin sono una tassa sulle prestazioni
Le architetture a plugin sacrificano le prestazioni per l'estensibilità. Ma se l'estensibilità avvenisse a tempo di compilazione anziché a runtime? La composizione a tempo di compilazione offre entrambe — zero overhead, massima flessibilità.
Compilare Hono, tRPC e Strapi in binari nativi
Perry ora compila tre importanti framework TypeScript — Hono, tRPC e Strapi — in eseguibili ARM64 nativi. Si compilano in meno di un secondo, producono binari sotto i 2 MB e funzionano senza crash.
Costruire Pry: un visualizzatore JSON nativo 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.
UI nativa multipiattaforma da TypeScript
How Perry maps one TypeScript codebase to platform widgets across its documented targets, including the platform-specific limitations and prerequisites.
Presentazione di Perry
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.