Device run session jobs now call www exclusively through the device run session worker API, removing their GraphQL fallbacks.
EAS CLI
npx @buildinternet/releases get eas-cliNew simulator sessions now default to authenticated preview links and omit preview credentials from private output, with public sharing via simulator:start --public-link and simulator:get following the saved preference. Adds expo-device-hub startup for Android simulator sessions with --require-token, separate session logs for agent-device, Appium, and Argent previews, and a cold-start speedup for iOS Appium sessions.
eas workflow:insights:maestro gains a --platform flag that lists Maestro runs and flows per platform. Also allows more time for iOS screen recordings to finalize during session shutdown.
Node.js 20 is deprecated with a warning at runtime, and a future release will require Node.js 22 or newer. Added the eas/run_agent build step that runs Claude Code or Codex connected to the Expo MCP server, plus MCP sandbox file reads and artifact uploads.
Fixed eas simulator create leaving a server-created simulator session running when Ctrl+C lands during creation.
Adds the eas/upload_embedded_bundle step for custom build configs, which uploads the embedded bundle from custom builds that use eas/build. The eas update:view --json output now includes assetMapUrl and sourceMapUrl as signed download URLs or null, plus fixes for iOS network capture, macOS simulator previews, and workflow:ssh handling of missing build IDs.
Added browser device login with resumable commands for chat agents and iOS Simulator session recording through serve-sim. Also retries App Store Connect connection failures with safe recovery for interrupted status reads and upload commits.
eas simulator gains a --network-capture flag to record HTTP(S) traffic from apps on the device, plus --network-capture-field to also keep headers, query values, or request and response bodies.
eas update gains --upload-source-maps to upload generated source maps for stack-trace symbolication, and --force-end-active-rollout is available across the update, republish, rollback, and roll-back-to-embedded commands. Embedded bundle upload after build is now on by default for projects on SDK 58 and later, and fixes include reusing App Store Connect tokens with pre-expiry refresh and stopping eas workflow:validate from crashing on certain schemas.
Adds eas integrations:supabase:advisors to list unresolved Supabase Security and Performance Advisor findings for the linked project, and accepts individual App Store Connect API keys for submissions, TestFlight setup, and metadata. Also added --build-fingerprint to eas simulator and fixed eas account:view printing Role: undefined for the Release Manager role.
iOS Simulator previews now stream with H.264, and simulator sessions report the expo.dev preview page as their preview URL and the preview server behind it as previewApiUrl. eas simulator:start and eas simulator:get report the expo.dev preview page instead of the raw tunnel URL in printed instructions and --json, and package manager overrides are now honored when installing and launching simulator packages.
Login no longer fetches the primary account; commands that need it fetch on demand, so scoped access tokens without primary account access no longer fail at login. Also added log display for eas build --wait and skipped project source refresh for jobs with no sources.
Connected sandboxes can now run shell commands through the Expo MCP server, added via the build-tools package.
build:dev, build:run, and run now support Xcode 27, which replaces Simulator.app with Device Hub, for iOS simulator builds.
🧹 Chores
- [eas-cli] Bump
@expo/apple-utilsto2.2.1. (#4404 by @brentvatne)
EAS CLI now requires Node ^20.18.3 or >=22.0.0, dropping Node 18. In --egress local sessions, a guard injected into every iOS Simulator process refuses connections that bypass the system proxy and reports them with calling frameworks in the session log, and proxy environment variables are set inside the simulator for clients that read them such as gRPC and libcurl. Build-tools also skip project source refresh for jobs with no sources.
A shared protocol for sandbox daemon commands was added to eas-build-job.
New eas workflow:insights command shows Workflows run counts and success rate versus the previous period plus a per-workflow breakdown, and eas workflow:insights:maestro shows Maestro pass and flake rates with a sortable per-flow table, both with --json output. Invalid time ranges and non-integer --limit/--offset values are now rejected instead of being sent to the server, and Git job inputs no longer carry repository URLs.
The local egress banner printed by eas simulator:start is shorter and no longer mentions eas simulator:egress in interactive mode, where the client runs in the same terminal.
Interactive eas simulator:start --egress local no longer tells users to run eas simulator:egress when the egress client already runs in the same terminal.


