Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
268 commits
Select commit Hold shift + click to select a range
2b8ecf8
[docs] Improve Ask AI widget (#41829)
amandeepmittal Dec 31, 2025
f4df2de
fix(cli): restore `resetCache`, `maxWorkers`, and `port` argument ove…
shottah Dec 31, 2025
a8ba919
feat(expo-router): Add `elementSize` support for `Toolbar.Menu` and `…
EvanBacon Dec 31, 2025
e140388
[image][web] Add `loading` prop to allow lazy loading (#41442)
mozzius Dec 31, 2025
4a21cfe
docs: drop OneSignal due to discontinued Expo plugin (#41895)
byCedric Jan 1, 2026
769454b
[router][docs] Trim literal unions for `MaterialIcon` & clarify it in…
amandeepmittal Jan 2, 2026
3ca29b8
[expo-router][android] Add Material 3 dynamic color defaults for Nati…
Ubax Jan 2, 2026
a6cc7e1
[docs] Add Compare build logs section to troubleshooting guide under …
amandeepmittal Jan 3, 2026
c4ed5ca
[docs] Parse JSON data for `llms-eas.txt` and Copy markdown action bu…
amandeepmittal Jan 3, 2026
49e3b7c
[docs][video] Change deprecated FullScreen VideoView prop (#41898)
rodrigoaraujo7 Jan 4, 2026
9c57502
[docs] Fix formatting error (#41920)
amandeepmittal Jan 4, 2026
d2d4b79
[docs] Fix Algolia's DocSearch extraction error for app config pages …
amandeepmittal Jan 4, 2026
c115cb4
[config-plugins] fix tests (#41868)
Kudo Jan 4, 2026
49091db
[ncl] Refactor Geofencing example (#41922)
tsapeta Jan 4, 2026
843d5e1
[templates] Update icons (#41733)
alanjhughes Jan 4, 2026
c61d253
[expo-router] enable zoom transition by default (#41891)
Ubax Jan 5, 2026
6b962e6
[expo-localization] Default allowDynamicLocaleChangesAndroid to true …
Ubax Jan 5, 2026
d514bea
[docs] Update `llms-eas-text.js` script to parse `<EasJsonPropertiesT…
amandeepmittal Jan 5, 2026
d4d7ec0
[ios][splashscreen] Remove new arch checks (#41767)
alanjhughes Jan 5, 2026
fb5bf39
[docs] Fix TableOfContents (TOC) bug (#41861)
amandeepmittal Jan 5, 2026
3121820
[expo-go][ios] New performance monitor (#41055)
alanjhughes Jan 5, 2026
fcf867e
[android][expo-go] implement custom performance monitor (#41056)
alanjhughes Jan 5, 2026
674fcb5
[android][audio] Handle errors when calling stop (#41933)
alanjhughes Jan 5, 2026
2b3379b
[ios][expo-go] Fix module registration (#41936)
alanjhughes Jan 5, 2026
2cabd28
[tools][docs] Update TypeDoc in `tools` and `TypeGeneralData` shape i…
amandeepmittal Jan 5, 2026
ccb445c
[docs] Regenrate Expo SDK docs data (#41937)
amandeepmittal Jan 5, 2026
a038cef
feat(expo-router): improve SSR support (#41477)
hassankhan Jan 5, 2026
604fbc1
[iOS] Migrate `expo-task-manager` module to Swift (#41911)
tsapeta Jan 6, 2026
60aa59f
[docs] Revert OneSignal changes (#41896)
amandeepmittal Jan 6, 2026
98fbe10
[docs] Add Clerk and overview pages under authentication integration …
amandeepmittal Jan 6, 2026
4f4bb5a
[chore] improve background task time logging in notification-tester (…
vonovak Jan 6, 2026
221b743
[font] unify useFonts return value in RSC (#40481)
vonovak Jan 6, 2026
e74221c
[docs] Update Terminal component (#41831)
amandeepmittal Jan 6, 2026
c592d7d
Notifications topic subscribe (#17674)
mmomtchev Jan 6, 2026
7a4b51c
ci: do not boot simulator in native unit tests to avoid timeouts (#41…
vonovak Jan 6, 2026
93880a4
[notifications] fix syntax error in expo-module.config.json (#41956)
vonovak Jan 6, 2026
5778dfd
chore(cli,pkcs12): Bump `node-forge` range to `^1.3.3` (#41753)
kitten Jan 6, 2026
4687b69
[docs] Fix typo in monorepos.mdx (#41963)
dwnste Jan 6, 2026
cea57af
[docs] Update CNG info in docs (#41940)
amandeepmittal Jan 6, 2026
7958dbc
[docs] Use platform tag in Error codes table in AgeRange reference (#…
amandeepmittal Jan 6, 2026
965fa23
[age-range][docs] Add missing SDK 54 data (#41947)
amandeepmittal Jan 6, 2026
8d45c4d
[docs] Improve `@deprecated` callout for SDK docs (#41950)
amandeepmittal Jan 6, 2026
aa0f369
chore(cli,updates): Bump to `@expo/code-signing-certificates@^0.0.6` …
kitten Jan 6, 2026
e19b30e
[config] remove notifications from schema (#36885)
vonovak Jan 6, 2026
f6c2c49
[config-plugins] remove expo-notifications from auto plugins (#40787)
vonovak Jan 6, 2026
45fd4d9
[sdk-55] Upgrade `react-native-keyboard-controller` to `1.20.3` (#41958)
alanjhughes Jan 6, 2026
7d46964
[tools] Optionally use OTP flag for promoting [skip ci]
brentvatne Jan 6, 2026
9b00341
[sdk-55] Update `@react-native-community/slider` to `5.1.1` (#41974)
alanjhughes Jan 7, 2026
bb00176
[docs] minor updates to localization guide (#41959)
vonovak Jan 7, 2026
3e364e8
[expo-modules-core][docs] Fix internal links and typo (#41949)
amandeepmittal Jan 7, 2026
6f709b0
[expo] Update `react-native-reanimated` to `4.2.1` (#41967)
lukmccall Jan 7, 2026
df97332
[expo] Update `react-native-gesture-handler` to `2.30.0` (#41966)
lukmccall Jan 7, 2026
231e77b
[location] Add `androidForegroundServiceIcon` field to the config plu…
jeppester Jan 7, 2026
f373c9d
[constants][Android] Removed references to legacy native modules API …
lukmccall Jan 7, 2026
57d06e6
[docs] Fix formatting error (#41988)
amandeepmittal Jan 7, 2026
6e93610
[sdk-55] updated `react-native-webview` to `13.16.0` (#41982)
chrfalch Jan 7, 2026
2bdd2d4
[sdk-55] Update `react-native-svg` to `15.15.1` (#41987)
alanjhughes Jan 7, 2026
58bb1c6
[modules-autolinking] Rename file to correct spelling of 'Autolinking…
EricZeiberg Jan 7, 2026
43a1819
[sdk-55] updated `@shopify/react-native-skia` to `2.2.14` (#41989)
chrfalch Jan 7, 2026
88b9feb
Remove expo-av leftovers, i.e. diagnostic screen (#41954)
tsapeta Jan 7, 2026
3419255
[ios][expo-go] Handle initial url (#41942)
alanjhughes Jan 7, 2026
c0c9e0f
[ios][expo-go] Add review prompt (#41943)
alanjhughes Jan 7, 2026
8644a11
[ios][expo-go] Add remote dev sessions (#41944)
alanjhughes Jan 7, 2026
6f2b342
[ios][expo-go] Finish account deletion and tracking prompt (#41945)
alanjhughes Jan 7, 2026
2af5bd7
[ios][expo-go] Add project share sheet (#41948)
alanjhughes Jan 7, 2026
717102d
[ios][expo-go] Add branch details screen (#41957)
alanjhughes Jan 7, 2026
981ff51
[github] Ensure static frameworks workflow build from source (#41969)
gabrieldonadel Jan 7, 2026
25a3feb
[glass-effect] - tvos support and add note in docs for `opacity` chan…
intergalacticspacehighway Jan 7, 2026
63f2e80
[image-loader][Android] Removed references to legacy native modules A…
lukmccall Jan 7, 2026
2fcffa9
[fingerprint] Fix `Property 'notification' does not exist on type 'Ex…
lukmccall Jan 7, 2026
f4b8d54
feat(babel-preset-expo): optimize expo-router babel plugins (#41693)
EvanBacon Jan 7, 2026
584ce25
[docs] Remove invalid param from submit docs and add profile param in…
shindeshubhamm Jan 7, 2026
90d72d1
[expo-notifications] fix tests after config change (#41972)
douglowder Jan 7, 2026
276888c
[template] Update default template to use a /src folder (#41983)
kadikraman Jan 7, 2026
a3490d9
[templates] disable tablet support by default (#42000)
betomoedano Jan 7, 2026
abbd2b7
[core][iOS] Remove legacy `EXReactNativeEventEmitter` class (#41915)
tsapeta Jan 8, 2026
6cba3c3
[modules-core][iOS] Fix missing headers when using static frameworks …
gabrieldonadel Jan 8, 2026
3892ea5
[ui][iOS] - DisclosureGroup docs and improvements (#41726)
intergalacticspacehighway Jan 8, 2026
d9bc5c5
[ui][iOS] - ColorPicker docs and improvements (#41725)
intergalacticspacehighway Jan 8, 2026
dca2e70
[location] Add missing dependency on expo/image-utils (#42008)
tsapeta Jan 8, 2026
5c8b311
[docs] Fix internal links in Expo Audio reference (#41951)
amandeepmittal Jan 8, 2026
8d87433
[sdk-55] Upgrade `react-native-safe-area-context` to `5.6.2` (#41979)
alanjhughes Jan 8, 2026
30e7b6c
[ui][iOS] - Section docs and improvements (#41722)
intergalacticspacehighway Jan 8, 2026
57e0b9e
[core][iOS] Remove legacy log handler (#41916)
tsapeta Jan 8, 2026
a491cf5
[sdk-55] Update `@stripe/stripe-react-native` to `0.57.2` (#41980)
alanjhughes Jan 8, 2026
1143bc1
[iOS][Expo Go] Remove unused test target (#42017) [skip CI]
tsapeta Jan 8, 2026
4840f4a
[sdk-55] Update datetimepicker and picker (#42015)
alanjhughes Jan 8, 2026
38f19f8
[sdk-55] Update react-native-pager-view to 8.0.0 (#42018)
alanjhughes Jan 8, 2026
7e77537
[sdk-55] Update `react-native-maps` to `1.26.20` (#42021)
alanjhughes Jan 8, 2026
8337d3f
[docs] Add a link to `llms.txt` to footer (#41938)
amandeepmittal Jan 8, 2026
a753808
[sdk-55] updated `@shopify/react-native-skia` to `2.4.14` (#42020)
chrfalch Jan 8, 2026
90f0d32
[localization] Add support for ios Localizable.strings via config plu…
desii101 Jan 8, 2026
43a4693
[brownfield] add library for brownfield toolkit (#42012)
pmleczek Jan 9, 2026
1068211
[crypto] Add support for AES encryption (#41249)
barthap Jan 9, 2026
0fe906f
[sdk-55] Update `react-native-keyboard-controller` to `1.20.4` (#42024)
alanjhughes Jan 9, 2026
0edbc7d
[video] Add e2e tests for expo-video (#41513)
behenate Jan 9, 2026
e782a37
[video][android] Fix rare crashes related to VideoPlayer listeners (#…
behenate Jan 9, 2026
75bcfbf
[video] Fix `fullscreenOptions.enable` and `allowsFullscreen` props i…
behenate Jan 9, 2026
85b45d9
fix(expo-task-manager): Fix Android job scheduling ANR and duplicate …
tyrauber Jan 9, 2026
fe391b2
fix(expo-location): Report location updates immediately in foreground…
tyrauber Jan 9, 2026
c7d8e80
[notifications] prefer using named exports internally (#41973)
vonovak Jan 9, 2026
c32ef0a
[notifications] bump firebase notifications dependency (#42016)
vonovak Jan 9, 2026
c4720d5
[video] Remove the `allowsFullscreen` prop (#41606)
behenate Jan 9, 2026
0e64f7e
[video][android] Fix player duration property refreshing too late (#4…
behenate Jan 9, 2026
4e408c1
[ios][expo-font] Defer native font querying to prevent startup hang (…
mozzius Jan 9, 2026
59670ce
[notifications] rename EXNotifications to ExpoNotifications (#42009)
vonovak Jan 9, 2026
42c4256
[notifications] migrate permission requester to swift (#42010)
vonovak Jan 9, 2026
78c4ab9
[expo-go][ios] Minor changes for consistency (#42030)
alanjhughes Jan 9, 2026
99708f3
[docs] Update visibility and sidebar title for LLMs page (#42036)
amandeepmittal Jan 9, 2026
185d536
docs: clarify Localizable.strings entry in localization guide (#42039)
vonovak Jan 9, 2026
2fdf8db
feat(cli): Default EXPO_NO_GIT_STATUS to true and update warnings (#4…
EvanBacon Jan 9, 2026
6fd8a64
[brownfield][iOS] Fix support for react-native 0.83 (#42038)
gabrieldonadel Jan 9, 2026
dccd498
feat(expo-router): add support for server data loaders in server expo…
hassankhan Jan 9, 2026
8482195
feat(create-expo): Improve git repo initialization logic (#42052)
EvanBacon Jan 10, 2026
5d97b37
chore(metro-config): Defer metro export source loading in serializer …
EvanBacon Jan 10, 2026
21fcc62
[mininal-tester] Regenerate native folders (#42047)
gabrieldonadel Jan 10, 2026
93952da
[ios][expo-go] Cache remote dev sessions (#42041)
alanjhughes Jan 11, 2026
9b8bf26
[ios][expo-go] Add new version warning (#42042)
alanjhughes Jan 11, 2026
97de160
[ios][expo-go] Add haptic feedback and loaders (#42043)
alanjhughes Jan 11, 2026
8952347
[ios][expo-go] Fix gesture settings (#42044)
alanjhughes Jan 11, 2026
d9243dd
[ios][expo-go] Fix notifications import (#42045)
alanjhughes Jan 11, 2026
cdacc5e
[ios][screen-orientation] remove use of deprecated api UIApplication.…
bwallberg Jan 11, 2026
438d182
[core][ios] Run `swiftlint` (#42031)
lukmccall Jan 11, 2026
47a321b
[mininal-tester] Add expo-brownfield dependency (#42048)
gabrieldonadel Jan 12, 2026
80a2e35
[ui][iOS] - `Form` docs and improvements (#41728)
intergalacticspacehighway Jan 12, 2026
75fad12
[ui][iOS] - `ProgressView` docs and changes (#42019)
intergalacticspacehighway Jan 12, 2026
169a73f
[expo-router][iOS] expose image prop from Toolbar.Button (#41882)
Ubax Jan 12, 2026
8ea5b2a
[expo-router] Fix unknown key in link preview (#41756)
Ubax Jan 12, 2026
49fe698
[crypto][auth-session] fix failing tests (#42076)
vonovak Jan 12, 2026
21e776d
[screen-orientation] simplify internal web listener (#41447)
vonovak Jan 12, 2026
af044a0
[expo] change `global` for `globalThis` to fix failing `auth-session`…
vonovak Jan 12, 2026
c306d58
[expo-auth-session] Add support for custom HTTP Headers (#31381)
lsarni Jan 12, 2026
8f1c422
[go][home][android] Rewrite Expo Go Home to compose. (#42046)
aleqsio Jan 12, 2026
560a482
[expo-router] add types to BaseRoute props (#41765)
Ubax Jan 12, 2026
26b5f12
[notifications] fix changelog (#42087)
vonovak Jan 12, 2026
12c69e9
[docs] Add Android widgets tutorial video (#42067)
amandeepmittal Jan 12, 2026
32a8f14
[docs] Replace package manager `Tabs` with `Terminal` tabs (#41952)
amandeepmittal Jan 12, 2026
fe40d1b
[docs] Clarify starter plan verbiage for cancellation effect in Billi…
amandeepmittal Jan 12, 2026
02155fe
feat(metro): conditionally disable compression for explicit content-t…
krystofwoldrich Jan 12, 2026
8f6f541
[notifications] add missing changelog entry (#42089)
vonovak Jan 12, 2026
7a02030
[ncl] Fix camera record/pause screen (#42091)
behenate Jan 12, 2026
2a78a3b
[ios][expo-go] Clean up home SwiftUI (#42090)
alanjhughes Jan 12, 2026
acc1886
[expo-router] add Toolbar.SearchBarPreferredSlot (#41863)
Ubax Jan 12, 2026
e22c06f
[expo-router] throw error when array style is passed to Slot (#41901)
Ubax Jan 12, 2026
de26087
[brownfield] expo-brownfield cleanup & improvements (#42072)
pmleczek Jan 12, 2026
3aacaff
[docs] Update HeadingCase for Vale (#42104)
amandeepmittal Jan 12, 2026
eeef90c
[android][expo-go] Make module registration safer (#42097)
alanjhughes Jan 12, 2026
b660ed1
[core][ios] Add support for `ArrayBuffer`s (#41548)
barthap Jan 12, 2026
f21ed53
[brownfield][iOS] Refactor podspec and fix template (#42105)
gabrieldonadel Jan 12, 2026
14b5782
[expo-go] Include expo-blob (#42103)
barthap Jan 13, 2026
bfcbb88
[image][ios] Add support for PSD images (#42077)
barthap Jan 13, 2026
0075c66
[cli][mcp] expose cli extensions as mcp tools (#40826)
chrfalch Jan 13, 2026
e3744e6
[font] Remove flaky test (#42111)
lukmccall Jan 13, 2026
2f224d2
[contacts] create CNContactStore lazily (#42096)
vonovak Jan 13, 2026
6cdcbc7
[docs] Add set-env documentation to EAS Workflows syntax (#42081)
sjchmiela Jan 13, 2026
c1087a0
[brownfield][android] Fix support for react-native 0.83 (#42069)
gabrieldonadel Jan 13, 2026
37090a8
[menu][Android] Fix menu is not showing on launch when `ReactContext`…
lukmccall Jan 13, 2026
3cb13de
[expo-router][iOS] add usePreventZoomTransitionDismissal (#41893)
Ubax Jan 13, 2026
dd5533b
[bare-expo][Android] Fix NCL ModulesCore Benchmarks (#42117)
barthap Jan 13, 2026
4738e4a
[go][Android] Fix key commands (#42124)
lukmccall Jan 13, 2026
3a9d03e
[test-suite] Exclude `Notifications` tests when running in Expo Go (#…
lukmccall Jan 13, 2026
6edce6a
[brownfield][android] Add gitignore to gradle plugins (#42130)
gabrieldonadel Jan 13, 2026
4883b66
[android] Remove expo-go RN home (#42093)
aleqsio Jan 13, 2026
f725903
[test-suite] Exclude media library screens when running in the Expo G…
lukmccall Jan 13, 2026
c0a37cd
[dev-launcher] Add api to change bundleUrl from JS (#42065)
alanjhughes Jan 13, 2026
ee7e0d3
[core][iOS] Add experimental formatters API (#42023)
lukmccall Jan 13, 2026
417ccf9
[sms][tests] Add user agent (#42113)
lukmccall Jan 13, 2026
9cf4bb8
[expo] Remove `home` github workflow (#42132)
lukmccall Jan 13, 2026
7688705
[package-manager] - support Bun text lock file (#42049)
AbbanMustafa Jan 13, 2026
b5b26e2
[docs] Document custom environments (#41163)
kadikraman Jan 13, 2026
0ce2b9c
[brownfield] Fix publishing canary (#42136)
gabrieldonadel Jan 13, 2026
eafbe81
[ios][dev-launcher] Fix nil `projectUrl` (#42126)
alanjhughes Jan 13, 2026
4879b86
[android][expo-go] Fix hot reloading (#42137)
alanjhughes Jan 13, 2026
d448334
[go][Android] Fix app history management (#42143)
lukmccall Jan 13, 2026
0c13271
[docs] Update EAS Update getting started guide to include CODE compon…
amandeepmittal Jan 13, 2026
30966bf
[notifications] fix named exports (#42116)
vonovak Jan 13, 2026
a23c021
[maps] Export AppleMapsMapStyleElevation enum (#42148)
gustavoharff Jan 14, 2026
527e74f
[ui][iOS] - `ContextMenu` and `Divider` docs and API changes (#42027)
intergalacticspacehighway Jan 14, 2026
e3ca4a2
[docs] Add platform tag for Expo Go (#42078)
amandeepmittal Jan 14, 2026
2d8f9d7
[file-system][legacy] Fix bad access off the MainActor (#42144)
alanjhughes Jan 14, 2026
a8291c3
[expo-router][ios] remove unstable_splitView and enable split view by…
Ubax Jan 14, 2026
a1b3598
[ui][iOS] - `Guage` docs and API changes (#42022)
intergalacticspacehighway Jan 14, 2026
10bb37c
[NCL][iOS] Fix Speech screen importing SwiftUI in Expo Go (#42151)
barthap Jan 14, 2026
0e597bf
[android][expo-audio] removed requiring shouldPlayInBackground for ba…
chrfalch Jan 14, 2026
bc6f0c0
[go][Android] Add section for dev menu preferences (#42145)
lukmccall Jan 14, 2026
ec1d0d1
[menu][Android] Temporarily disabled the fast refresh toggle (#42146)
lukmccall Jan 14, 2026
33bf9d1
[ui][iOS] - `Bottomsheet` docs and API changes (#42029)
intergalacticspacehighway Jan 14, 2026
3ca7a37
fix(expo/async-require/hmr): Add timeout to `console.warn` for HMR cl…
kitten Jan 14, 2026
a89c244
[widgets] Create base package (#41997)
jakex7 Jan 14, 2026
548bd4c
[ci] unhide maestro artifacts when downloaded locally (#42014)
vonovak Jan 14, 2026
0efd506
[expo-audio] reverted removing the stay active.. btn from audio recor…
chrfalch Jan 14, 2026
2d3b650
[react-native] Update fork to `a29029b` (#42158)
lukmccall Jan 14, 2026
d8e19f5
[ui][iOS] - Nested `Text` support and docs (#41707)
intergalacticspacehighway Jan 14, 2026
877cc30
fix(brownfield): Add missing intermediary entrypoint for `expo-brownf…
kitten Jan 14, 2026
9cb8329
feat(cli): Add `EXPO_UNSTABLE_BONJOUR` flag to active local DNS-SD se…
kitten Jan 14, 2026
8a909b5
fix(cli): Restrict connections to debugger and devtools websockets (#…
kitten Jan 14, 2026
5d025c0
[expo-router][iOS] expose image prop from Link.Menu and Toolbar.Menu …
Ubax Jan 14, 2026
cd0dc92
[android] add smallestScreenSize to android:configChanges to prevent …
Ubax Jan 14, 2026
de3b6f1
[menu][Android] Add ability to remove overlay permission (#42157)
lukmccall Jan 14, 2026
8102d4e
[go][Android] Fix status bar theme not aligning with the app (#42172)
lukmccall Jan 14, 2026
3fe0922
refactor(@expo/metro-config): suppress `browserslist` output (#42071)
hassankhan Jan 14, 2026
9d2f865
[menu][Android] Fix bottom sheet expanding to full height when closin…
lukmccall Jan 14, 2026
4de6505
[docs] Update "in preview" release status to "in beta" (#42170)
amandeepmittal Jan 14, 2026
9ecce94
[docs] Add PR preview workflow example with GitHub comment job (#42163)
Copilot Jan 14, 2026
bf383a2
refactor(expo-router): unify nullish value handling for data loaders …
hassankhan Jan 14, 2026
07055fc
[brownfield-tester] Add ios project to test integrated approach (#42176)
gabrieldonadel Jan 14, 2026
99b6922
[menu][Android] Fix three finger long press (#42179)
lukmccall Jan 14, 2026
f867b39
[glass-effect] - Add `colorScheme` prop (#42164)
intergalacticspacehighway Jan 15, 2026
1cf92d6
[ui][iOS] - `RNHostView`, `HStack`, `VStack`, `Group`, `Spacer`, `Ima…
intergalacticspacehighway Jan 15, 2026
eaa6b9f
[core] fixed useReleaseSharedObject to defer releasing until after re…
chrfalch Jan 15, 2026
7335d13
[expo-router] add replace action handling to headless tabs (#41815)
Ubax Jan 15, 2026
ebfda48
[expo-router] use screen's synchronous layout updates by default in r…
Ubax Jan 15, 2026
5aade9f
[tools][docs] Use latest version of Reviewdog for lint-prose job (#42…
amandeepmittal Jan 15, 2026
de8bd7a
[tools] Bump diff from 5.1.0 to 8.0.3 (#42182)
dependabot[bot] Jan 15, 2026
eeb7119
[splash-screen][iOS] Fix crash when storyboard is not present (#42178)
gabrieldonadel Jan 15, 2026
db678be
[ios][dev-launcher] Use auto layout instead of autoresizingMask (#42171)
alanjhughes Jan 15, 2026
8df4c49
[ios][brownfield] align expo-brownfield ios implementation with main …
pmleczek Jan 15, 2026
2d9c293
[docs] Add Expo Go tag in SDK docs (#42160)
amandeepmittal Jan 15, 2026
14e552e
[expo-router][iOS] reduce number of times UIBarButtonItem is recreate…
Ubax Jan 15, 2026
94f64ed
[ios][expo-go] Fix dev settings (#42180)
alanjhughes Jan 15, 2026
f059f75
[docs] Add Outputs documentation for Maestro Cloud pre-packaged job (…
Copilot Jan 15, 2026
431e2e8
[docs] Fix formatting errors (#42207)
amandeepmittal Jan 15, 2026
cb019d4
[ios][expo-go] Remove old google maps references (#42190)
alanjhughes Jan 15, 2026
2c60020
feat(@expo/cli): respect `web.output` configuration in dev server for…
hassankhan Jan 15, 2026
b7a9bef
[expo-router] fix e2e tests (#41864)
Ubax Jan 15, 2026
39e1fac
[crypto][Android] Fix typed array double offset writes (#42186)
barthap Jan 15, 2026
4aa7955
[go][Android] Fix back button (#42208)
lukmccall Jan 15, 2026
04dcdde
[screen-capture][iOS] Fix main thread violation warnings on app start…
lukmccall Jan 15, 2026
1b1cc40
[sensors][docs] Fix IntervalMS info in all Expo Sensor references ref…
amandeepmittal Jan 15, 2026
ed25960
[core][iOS] Remove legacy `EXUnimodulesCompat.h` (#41917)
tsapeta Jan 15, 2026
bddb87b
[core][iOS] Fix launching deep link with dev launcher (#42212)
jakex7 Jan 16, 2026
a6488db
[expo/fetch][android] Zero-copy return from `response.arrayBuffer()` …
barthap Jan 16, 2026
608f28f
[e2e] Attempt to improve comparison tests (#42197)
alanjhughes Jan 16, 2026
9ec108a
[ios][maps] Support monogram on markers (#42159)
huextrat Jan 16, 2026
e86cfa4
[expo-router][ios] fix swiftlint errors (#42230)
Ubax Jan 16, 2026
b5c3d26
[expo-router][ios] fix build error 'Logger' is ambiguous (#42229)
Ubax Jan 16, 2026
955f752
[expo-router][ios] add comment to ENV['RNS_GAMMA_ENABLED'] set by con…
Ubax Jan 16, 2026
0f69ffb
[docs] Add the `--environment` flag to the update example (#42233)
kadikraman Jan 16, 2026
18d6f1e
[contacts] Fix writeContactToFileAsync() test (#42135)
Wenszel Jan 16, 2026
a5b0c32
[contacts] Fix adding a contact when default account is set to cloud …
Wenszel Jan 16, 2026
3494038
fix(expo-server): throw an error when loader module is not found in p…
hassankhan Jan 16, 2026
ae1411a
feat(expo-router): add renderingMode prop to native tabs icons (#42241)
Ubax Jan 16, 2026
b524127
fix(expo-router): use `ImmutableRequest` for loader functions (#42149)
hassankhan Jan 16, 2026
fc811de
fix(@expo/metro-config): avoid module ID collision between loader and…
hassankhan Jan 16, 2026
c54eb1e
chore(@expo/metro-config): update changelogs for #42245 (#42248)
hassankhan Jan 16, 2026
8d8bc0b
[core][ui][iOS] Add new initializer to ExpoSwiftUI.ViewProps (#42219)
jakex7 Jan 18, 2026
d5526ae
[ui][iOS] Add `containerRelativeFrame` modifier (#42237)
jakex7 Jan 18, 2026
2783b65
[ui] Rebuild package to fix failing CI (#42261)
jakex7 Jan 18, 2026
24b959c
[expo-router] add unstable_navigationEvents to globalThis.expo (#42238)
Ubax Jan 18, 2026
edd521d
Merge branch 'main' into @kimchi-developer/expo-ui-android-dsl-refactor
Kudo Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .github/workflows/docs-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,15 @@ jobs:
NODE_ENV: production
run: yarn lint --max-warnings 0
- name: 💬 Lint Docs website content
uses: errata-ai/vale-action@reviewdog
uses: errata-ai/vale-action@v2.1.1
with:
version: 3.12.0
reporter: github-pr-check
files: 'docs/pages'
vale_flags: '--config=./docs/.vale.ini'
fail_on_error: true
# Override bundled reviewdog (0.17.0) to avoid 300-file diff limit
reviewdog_url: https://github.com/reviewdog/reviewdog/releases/download/v0.21.0/reviewdog_0.21.0_Linux_x86_64.tar.gz
- name: 🏗️ Build Docs website
run: yarn export-preview
timeout-minutes: 20
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,15 @@ jobs:
NODE_ENV: production
run: yarn lint --max-warnings 0
- name: 💬 Lint Docs website content
uses: errata-ai/vale-action@reviewdog
uses: errata-ai/vale-action@v2.1.1
with:
version: 3.12.0
reporter: github-pr-check
files: 'docs/pages'
vale_flags: '--config=./docs/.vale.ini'
fail_on_error: true
# Override bundled reviewdog (0.17.0) to avoid 300-file diff limit
reviewdog_url: https://github.com/reviewdog/reviewdog/releases/download/v0.21.0/reviewdog_0.21.0_Linux_x86_64.tar.gz
- name: 🏗️ Build Docs website for deploy
working-directory: docs
run: yarn export
Expand Down
72 changes: 0 additions & 72 deletions .github/workflows/home.yml

This file was deleted.

3 changes: 2 additions & 1 deletion .github/workflows/ios-static-frameworks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ jobs:
- name: 🍏 Build iOS Project
working-directory: ./apps/bare-expo
run: |
jq '.["ios.useFrameworks"] = "static"' ios/Podfile.properties.json > temp.json && mv temp.json ios/Podfile.properties.json
set -o pipefail
jq '.["ios.useFrameworks"] = "static" | .["ios.buildReactNativeFromSource"] = "true"' ios/Podfile.properties.json > temp.json && mv temp.json ios/Podfile.properties.json
pod install --project-directory=ios
xcodebuild -workspace ios/BareExpo.xcworkspace -scheme BareExpo -configuration Release -sdk iphonesimulator -derivedDataPath "ios/build" | xcpretty
- name: 🔔 Notify on Slack
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/test-suite.yml
Original file line number Diff line number Diff line change
Expand Up @@ -176,17 +176,21 @@ jobs:
env:
MAESTRO_CLI_NO_ANALYTICS: 1
timeout-minutes: 40
- name: 📦 Prepare testing artifacts
if: always()
run: |
# Rename .maestro to maestroArtifacts so it's not a hidden folder when downloaded locally
mv ~/.maestro ~/maestroArtifacts
- name: 📸 Store testing artifacts
if: always()
uses: actions/upload-artifact@v4
id: upload-artifacts
with:
name: bare-expo-artifacts-ios
path: |
~/.maestro/tests/**/*
~/maestroArtifacts/tests/**/*
~/Library/Logs/maestro/**/*
overwrite: true
include-hidden-files: true # .maestro is skipped otherwise
- name: 🔗 Artifacts download URL
if: always()
run: |
Expand Down Expand Up @@ -342,14 +346,19 @@ jobs:
# Run the actual tests
./scripts/start-android-e2e-test.ts --test
working-directory: ./apps/bare-expo
- name: 📦 Prepare testing artifacts
if: always()
run: |
# Rename .maestro to maestroArtifacts so it's not a hidden folder when downloaded locally
mv ~/.maestro ~/maestroArtifacts
- name: 📸 Store testing artifacts
if: always()
id: upload-artifacts
uses: actions/upload-artifact@v4
with:
name: bare-expo-artifacts-android
path: |
~/.maestro/tests/**/*
~/maestroArtifacts/tests/**/*
overwrite: true
- name: 🔗 Artifacts download URL
if: always()
Expand Down
35 changes: 19 additions & 16 deletions apps/bare-expo/MainNavigator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { Platform } from 'react-native';
import { TestStackNavigator } from 'test-suite/TestStackNavigator';
import { GestureHandlerRootView } from 'react-native-gesture-handler';

type NavigationRouteConfigMap = React.ComponentType;

Expand Down Expand Up @@ -154,21 +155,23 @@ export default function MainNavigator() {
return null;
}
return (
<NavigationContainer
linking={linking}
initialState={initialState}
onStateChange={(state) => {
AsyncStorage.setItem(PERSISTENCE_KEY, JSON.stringify(state)).catch(console.error);
}}>
<Switch.Navigator
screenOptions={{ headerShown: false }}
initialRouteName="main"
id={undefined}>
{Redirect && <Switch.Screen name="redirect" component={Redirect} />}
{Search && <Switch.Screen name="searchNavigator" component={Search} />}
<Switch.Screen name="main" component={TabNavigator} />
</Switch.Navigator>
<StatusBar style={themeName === 'light' ? 'dark' : 'light'} />
</NavigationContainer>
<GestureHandlerRootView style={{ flex: 1 }}>
<NavigationContainer
linking={linking}
initialState={initialState}
onStateChange={(state) => {
AsyncStorage.setItem(PERSISTENCE_KEY, JSON.stringify(state)).catch(console.error);
}}>
<Switch.Navigator
screenOptions={{ headerShown: false }}
initialRouteName="main"
id={undefined}>
{Redirect && <Switch.Screen name="redirect" component={Redirect} />}
{Search && <Switch.Screen name="searchNavigator" component={Search} />}
<Switch.Screen name="main" component={TabNavigator} />
</Switch.Navigator>
<StatusBar style={themeName === 'light' ? 'dark' : 'light'} />
</NavigationContainer>
</GestureHandlerRootView>
);
}
4 changes: 3 additions & 1 deletion apps/bare-expo/android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
Expand Down Expand Up @@ -30,6 +31,7 @@
</intent>
</queries>
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:requestLegacyExternalStorage="true" android:networkSecurityConfig="@xml/network_security_config" android:fullBackupContent="@xml/secure_store_backup_rules" android:dataExtractionRules="@xml/secure_store_data_extraction_rules" android:supportsRtl="true">
<meta-data android:name="expo.modules.location.foreground_service_icon" android:resource="@drawable/location_foreground_service_icon"/>
<meta-data android:name="expo.modules.notifications.default_notification_color" android:resource="@color/notification_icon_color"/>
<meta-data android:name="expo.modules.notifications.default_notification_icon" android:resource="@drawable/notification_icon"/>
<meta-data android:name="expo.modules.updates.ENABLED" android:value="true"/>
Expand All @@ -42,7 +44,7 @@
<action android:name="androidx.media3.session.MediaSessionService"/>
</intent-filter>
</service>
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode" android:launchMode="singleTask" android:theme="@style/Theme.App.SplashScreen" android:windowSoftInputMode="adjustResize" android:exported="true" android:supportsPictureInPicture="true">
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode|smallestScreenSize" android:launchMode="singleTask" android:theme="@style/Theme.App.SplashScreen" android:windowSoftInputMode="adjustResize" android:exported="true" android:supportsPictureInPicture="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class MainApplication : Application(), ReactApplication {
ExpoReactHostFactory.getDefaultReactHost(
context = applicationContext,
packageList =
PackageList(this).packages.apply {
expo.modules.benchmark.withBenchmarkingPackages(PackageList(this).packages).apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
// add(MyReactNativePackage())
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion apps/bare-expo/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@
"expo-location",
{
"isAndroidBackgroundLocationEnabled": true,
"isIosBackgroundLocationEnabled": true
"isIosBackgroundLocationEnabled": true,
"androidForegroundServiceIcon": "./assets/location_service_icon.png"
}
],
[
Expand Down
Binary file added apps/bare-expo/assets/location_service_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions apps/bare-expo/e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
- `brew install oxipng` for image compression
- run `yarn install` in `bare-expo/e2e/image-comparison`
- (optional, recommended) Alignment with devices which are used in CI ([iOS](https://github.com/expo/expo/blob/051a306ce7c5b875f7398450e5aeec2e52e313ae/apps/bare-expo/scripts/start-ios-e2e-test.ts#L18), [Android](https://github.com/expo/expo/blob/051a306ce7c5b875f7398450e5aeec2e52e313ae/.github/actions/use-android-emulator/action.yml#L48)). This is necessary for assertions on what is visible on the screen and (especially) for view shots to match.
- (optional, recommended) Build the iOS screen inspector - run `./scripts/build.sh` in `bare-expo/e2e/image-comparison/inspector`. You can learn more about the inspector in its [README.md](./image-comparison/inspector/README.md)
- use the following commands to generate the Android emulator:

```bash
Expand Down
5 changes: 5 additions & 0 deletions apps/bare-expo/e2e/_nested-flows/viewshot-comparison.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@

appId: dev.expo.Payments
---
- extendedWaitUntil:
visible:
id: ${testID}
timeout: 10000

- runScript:
file: ./compare-images-http.js
env:
Expand Down
32 changes: 32 additions & 0 deletions apps/bare-expo/e2e/expo-video/fullscreen-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Tests whether the fullscreen opens, and if appropriate events were sent
appId: dev.expo.Payments
jsEngine: graaljs
---
- openLink: bareexpo://components/video/fullscreen

- tapOn: "Enter Fullscreen"
- runFlow:
when:
platform: Android
commands:
# Dismiss the android system fullscreen instruction popup
- tapOn:
text: "Got it"
optional: true
- assertVisible:
id: "dev.expo.payments:id/exo_content_frame"
- runFlow:
when:
platform: iOS
commands:
- assertVisible: "Video"

- assertNotVisible: "Enter Fullscreen"
- tapOn:
point: '${maestro.platform == "android" ? "94%,97%" : "11%,10%"}'
delay: 400
repeat: 2

- assertVisible: "Enter Fullscreen"
- assertVisible: "0 = onFullscreenEnter"
- assertVisible: "1 = onFullscreenExit"
28 changes: 28 additions & 0 deletions apps/bare-expo/e2e/expo-video/picture-in-picture-test.android.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Tests whether the fullscreen opens, and if appropriate events were sent
appId: dev.expo.Payments
jsEngine: graaljs
---
- openLink: bareexpo://components/video/pip

- tapOn:
text: 'e2e pause'
- tapOn:
text: 'Enter Picture In Picture'
# We cannot do a view-shot check while in pip, because the VideoView with testID is removed when entering.
# We can be pretty sure we've successfully entered PiP when it's gone though
- assertNotVisible:
id: 'pip-view'

# Important! If you are running this locally and the test fails, it may mean that at some point you have manually shifted the pip window position or size.
# The PiP window position/size is remembered across app and device restarts. So you may have to clean the emulator data to restore the original pip window position.
- tapOn:
point: 68%,68%
repeat: 2
delay: 700
# Make sure the view hierarchy was restored
- runFlow:
file: ../_nested-flows/viewshot-comparison.yaml
env:
screenshotOutputPath: 'expo-video/screenshots/pip-1'
testID: 'pip-view'
mode: 'keep-originals'
42 changes: 42 additions & 0 deletions apps/bare-expo/e2e/expo-video/playback-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
appId: dev.expo.Payments
jsEngine: graaljs
---
# when devving, start from different screen so state is reset
#- openLink: bareexpo://components
- openLink: bareexpo://components/video/events

- assertVisible: 'source = Big Buck Bunny'
- assertVisible: 'isPlaying = false'
- assertVisible: 'isAtStart = true'
- assertVisible: 'duration = 596'
- assertVisible: 'currentTime = 0'
- assertVisible: 'mimeType = video/avc'
- assertVisible: 'isSupported = true'
- assertVisible: 'bitratePositive = true'
- assertVisible: 'volume = 1'
- assertVisible: 'status = readyToPlay'
- assertVisible: 'playbackRate = 1'
- assertVisible: 'error = false'

- tapOn: Play

- assertVisible: 'isPlaying = true'
- assertVisible: 'isAtStart = false'

- tapOn: Pause
- tapOn: Seek to 30s
- assertVisible: 'currentTime = 30'
- runFlow:
file: ../_nested-flows/viewshot-comparison.yaml
env:
screenshotOutputPath: 'expo-video/screenshots/playback-test-1'
testID: 'video-view'
mode: 'keep-originals'

- tapOn: Trigger an Error

- assertVisible: 'source = No title'
- assertVisible: 'isPlaying = false'

- assertVisible: 'status = error'
- assertVisible: 'error = true'
Loading
Loading