Releases: PerryTS/perry
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
v0.2.179
What's New
- App icon enforcement:
perry publishnow blocks (hard error) iOS and macOS App Store submissions when no app icon is configured, instead of just warning - Interactive icon prompt: When no icon is configured,
perry publishprompts for a path to a 1024×1024 PNG, copies it toassets/icon.png, and updatesperry.tomlautomatically - Project-level icon config: Icon configuration moved from
[app.icons]to[project]section inperry.toml(falls back to[app]for backwards compat) - Beta consent check and error reporting for publish command
v0.2.173
What's New
perry publishauto-export .p12: auto-detect signing identity from macOS Keychain, export to temp .p12 with generated password- Automated package distribution: new releases now automatically update Homebrew tap and APT repository
- Linux ARM fix: CStr portability for aarch64-linux (c_char = u8)
Install
# macOS (Homebrew)
brew install perryts/perry/perry
# Debian/Ubuntu
curl -fsSL https://perryts.github.io/perry-apt/perry.gpg.pub | sudo gpg --dearmor -o /usr/share/keyrings/perry.gpg
echo "deb [signed-by=/usr/share/keyrings/perry.gpg] https://perryts.github.io/perry-apt stable main" | sudo tee /etc/apt/sources.list.d/perry.list
sudo apt update && sudo apt install perry
# Quick install
curl -fsSL https://raw.githubusercontent.com/PerryTS/perry/main/packaging/install.sh | shv0.2.97
What's New
- Add
AsyncLocalStoragefromasync_hooks/node:async_hooksnew AsyncLocalStorage(),run(),getStore(),enterWith(),exit(),disable()- Handle-based implementation using perry-stdlib common handle registry
- Fixed
is_native_module()to stripnode:prefix for Node.js built-in imports
Bug Fixes
- Fix Cranelift I32 type mismatch panics in variable assignments and logical ops (v0.2.96)
- Fix closure capture missing variable references in Delete, Error, Uint8Array, EnvGetDynamic, JS runtime expressions (v0.2.95)
- Fix function inlining breaking Set/Map/Array operations (v0.2.94)