Skip to content

chore: upgrade expo 54#1655

Closed
cimigree wants to merge 17 commits into
developfrom
chore/upgrade-expo-54
Closed

chore: upgrade expo 54#1655
cimigree wants to merge 17 commits into
developfrom
chore/upgrade-expo-54

Conversation

@cimigree

@cimigree cimigree commented Jan 13, 2026

Copy link
Copy Markdown
Contributor

closes #1647
stacked on top of #1651

Upgrades to Expo 54, the last Expo upgrade that does not force the new architecture.

The biggest differences are related to

  1. using edge to edge on Android, so I had to add some SafeAreaViews using 'react-native-safe-area-context' (SafeAreaView from react-native is deprecated) and adjust some of the views that involve keyboards -- the password setting screens and the observation create screen. The status bar is now colored dark and has a white background. The navigation bar is now colored medium grey, which matches what it used to be and is more noticeable and useful on my Samsung (that has a navigation bar) than the Pixel 8 in most of the photos.
  2. the expo/file-system being deprecated, so we have to use a legacy version, which we can do at least through Expo 55.

Small Changes

  1. Some other small changes were necessary, like upgrading the node version locally, but it was actually correct in our .nvmrc file
  2. I adjusted some of the tests to try to be less flakey by using different categories -- ones that are more centrally located on the first screen.
  3. I used a useEffect in input passcode because I was getting warnings there from the react compiler
  4. I changed the key in the keyboard accessory because using index is not recommended

Screenshots of Google Pixel 8a

image image image image image image image

Screenshot of Samsung A25

image

FYI:

I tested on all my emulators in Android studio with various sizes of phone from Android 30 - 35.

@awana-lockfile-bot

awana-lockfile-bot Bot commented Jan 13, 2026

Copy link
Copy Markdown

package-lock.json changes

Summary

Status Count
ADDED 46
UPDATED 117
DOWNGRADED 20
REMOVED 60
Click to toggle table visibility
Name Status Previous Current
@babel/plugin-proposal-private-methods ADDED - 7.18.6
@babel/preset-react UPDATED 7.27.1 7.28.5
@esbuild/aix-ppc64 ADDED - 0.27.2
@esbuild/android-arm ADDED - 0.27.2
@esbuild/android-arm64 ADDED - 0.27.2
@esbuild/android-x64 ADDED - 0.27.2
@esbuild/darwin-arm64 ADDED - 0.27.2
@esbuild/darwin-x64 ADDED - 0.27.2
@esbuild/freebsd-arm64 ADDED - 0.27.2
@esbuild/freebsd-x64 ADDED - 0.27.2
@esbuild/linux-arm ADDED - 0.27.2
@esbuild/linux-arm64 ADDED - 0.27.2
@esbuild/linux-ia32 ADDED - 0.27.2
@esbuild/linux-loong64 ADDED - 0.27.2
@esbuild/linux-mips64el ADDED - 0.27.2
@esbuild/linux-ppc64 ADDED - 0.27.2
@esbuild/linux-riscv64 ADDED - 0.27.2
@esbuild/linux-s390x ADDED - 0.27.2
@esbuild/linux-x64 ADDED - 0.27.2
@esbuild/netbsd-arm64 ADDED - 0.27.2
@esbuild/netbsd-x64 ADDED - 0.27.2
@esbuild/openbsd-arm64 ADDED - 0.27.2
@esbuild/openbsd-x64 ADDED - 0.27.2
@esbuild/openharmony-arm64 ADDED - 0.27.2
@esbuild/sunos-x64 ADDED - 0.27.2
@esbuild/win32-arm64 ADDED - 0.27.2
@esbuild/win32-ia32 ADDED - 0.27.2
@esbuild/win32-x64 ADDED - 0.27.2
@expo/cli UPDATED 0.24.21 54.0.21
@expo/code-signing-certificates UPDATED 0.0.5 0.0.6
@expo/config-plugins UPDATED 10.1.2 54.0.4
@expo/config-types UPDATED 53.0.5 54.0.10
@expo/config UPDATED 11.0.13 12.0.13
@expo/devcert UPDATED 1.2.0 1.2.1
@expo/devtools ADDED - 0.1.8
@expo/env UPDATED 1.0.7 2.0.8
@expo/fingerprint UPDATED 0.13.4 0.15.4
@expo/image-utils UPDATED 0.7.6 0.8.8
@expo/json-file UPDATED 9.1.5 10.0.8
@expo/metro-config UPDATED 0.20.17 54.0.13
@expo/metro ADDED - 54.2.0
@expo/osascript UPDATED 2.3.7 2.3.8
@expo/package-manager UPDATED 1.9.8 1.9.9
@expo/plist UPDATED 0.3.5 0.4.8
@expo/prebuild-config UPDATED 9.0.12 54.0.8
@expo/schema-utils UPDATED 0.1.7 0.1.8
@expo/vector-icons UPDATED 14.0.4 15.0.3
@inquirer/ansi ADDED - 1.0.2
@inquirer/external-editor ADDED - 1.0.3
@inquirer/figures UPDATED 1.0.11 1.0.15
@isaacs/balanced-match ADDED - 4.0.1
@isaacs/brace-expansion ADDED - 5.0.0
@jest/core DOWNGRADED 30.1.3 29.7.0
@jest/diff-sequences UPDATED 30.0.0 30.0.1
@jest/get-type REMOVED 30.0.0 -
@jest/pattern UPDATED 30.0.0 30.0.1
@jest/reporters DOWNGRADED 30.1.3 29.7.0
@jest/snapshot-utils REMOVED 30.1.2 -
@jest/source-map DOWNGRADED 30.0.1 29.6.3
@jest/test-sequencer DOWNGRADED 30.1.3 29.7.0
@pkgr/core REMOVED 0.2.9 -
@react-native/assets-registry UPDATED 0.79.5 0.81.5
@react-native/community-cli-plugin UPDATED 0.79.5 0.81.5
@react-native/debugger-frontend UPDATED 0.79.6 0.81.5
@react-native/dev-middleware UPDATED 0.79.6 0.81.5
@react-native/gradle-plugin UPDATED 0.79.5 0.81.5
@react-native/normalize-colors UPDATED 0.79.6 0.81.5
@react-native/virtualized-lists ADDED - 0.81.5
@types/eslint-scope REMOVED 3.7.7 -
@types/eslint REMOVED 9.6.1 -
@types/jest DOWNGRADED 30.0.0 29.5.14
@types/react UPDATED 19.0.10 19.1.10
@unrs/resolver-binding-android-arm-eabi REMOVED 1.11.0 -
@unrs/resolver-binding-android-arm64 REMOVED 1.11.0 -
@unrs/resolver-binding-darwin-arm64 REMOVED 1.11.0 -
@unrs/resolver-binding-darwin-x64 REMOVED 1.11.0 -
@unrs/resolver-binding-freebsd-x64 REMOVED 1.11.0 -
@unrs/resolver-binding-linux-arm-gnueabihf REMOVED 1.11.0 -
@unrs/resolver-binding-linux-arm-musleabihf REMOVED 1.11.0 -
@unrs/resolver-binding-linux-arm64-gnu REMOVED 1.11.0 -
@unrs/resolver-binding-linux-arm64-musl REMOVED 1.11.0 -
@unrs/resolver-binding-linux-ppc64-gnu REMOVED 1.11.0 -
@unrs/resolver-binding-linux-riscv64-gnu REMOVED 1.11.0 -
@unrs/resolver-binding-linux-riscv64-musl REMOVED 1.11.0 -
@unrs/resolver-binding-linux-s390x-gnu REMOVED 1.11.0 -
@unrs/resolver-binding-linux-x64-gnu REMOVED 1.11.0 -
@unrs/resolver-binding-linux-x64-musl REMOVED 1.11.0 -
@unrs/resolver-binding-wasm32-wasi REMOVED 1.11.0 -
@unrs/resolver-binding-win32-arm64-msvc REMOVED 1.11.0 -
@unrs/resolver-binding-win32-ia32-msvc REMOVED 1.11.0 -
@unrs/resolver-binding-win32-x64-msvc REMOVED 1.11.0 -
@wdio/cli UPDATED 9.12.7 9.23.0
@wdio/config UPDATED 9.12.6 9.23.0
@wdio/logger UPDATED 9.4.4 9.18.0
@wdio/protocols UPDATED 9.12.5 9.16.2
@wdio/repl UPDATED 9.4.4 9.16.2
@wdio/utils UPDATED 9.12.6 9.23.0
@webassemblyjs/ast REMOVED 1.14.1 -
@webassemblyjs/floating-point-hex-parser REMOVED 1.13.2 -
@webassemblyjs/helper-api-error REMOVED 1.13.2 -
@webassemblyjs/helper-buffer REMOVED 1.14.1 -
@webassemblyjs/helper-numbers REMOVED 1.13.2 -
@webassemblyjs/helper-wasm-bytecode REMOVED 1.13.2 -
@webassemblyjs/helper-wasm-section REMOVED 1.14.1 -
@webassemblyjs/ieee754 REMOVED 1.13.2 -
@webassemblyjs/leb128 REMOVED 1.13.2 -
@webassemblyjs/utf8 REMOVED 1.13.2 -
@webassemblyjs/wasm-edit REMOVED 1.14.1 -
@webassemblyjs/wasm-gen REMOVED 1.14.1 -
@webassemblyjs/wasm-opt REMOVED 1.14.1 -
@webassemblyjs/wasm-parser REMOVED 1.14.1 -
@webassemblyjs/wast-printer REMOVED 1.14.1 -
@xtuc/ieee754 REMOVED 1.2.0 -
@xtuc/long REMOVED 4.2.2 -
@zip.js/zip.js UPDATED 2.7.60 2.8.14
acorn-import-phases REMOVED 1.0.4 -
acorn-loose REMOVED 8.5.2 -
babel-plugin-react-compiler ADDED - 1.0.0
babel-plugin-react-native-web REMOVED 0.19.13 -
babel-preset-expo UPDATED 13.2.4 54.0.9
chrome-trace-event REMOVED 1.0.4 -
cjs-module-lexer DOWNGRADED 2.1.0 1.4.3
create-wdio ADDED - 9.21.0
decamelize UPDATED 6.0.0 6.0.1
dedent UPDATED 1.6.0 1.7.1
detect-libc UPDATED 1.0.3 2.1.2
edgedriver UPDATED 6.1.1 6.3.0
enhanced-resolve REMOVED 5.18.3 -
es-module-lexer REMOVED 1.7.0 -
esbuild UPDATED 0.25.2 0.27.2
eslint-plugin-react-compiler ADDED - 19.1.0-rc.2
exit-x REMOVED 0.2.2 -
expo-application UPDATED 6.1.5 7.0.8
expo-asset UPDATED 11.1.7 12.0.12
expo-av UPDATED 15.1.7 16.0.8
expo-build-properties UPDATED 0.14.8 1.0.10
expo-camera UPDATED 16.1.11 17.0.10
expo-constants UPDATED 17.1.7 18.0.13
expo-crypto UPDATED 14.1.5 15.0.8
expo-dev-client UPDATED 5.2.4 6.0.20
expo-dev-launcher UPDATED 5.1.16 6.0.20
expo-dev-menu-interface UPDATED 1.10.0 2.0.0
expo-dev-menu UPDATED 6.1.14 7.0.18
expo-device UPDATED 7.1.4 8.0.10
expo-document-picker UPDATED 13.1.6 14.0.8
expo-file-system UPDATED 18.1.11 19.0.21
expo-font UPDATED 13.3.2 14.0.10
expo-image-loader UPDATED 5.1.0 6.0.0
expo-image-manipulator UPDATED 13.1.7 14.0.8
expo-image UPDATED 2.4.0 3.0.11
expo-keep-awake ADDED - 15.0.8
expo-localization UPDATED 16.1.6 17.0.8
expo-location UPDATED 18.1.6 19.0.8
expo-manifests UPDATED 0.16.6 1.0.10
expo-modules-autolinking UPDATED 2.1.14 3.0.24
expo-modules-core UPDATED 2.5.0 3.0.29
expo-secure-store UPDATED 14.2.4 15.0.8
expo-sensors UPDATED 14.1.4 15.0.8
expo-server ADDED - 1.0.5
expo-splash-screen UPDATED 0.30.10 31.0.13
expo-system-ui UPDATED 5.0.11 6.0.9
expo-task-manager UPDATED 13.1.6 14.0.9
expo-updates-interface UPDATED 1.1.0 2.0.0
expo UPDATED 53.0.22 54.0.31
fast-xml-parser UPDATED 4.5.3 5.3.3
fdir ADDED - 6.5.0
get-tsconfig UPDATED 4.10.0 4.13.0
glob-to-regexp REMOVED 0.4.1 -
inquirer UPDATED 11.1.0 12.11.1
istanbul-lib-source-maps DOWNGRADED 5.0.6 4.0.1
istanbul-reports UPDATED 3.1.7 3.2.0
jake UPDATED 10.9.2 10.9.4
jest-changed-files DOWNGRADED 30.0.5 29.7.0
jest-circus DOWNGRADED 30.1.3 29.7.0
jest-cli DOWNGRADED 30.1.3 29.7.0
jest-config DOWNGRADED 30.1.3 29.7.0
jest-docblock DOWNGRADED 30.0.1 29.7.0
jest-each DOWNGRADED 30.1.0 29.7.0
jest-expo UPDATED 53.0.5 54.0.16
jest-leak-detector DOWNGRADED 30.1.0 29.7.0
jest-resolve-dependencies DOWNGRADED 30.1.3 29.7.0
jest-resolve DOWNGRADED 30.1.3 29.7.0
jest-runner DOWNGRADED 30.1.3 29.7.0
jest-runtime DOWNGRADED 30.1.3 29.7.0
jest DOWNGRADED 30.1.3 29.7.0
lightningcss-android-arm64 ADDED - 1.30.2
lightningcss-darwin-arm64 UPDATED 1.27.0 1.30.2
lightningcss-darwin-x64 UPDATED 1.27.0 1.30.2
lightningcss-freebsd-x64 UPDATED 1.27.0 1.30.2
lightningcss-linux-arm-gnueabihf UPDATED 1.27.0 1.30.2
lightningcss-linux-arm64-gnu UPDATED 1.27.0 1.30.2
lightningcss-linux-arm64-musl UPDATED 1.27.0 1.30.2
lightningcss-linux-x64-gnu UPDATED 1.27.0 1.30.2
lightningcss-linux-x64-musl UPDATED 1.27.0 1.30.2
lightningcss-win32-arm64-msvc UPDATED 1.27.0 1.30.2
lightningcss-win32-x64-msvc UPDATED 1.27.0 1.30.2
lightningcss UPDATED 1.27.0 1.30.2
loader-runner REMOVED 4.3.0 -
metro-babel-transformer UPDATED 0.82.0 0.83.3
metro-cache-key UPDATED 0.82.0 0.83.3
metro-cache UPDATED 0.82.0 0.83.3
metro-core UPDATED 0.82.0 0.83.3
metro-file-map UPDATED 0.82.0 0.83.3
metro-minify-terser UPDATED 0.82.0 0.83.3
metro-resolver UPDATED 0.82.0 0.83.3
metro-source-map UPDATED 0.82.0 0.83.3
metro-symbolicate UPDATED 0.82.0 0.83.3
metro-transform-plugins UPDATED 0.82.0 0.83.3
metro-transform-worker UPDATED 0.82.0 0.83.3
metro UPDATED 0.82.0 0.83.3
mitt ADDED - 3.0.1
modern-tar ADDED - 0.7.3
napi-postinstall REMOVED 0.3.0 -
node-forge UPDATED 1.3.1 1.3.3
ob1 UPDATED 0.82.0 0.83.3
picomatch UPDATED 4.0.2 4.0.3
pure-rand DOWNGRADED 7.0.1 6.1.0
react-native-edge-to-edge REMOVED 1.6.0 -
react-native-reanimated UPDATED 3.19.0 3.19.5
react-native UPDATED 0.79.5 0.81.5
react-test-renderer UPDATED 19.0.0 19.1.0
react UPDATED 19.0.0 19.1.0
resolve-global ADDED - 1.0.0
run-async UPDATED 3.0.0 4.0.6
scheduler UPDATED 0.25.0 0.26.0
schema-utils REMOVED 4.3.3 -
send UPDATED 0.19.1 0.19.2
serve-static UPDATED 1.16.2 1.16.3
strnum UPDATED 1.1.2 2.1.2
sucrase UPDATED 3.35.0 3.35.1
synckit REMOVED 0.11.11 -
tapable REMOVED 2.3.0 -
terser-webpack-plugin REMOVED 5.3.14 -
tinyglobby ADDED - 0.2.15
tsx UPDATED 4.19.3 4.21.0
undici UPDATED 6.21.2 6.23.0
unimodules-app-loader UPDATED 5.1.3 6.0.8
unrs-resolver REMOVED 1.11.0 -
watchpack REMOVED 2.4.4 -
webpack-sources REMOVED 3.3.3 -
webpack REMOVED 5.102.0 -
yoctocolors-cjs UPDATED 2.1.2 2.1.3
zod-validation-error ADDED - 3.5.4

@socket-security

socket-security Bot commented Jan 13, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​@​types/​jest@​30.0.0 ⏵ 29.5.14100 +110077 +181100
Addednpm/​babel-plugin-react-compiler@​1.0.01001007997100
Updatednpm/​@​types/​react@​19.0.10 ⏵ 19.1.10100 +110080 +195100
Addednpm/​cheap-ruler@​4.0.010010010086100
Updatednpm/​babel-preset-expo@​13.2.4 ⏵ 54.0.997 +1100100100 +2100

View full report

@cimigree
cimigree requested a review from ErikSin January 14, 2026 21:36
@cimigree cimigree mentioned this pull request Jan 20, 2026

@ErikSin ErikSin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 blocking comments.

  1. On doing some reading, I think we need to do expo upgrade first before doing the compiler. It looks like the configuration is done for the compiler out of the box in expo 54.
  2. We should try to properly implement edge to edge. If you don't mind, I can try to take this on (and do it as a PR ontop of this PR)

Comment thread package.json
"@wdio/spec-reporter": "9.16.2",
"@wdio/types": "9.16.2",
"babel-jest": "30.0.4",
"babel-plugin-react-compiler": "1.0.0",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to expo, the compiler is already configured in expo 54. So we shouldn't need this.

export async function getExpoImageStorageSize(
imageURL: string,
): Promise<number> {
let fileInfo: FileSystem.FileInfo;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should keep this type definition


export function useKeyboardListener() {
const [keyboardVisible, setKeyboardVisible] = useState(false);
const [keyboardHeight, setKeyboardHeight] = useState(0);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is this change for?

Comment on lines +62 to +65
<SafeAreaView
edges={['bottom']}
style={{flex: 1, backgroundColor: MEDIUM_GREY}}>
<StatusBar barStyle="dark-content" />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should reconsider this. The push from Android is to have edge-to-edge-display. What your doing is adding a status bar to the edge-to-edge to make it look like it is not edge-to-edge.

I understand that this is probably the easiest way but I think we should spend time looking into how to properly implement edge to edge.

@cimigree cimigree closed this Jan 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade to Expo 54

2 participants