Roadmap
Où en est Perry aujourd'hui et où il va. De la compilation native à un écosystème complet de développement multiplateforme.
Native TS → executable compilation
SWC parsing + LLVM code generation for AOT compilation of TypeScript to native machine code.
10-target compilation: 8 native platforms + WASM + Web
AppKit, UIKit, Android Views (JNI), GTK4, Win32, SwiftUI (watchOS/tvOS), WebAssembly, and JavaScript — 25+ widgets, Canvas, Table, system APIs across all targets.
React compatibility layer (perry-react)
Optional bridge: write React/JSX and it compiles to perry/ui widgets underneath. Phase 1 shipped.
Prisma-compatible ORMs (MySQL, PostgreSQL, SQLite)
Drop-in @prisma/client replacements backed by Rust FFI + sqlx. Full CRUD, transactions, raw SQL — zero runtime overhead.
Universal push notifications (perry-push)
APNs, FCM, Web Push, and WNS from a single library with Rust FFI. ES256/RS256 JWT, OAuth 2.0, VAPID.
Perry Hub + distributed build workers
Cloud build orchestration server with macOS and Linux workers. Code signing, notarization, App Store and Play Store publishing.
Pry: native JSON viewer on 5 platforms
Flagship app shipping on Mac App Store and Google Play. Same TypeScript codebase, five native binaries.
30+ native npm package implementations
mysql2, pg, mongodb, axios, bcrypt, express, ws, jsonwebtoken, uuid, chalk, and more — compiled natively.
Async/await, Promises, generators, closures, generics
Full support for modern TypeScript features including generics with monomorphization.
Classes with inheritance, private fields, static members
Complete class support including extends, private fields (#field), and static methods/properties.
Optional V8 runtime for JS npm compatibility
Embed V8 to run uncompiled JavaScript npm packages when native implementations aren't available.
Cross-compilation (macOS → Linux, macOS → iOS, Linux → Windows)
Build for other platforms from your development machine without needing the target OS. Linux → Windows via lld-link and xwin-style sysroot.
Documentation site (docs.perryts.com)
49-page mdBook documentation covering language features, native UI, stdlib, CLI reference, all 6 platforms, and plugins.
Homebrew + APT distribution
Install Perry via brew install PerryTS/perry/perry on macOS or apt-get on Debian/Ubuntu. Automated release pipeline via GitHub Actions.
Automated App Store & Play Store publishing
perry publish ios / macos / android: automated certificate generation, code signing, provisioning profiles, and store submission with no manual portal visits.
perry/widget — Native WidgetKit from TypeScript
Compile TypeScript widget definitions to native SwiftUI WidgetKit extensions. HIR-level render tree emitted as SwiftUI source code.
iPad native support
Full iPad support with UIDeviceFamily [1,2], orientation, LaunchScreen storyboard, and device idiom detection.
http/https native modules
Client-side HTTP via reqwest: request(), get(), ClientRequest, IncomingMessage — matching the Node.js http API.
better-sqlite3 support
Full better-sqlite3 API: new Database(), prepare, exec, run, get, all — with NaN-boxing and named column access.
WASM compilation target
Compile TypeScript to WebAssembly bytecode. Self-contained HTML output, full perry/ui support via DOM bridge, NaN-boxing, async/await, class system.
Web/JavaScript compilation target
Compile TypeScript to optimized JavaScript with Rust-native minification and name obfuscation. Pure JS output for browser deployment.
Geisterhand: cross-platform UI testing
In-process testing framework with embedded HTTP server. Programmatic widget interaction, screenshot capture, and chaos/fuzz testing on all 5 native platforms.
perry run — one-step compile and launch
Auto-detects entry file, target platform, and connected devices. Interactive prompts for multiple targets, live console streaming, remote build fallback.
Enhanced type inference
Infers types from literals, binary ops, variable propagation, and method returns. Optional tsgo IPC integration for full type checking.
Compile native npm packages
perry.compilePackages config: compile pure TS/JS npm packages natively instead of V8. Deduplication across nested node_modules.
Design system bridge (perry-styling)
Token codegen CLI, typed PerryTheme objects, flat-primitive styling helpers, compile-time platform constants via __platform__.
Telemetry & auto-update
Opt-in anonymous usage statistics, background version check on every CLI invocation with 24h cache, perry update command.
CLI: platform as positional argument
perry run ios, perry publish macos — platform is now a positional argument instead of boolean flags, making commands more intuitive.
Runtime performance optimizations
memcmp-based string comparison, interned typeof results, inline .length access, direct field access on known types, and reduced NaN-boxing for strings, closures, and private fields.
Cross-compile to Windows from Linux
Build Windows executables from Linux using lld-link and PERRY_WINDOWS_SYSROOT. Runtime target detection replaces compile-time #[cfg] checks for true cross-compilation.
iOS game loop support
UIApplicationMain on main thread, user code on background thread via --features ios-game-loop. Enables blocking game loop patterns (while !shouldClose) on iOS where UIKit must own the main thread.
Crash reporting (crash.log)
Panic hooks and signal handlers (SIGSEGV/SIGBUS/SIGABRT) write crash details to ~/.hone/crash.log for Chirp telemetry. Caught panics clear the log.
Two-stage Hub build pipeline
Linux workers cross-compile Windows artifacts, Hub re-queues for Windows workers to sign and package. Azure VM auto-startup for Windows sign workers.
Cross-platform menu APIs
menuClear and menuAddStandardAction extended from macOS-only to all 6 native platforms.
Comprehensive perry.toml and Geisterhand documentation
Complete perry.toml reference with bundle ID resolution, build number auto-increment, and CI/CD examples. Full Geisterhand rewrite with API docs and test automation patterns.
True multi-threading (v0.4.0)
Real OS threads via perry/thread: parallelMap, parallelFilter, and spawn. Compile-time mutable capture rejection for thread safety. Thread-local arenas, SerializedValue deep-copy, parallel compiler pipeline.
Compile-time i18n system (v0.3.0)
Zero-ceremony internationalization: auto-extract string literals, CLDR plural rules for 30+ locales, compile-time validation, translations baked into binary. perry i18n extract CLI, format wrappers, native locale detection.
watchOS native app support (v0.3.2)
Full watchOS compilation target with data-driven SwiftUI renderer, 15 supported widgets, perry run watchos with simulator auto-detection, and perry setup watchos wizard.
perry/widget — 4-platform widget support
Expanded from iOS-only to iOS, Android (Glance), watchOS, and Wear OS (Tiles). Four new compile targets for widget extensions.
Audio & camera capture APIs
perry/system audio capture (AVAudioEngine, AudioRecord, PulseAudio, WASAPI, Web Audio) and perry/ui camera capture (AVCaptureSession) with A-weighted dB measurement and color sampling.
perry run android — full APK pipeline
One-step compile, package, assembleDebug, install, and launch for Android apps with Gradle integration.
Push notifications & StoreKit packages
perry/push (APNs permission, token retrieval, badge count) and perry/storekit (StoreKit 2 purchases, subscriptions, receipt validation) as first-party native packages.
Parallel compiler pipeline
Module codegen, transform passes, and symbol scanning parallelized via rayon across all CPU cores.
tvOS (Apple TV) target (v0.4.5)
10th compilation target. Full tvOS support with SwiftUI renderer, same codebase as iOS/watchOS apps.
Cross-compile iOS/macOS from Linux (v0.4.23–v0.4.24)
Build iOS and macOS binaries from Linux using ld64.lld. Framework linking, -lobjc, CoreGraphics/Metal/IOKit, and Mach-O codegen triple.
perry login + usage-based billing (v0.4.14)
GitHub OAuth login flow, API tokens, free tier (15 builds/month), Pro tier via Polar.sh. Dashboard at app.perryts.com with usage tracking.
Hub parallel builds
Slot-based dispatch with concurrent workers. Workers report max_concurrent capacity, artifacts served as base64 downloads.
Windows UI overhaul (v0.4.8–v0.4.13)
DPI-aware scaling, GDI gradient fills, PNG/JPEG image loading, launcher-style window APIs, global hotkeys, app icons, reentrancy-safe layout.
macOS notarization + GCloud KMS signing
--notarize flag for perry publish macos with Developer ID certificate. GCloud KMS code signing for Windows builds.
perry/appstorereview package
Native app store review prompts: SKStoreReviewController (iOS) and Play In-App Review API (Android).
Performance: native fcmp, string append, short-circuit (v0.4.14)
Native floating-point comparison (mandelbrot 30% faster), in-place string append (125x faster), short-circuit AND/OR, negative literal folding at HIR level.
iOS App Store readiness (v0.4.24)
Full Info.plist with all Apple-required keys, CFBundleIcons, version/build from perry.toml, UILaunchScreen, provisioning profiles for TestFlight.
LLVM backend migration (v0.5.0–v0.5.12)
Cranelift replaced by LLVM as the sole codegen backend — loop vectorization, GVN, aggressive inlining. After the migration settled, Perry beat Node.js on every benchmark in its suite (1.7x–24.6x, two ties).
Generational GC, small-string optimization, lazy JSON (v0.5.306)
Generational garbage collector and SSO ship as defaults. Lazy JSON tape lands at 75 ms median on validate-and-roundtrip — best in the dynamic-typing pack.
npm, winget, and Scoop distribution
npm install @perryts/perry on all seven binary platforms, winget install PerryTS.Perry, and Scoop — alongside the existing Homebrew and APT channels.
perry dev, live inspector, perry/updater (v0.5.359)
Watch-mode auto-recompile on an in-memory AST cache, live inspector at localhost:7676, and a desktop auto-update package.
Real npm packages compile natively (v0.5.1146)
axios, zod v4, express, fastify, and hono compile and run through perry.compilePackages — with the V8 fallback covering the long tail.
Direct JavaScript compilation (.js / .cjs / .mjs / .jsx)
Plain JavaScript feeds the same native AOT pipeline as TypeScript — require() / module.exports are rewritten to ESM automatically. No type annotations required.
node:stream + node:stream/web
Readable, Writable, Transform, Duplex, and the WHATWG web streams — real implementations, not stubs.
~97% parity against Node's own test suite
2792/2863 cases across 53 node:* modules (Node v26.3.0): fs, http/https/http2, net/tls, dns/dgram, crypto, child_process, cluster, worker_threads, zlib, async_hooks/AsyncLocalStorage, WebCrypto, and more.
95%+ on the c262 conformance suite
Perry's test262-derived ECMAScript conformance suite passes at 95%+. The remaining gap is a known tail: lookbehind regex, console formatting edge cases, lone surrogate handling.
DatePicker + drag & drop on all platforms (v0.5.1146)
Cross-platform DatePicker widget and drag & drop across AppKit, UIKit, GTK4, Win32, and Android.
Windows Fluent design + windows-winui target
Mica materials and Fluent styling for Windows apps, plus a new windows-winui render backend target.
Game-engine embedding (BloomView)
Live Bloom Engine rendering inside perry/ui on every backend — native surface handles on macOS, iOS, tvOS, GTK4, Android, and Windows.
Hub public beta — live
Distributed builds are open to everyone: perry login (GitHub OAuth), free tier with 15 publishes/month, Pro plan, dashboard at app.perryts.com. Push TypeScript, get signed binaries and store submissions.
Next.js standalone server, compiled natively
Wall-by-wall bring-up of the real Next.js 16 app-router standalone build — dozens of codegen and runtime walls already down, with the render pipeline advancing deeper every release.
Server frameworks out of the box
Express, Fastify, and Hono compile and serve today — Fastify HTTP throughput is now part of the benchmark suite. NestJS bring-up is underway.
Closing the conformance tail
From 95%+ on c262 and ~97% on Node's own tests toward the last few exceptions: lookbehind regex, console.dir/group formatting, lone surrogate handling, and the long tail of edge-case options.
perry/ui expansion
Accessibility labels, custom context menus, and more layout primitives across all platforms — plus new surfaces like WebView and perry/ads.
Further performance optimization
Perry already wins most benchmarks against Node.js and Bun. Ongoing work on JSON, GC block reclaim, typed-array fast paths, and inlining boundaries.
Compile 98% of all Node.js programs
The next big milestone: real-world Node.js software compiles and runs with no code changes — desktop and CLI apps (opencode, Claude Code, and friends) as well as server-side stacks (Next.js, NestJS, and beyond).
Source maps & debug info
DWARF debug info and source maps for native debugging with lldb/gdb and IDE integration.
One TypeScript codebase → every platform and the web
Write once, compile to native GUI and CLI apps on macOS, iPadOS, iOS, Android, Linux, Windows, WebAssembly, and the Web.
Full perry/ui framework with layout engine
Advanced layout system, animations, gestures, and accessibility — the most complete native UI toolkit for TypeScript.
Hot reload for native UI development
Instant preview of UI changes during development without recompiling the entire binary.