Highlights
- Tier-2 iOS simulator CI gate —
release-packages.ymlnow waits on bothTestsandSimulator Tests (iOS)green on the exact tag-commit SHA before publishing to brew / apt / npm. Newawait-testsjob pollsgh run list --commit <sha>every 30s with a 45-min deadline. Test workflow trigger extended totags: ['v*']so the Tests run actually exists on the tag.workflow_dispatchemergency-republish bypass preserved. - Doc-examples test harness + cross-compile matrix — Every
docs/examples/snippet now compiles under CI against macOS / Linux / Windows (blocking) and iOS / tvOS / watchOS / Android / WASM / Web (advisory until baselines blessed, now blocking on macOS+Linux). Simulator runs usePERRY_UI_TEST_MODE=1+ self-exit timer for bundle-launches smoke signal. - watchOS end-to-end —
--target watchos[-simulator]compiles and bundles; adds--features watchos-game-loop(Metal surface) and--features watchos-swift-app(SwiftUI host) plusperry.nativeLibrary.targets.<plat>.metal_sourcesfor.metallibbundling (closes #124). perry devwatch mode — New subcommand auto-recompiles on save (v0.5.143).- perry/ui gap closure —
alertWithButtons, string values inpreferencesGet/Set,onTerminate/onActivatelifecycle hooks, and LazyVStack backed byNSTableViewvirtualization (v0.5.151).
Features
feat: gate release-packages on Tests + Simulator Tests(v0.5.155)feat: close all 4 remaining perry/ui gaps(v0.5.151)feat: metal_sources manifest field for .metallib bundling(v0.5.146, closes #124)feat: compile-only banner + Fastify #125 regression check(v0.5.144)feat: perry dev — watch-mode subcommand for auto-recompile on save(v0.5.143, #126)feat: big doc-tests push — blessings + UI docs + xcompile + Android + PNG compress(v0.5.140)feat: tier-2 follow-ups — watchOS test mode + iOS-sim fix + simctl CI(v0.5.137)feat: wire PERRY_UI_TEST_MODE into perry-ui-ios + perry-ui-tvos(v0.5.135)feat: split xcompile into blocking (wasm+web) + advisory(v0.5.133)feat: bless gallery baselines + flip macOS+Linux blocking(v0.5.131)feat: doc-tests cross-compile matrix (iOS/tvOS/Android/WASM/Web)(v0.5.125)feat: doc-examples test harness + widget gallery(v0.5.123)feat: add --features watchos-swift-app for SwiftUI-hosted rendering(v0.5.122, #118)feat: add --features watchos-game-loop for Metal-surface apps(v0.5.114, #106)
Fixes
fix: drop run_with_timeout from simctl launch path(v0.5.154)fix: drop --console-pty from simctl-tests(v0.5.152)fix: honor --app-bundle-id on ios-simulator/ios full-app(v0.5.150)fix: ios-simulator Info.plist platform keys(v0.5.149)fix: simctl env vars via SIMCTL_CHILD_ prefix(v0.5.148)fix: simctl --setenv arg syntax(v0.5.147)fix: simctl-tests — detect timeout/gtimeout + fallback(v0.5.145)fix: async arrow/closure returns — wrap in js_promise_resolved(v0.5.142, closes #125)fix: cross-platform fs/roundtrip path(v0.5.142)fix: Ubuntu gtk4 border symbols + Windows png encoder borrow(v0.5.141)fix: PowerShell arg-splitting, round two — repeat xcompile flag(v0.5.139)fix: PowerShell arg-splitting on Windows xcompile step(v0.5.138)fix: three follow-ups from v0.5.135 CI run(v0.5.136)fix: Windows Picker parent HWND for WS_CHILD(v0.5.132)fix: force async-runtime feature when UI backend is linked(v0.5.130)fix: diagnose why --whole-archive didn't surface on Ubuntu(v0.5.129)fix: use --whole-archive for stdlib on Linux UI links(v0.5.128)fix: Linux link order + Windows MSVC env(v0.5.127)fix: merge stdout + stderr in doc-tests compile-fail detail(v0.5.126)fix: watchos bundle step copies project assets into the .app(#123)fix: platform-split HEAP_MIN for android/linux(v0.5.125)fix: doc-tests CI follow-ups after first run of v0.5.123(v0.5.124)fix: reject silent perry/ui API misuse at compile time(v0.5.119, #114)fix: drop libc: ["glibc"] from glibc Linux npm manifests(v0.5.118, #116)fix: wire URL/URLSearchParams through LLVM backend(v0.5.117, #111)fix: animateOpacity/animatePosition signature, units, and reactivity(v0.5.116, #109)fix: console.log on Windows by gating MSVC subsystem on needs_ui(v0.5.114, #108)fix: find_native_library target_key honors watchos(v0.5.115, #107)fix: make --target watchos[-simulator] compile end-to-end(v0.5.113, #105)fix: perry-ui-ios StringHeader.length migrated to byte_lenfix: ios-game-loop entry point for iOS/tvOS targets
Infrastructure / Docs
docs(skill): rewrite /release to tag HEAD, not commit uncommitted workchore: simctl-tests per-phase trace + explicit timeouts(v0.5.153)docs: correct stale version strings + TabBar platform caveatdocs: port-npm-to-perry skill + porting guide(experimental, re #115)docs: add CONTRIBUTING, CoC, and issue/PR templatesdocs: carve out "no version bumps in external PRs" ruledocs: add perry dev to CLI commands referencedocs: rewrite ui/widgets.md against the real API(v0.5.134)docs: document @perryts/perry npm install path in README + mdBook