v26.0.0
๐ Breaking changes
- [eas-build-job][build-tools] Remove legacy artifact type exports and route workflow uploads through workflow storage without file-type categories. Preserve workflow uploads and Maestro reports. (#4719 by @sjchmiela)
๐ New features
- [eas-build-job][build-tools] Export
validateAndroidLaunchOptionsandquoteAndroidShellCommandfrom@expo/eas-build-job, so Android launch arguments can be checked for NUL characters and length before a simulator session starts, and check them before the emulator boots in agent-device sessions. (#4696 by @brentvatne) - [eas-json] Add
permissions.account.roleto build profiles to request a role for the build'sEXPO_TOKEN. (#4732 by @wschurman) - [build-tools] Stop sandboxes after an optional maximum duration measured from readiness. (#4702 by @sjchmiela)
- [build-tools] Unify signed URL uploading to a single implementation and use it everywhere. (#4712 by @AHGIJMKLKKZNPJKQR)
๐ Bug fixes
- [eas-cli] Regenerate graphql code. (#4692 by @wschurman)
- [build-tools] Default Android emulators to 4 GiB of RAM to reduce ADB disconnects during large transfers. Retain the 2 GiB default for API 34 and below outside interactive device sessions, and preserve explicit emulator configuration overrides. (#4727 by @sjchmiela)
- [build-tools] Retry transient failures when reporting that a device run session has started. (#4680 by @gwdp)
- [build-tools] Retry the build lookup and the archive download of
eas/download_buildon transient failures, and name the failure cause in the build log. (#4690 by @hSATAC) - [eas-cli] Read the app config fewer times in
eas buildand other project commands. An iOS build now runsexpo config2 times instead of 6. (78ba760by @vonovak) - [build-tools][steps] Stop printing workflow hook parsing messages in build logs: native builds showed them under an "Unknown build phase" group, and custom builds warned about unknown hook keys and hooks on steps that never run. (#4717 by @hSATAC)
- [worker] Retry Node.js installation without the internal Node.js cache mirror when the first attempt fails, while preserving other configured mirrors. (#3452 by @sjchmiela)
- [eas-cli] Share one GraphQL client between the project ID check and the command, so commands send one fewer app query. (#4646 by @vonovak)
- [eas-cli] Show why a simulator session failed in
eas simulator:get, and add anerrorsarray to its--jsonoutput. For an unknown error,simulator:startandsimulator:getnow show the failed step's error from the session logs. (#4694 by @brentvatne) - [eas-cli] Show why a simulator session failed in
eas simulator:start, such as an unknown--devicename, instead of only the session status. (#4693 by @brentvatne) - [worker] Mask secrets in every field of uploaded job log records, such as logged errors, not only in log messages. (#4698 by @brentvatne)
๐งน Chores
- [eas-cli] Make command descriptions in
eas --helpconsistently lowercase without trailing periods. (#4385 by @brentvatne) - [eas-cli][build-tools] Bump Node.js to 22.23.4 to fix the CVEs in the October 2026 Node.js security releases. (#4714 by @ramonclaudio)