v0.2.183
What's New
perry run command
Compile and launch in one step — auto-detects entry file (perry.toml, src/main.ts, main.ts), platform-aware device detection (iOS simulators via simctl, devices via devicectl, Android via adb), interactive prompts when multiple targets found, forwards program args via --.
Remote build fallback
perry run --ios auto-detects missing cross-compilation toolchain and falls back to Perry Hub build server — packages project, uploads, streams build progress via WebSocket, downloads .ipa, extracts .app, installs and launches on device/simulator. Use --local/--remote flags to force either path.
WebAssembly target (--target wasm)
New perry-codegen-wasm crate compiles HIR directly to WASM bytecode using wasm-encoder. NaN-boxing scheme matches native perry-runtime (f64 values with STRING_TAG/POINTER_TAG). JS runtime bridge for strings, console, Math, and type operations. Outputs self-contained HTML (base64-embedded WASM) or raw .wasm binary. Supports functions, control flow, string literals, numeric ops, and console.log.
Web target minification & obfuscation
--target web now auto-minifies output — Rust-native JS minifier strips comments and collapses whitespace; emitter-level name mangling obfuscates local variables, parameters, and non-exported functions. Web runtime compressed from 3,337 lines to ~177. Also available via --minify CLI flag.
iOS improvements
- Keyboard avoidance: auto-adjusts root view when keyboard appears, scrolls focused TextField into view
- Live console output:
perry run --iosnow adds--consolefor live stdout/stderr streaming - App icon embedding from
perry.tomlconfiguration - Resource bundling:
logo/andassets/directories are now included in.appbundles - Auto-create development provisioning profiles via App Store Connect API
- Improved code signing: proper identity matching by team ID, development profile detection, entitlements
Bug fixes
- Fix
RefCell already borrowedpanic in state callbacks (GH-4):state_set()now snapshots callbacks before invoking - Fix fetch linker error without stdlib imports (GH-5):
fetch()as global built-in now properly links perry-stdlib - Fix
perry runhanging after remote build: WebSocket loop now breaks on ArtifactReady - Fix
perry runusing wrong bundle ID: reads fromperry.toml [ios].bundle_id - Fix iOS gradient rendering, image loading, and linker issues
- Fix telemetry events not arriving: flush before exit + remove TTY gate
- Multiple iOS code signing and provisioning profile fixes
Full Changelog: https://github.com/aspect-build/perry/compare/v0.2.179...v0.2.183