Skip to content
This repository was archived by the owner on Aug 6, 2026. It is now read-only.

Commit 9284b42

Browse files
chore(mobile): Upgrade to Expo 57
Keep the workspace on React 19.2 while aligning mobile with the latest supported native runtime. Generated-By: PostHog Code Task-Id: c1bbe3cf-742b-4b24-bf96-d11a18b4cf22
1 parent 38e8dc7 commit 9284b42

7 files changed

Lines changed: 2864 additions & 3351 deletions

File tree

‎apps/code/package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,8 @@
145145
"node-pty": "1.1.0",
146146
"posthog-node": "^5.35.6",
147147
"radix-themes-tw": "0.2.3",
148-
"react": "19.1.0",
149-
"react-dom": "19.1.0",
148+
"react": "19.2.6",
149+
"react-dom": "19.2.6",
150150
"react-hotkeys-hook": "^4.4.4",
151151
"react-scan": "^0.5.6",
152152
"reflect-metadata": "^0.2.2",

‎apps/mobile/app.json‎

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,8 @@
55
"version": "1.0.0",
66
"orientation": "portrait",
77
"userInterfaceStyle": "automatic",
8-
"newArchEnabled": true,
9-
"bundler": "metro",
108
"scheme": "posthog",
119
"icon": "./assets/app-icon.png",
12-
"splash": {
13-
"image": "./assets/splash-icon.png",
14-
"resizeMode": "contain",
15-
"backgroundColor": "#0f0f0f"
16-
},
1710
"ios": {
1811
"icon": "./assets/app.icon",
1912
"supportsTablet": true,
@@ -33,7 +26,6 @@
3326
"foregroundImage": "./assets/adaptive-icon.png",
3427
"backgroundColor": "#FFFFFF"
3528
},
36-
"edgeToEdgeEnabled": true,
3729
"predictiveBackGestureEnabled": false,
3830
"package": "com.posthog.code.mobile",
3931
"permissions": [
@@ -60,12 +52,7 @@
6052
},
6153
"plugins": [
6254
"expo-router",
63-
[
64-
"expo-av",
65-
{
66-
"microphonePermission": "Allow PostHog to use your microphone for voice-to-text input"
67-
}
68-
],
55+
"expo-audio",
6956
[
7057
"expo-camera",
7158
{
@@ -120,7 +107,18 @@
120107
"microphonePermission": "Allow PostHog to use your microphone for voice-to-text input",
121108
"speechRecognitionPermission": "Allow PostHog to transcribe your voice input on-device"
122109
}
123-
]
110+
],
111+
"expo-secure-store",
112+
[
113+
"expo-splash-screen",
114+
{
115+
"image": "./assets/splash-icon.png",
116+
"resizeMode": "contain",
117+
"backgroundColor": "#0f0f0f"
118+
}
119+
],
120+
"expo-status-bar",
121+
"expo-web-browser"
124122
],
125123
"extra": {
126124
"router": {},

‎apps/mobile/package.json‎

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,25 @@
2323
"format": "biome format --write .",
2424
"clean": "node ../../scripts/rimraf.mjs .turbo .expo"
2525
},
26+
"expo": {
27+
"doctor": {
28+
"reactNativeDirectoryCheck": {
29+
"exclude": [
30+
"posthog-react-native-session-replay"
31+
]
32+
}
33+
},
34+
"install": {
35+
"exclude": [
36+
"react",
37+
"react-dom",
38+
"typescript"
39+
]
40+
}
41+
},
2642
"dependencies": {
27-
"@expo/ui": "0.2.0-beta.9",
43+
"@expo/metro-runtime": "~57.0.7",
44+
"@expo/ui": "57.0.7",
2845
"@modelcontextprotocol/ext-apps": "^1.2.2",
2946
"@modelcontextprotocol/sdk": "^1.29.0",
3047
"@posthog/api-client": "workspace:*",
@@ -34,48 +51,49 @@
3451
"@react-native-community/netinfo": "^12.0.1",
3552
"@tanstack/react-query": "^5.90.12",
3653
"date-fns": "^4.1.0",
37-
"expo": "~54.0.27",
38-
"expo-application": "~7.0.8",
39-
"expo-auth-session": "^7.0.10",
40-
"expo-av": "~16.0.8",
41-
"expo-camera": "^55.0.15",
42-
"expo-clipboard": "^55.0.13",
43-
"expo-constants": "~18.0.11",
44-
"expo-crypto": "^15.0.8",
45-
"expo-dev-client": "~6.0.20",
46-
"expo-device": "~8.0.10",
47-
"expo-document-picker": "~14.0.8",
48-
"expo-file-system": "~19.0.21",
49-
"expo-font": "^14.0.10",
50-
"expo-glass-effect": "~0.1.8",
51-
"expo-haptics": "^55.0.14",
52-
"expo-image-picker": "~17.0.11",
53-
"expo-linear-gradient": "^15.0.8",
54-
"expo-linking": "~8.0.10",
55-
"expo-localization": "~17.0.8",
56-
"expo-notifications": "~0.32.12",
57-
"expo-router": "~6.0.17",
58-
"expo-secure-store": "^15.0.8",
59-
"expo-speech-recognition": "^3.1.2",
60-
"expo-splash-screen": "~31.0.12",
61-
"expo-status-bar": "~3.0.9",
62-
"expo-system-ui": "~6.0.9",
63-
"expo-web-browser": "^15.0.10",
54+
"expo": "~57.0.8",
55+
"expo-application": "~57.0.2",
56+
"expo-audio": "~57.0.3",
57+
"expo-auth-session": "^57.0.5",
58+
"expo-camera": "^57.0.3",
59+
"expo-clipboard": "^57.0.1",
60+
"expo-constants": "~57.0.7",
61+
"expo-crypto": "^57.0.1",
62+
"expo-dev-client": "~57.0.9",
63+
"expo-device": "~57.0.1",
64+
"expo-document-picker": "~57.0.1",
65+
"expo-file-system": "~57.0.1",
66+
"expo-font": "^57.0.1",
67+
"expo-glass-effect": "~57.0.1",
68+
"expo-haptics": "^57.0.1",
69+
"expo-image-picker": "~57.0.6",
70+
"expo-linear-gradient": "^57.0.1",
71+
"expo-linking": "~57.0.4",
72+
"expo-localization": "~57.0.1",
73+
"expo-notifications": "~57.0.7",
74+
"expo-router": "~57.0.8",
75+
"expo-secure-store": "^57.0.1",
76+
"expo-speech-recognition": "^56.0.1",
77+
"expo-splash-screen": "~57.0.5",
78+
"expo-status-bar": "~57.0.1",
79+
"expo-system-ui": "~57.0.1",
80+
"expo-web-browser": "^57.0.2",
6481
"highlight.js": "^11.11.1",
6582
"nativewind": "^4.2.1",
6683
"phosphor-react-native": "^3.0.2",
6784
"posthog-react-native": "^4.18.0",
6885
"posthog-react-native-session-replay": "^1.6.0",
69-
"react": "19.1.0",
70-
"react-dom": "19.1.0",
71-
"react-native": "0.81.5",
72-
"react-native-keyboard-controller": "1.18.5",
73-
"react-native-reanimated": "~4.1.1",
74-
"react-native-safe-area-context": "~5.6.2",
75-
"react-native-screens": "~4.16.0",
76-
"react-native-svg": "^15.15.1",
86+
"react": "catalog:",
87+
"react-dom": "catalog:",
88+
"react-native": "0.86.0",
89+
"react-native-keyboard-controller": "1.21.9",
90+
"react-native-reanimated": "~4.5.0",
91+
"react-native-safe-area-context": "~5.7.0",
92+
"react-native-screens": "~4.26.2",
93+
"react-native-svg": "^15.15.4",
7794
"react-native-web": "^0.21.2",
78-
"react-native-webview": "^13.13.5",
95+
"react-native-webview": "^13.16.1",
96+
"react-native-worklets": "0.10.0",
7997
"zustand": "^4.5.7"
8098
},
8199
"devDependencies": {
@@ -84,7 +102,7 @@
84102
"@types/react-test-renderer": "^19.1.0",
85103
"@vitejs/plugin-react": "^4.7.0",
86104
"react-native-svg-transformer": "^1.5.3",
87-
"react-test-renderer": "19.1.0",
105+
"react-test-renderer": "19.2.6",
88106
"tailwindcss": "^3.4.18",
89107
"typescript": "~5.9.2",
90108
"vite": "^6.4.1",

‎apps/mobile/src/features/tasks/utils/sounds.ts‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Audio } from "expo-av";
1+
import { createAudioPlayer, setAudioModeAsync } from "expo-audio";
22
import {
33
type CompletionSound,
44
usePreferencesStore,
@@ -36,7 +36,7 @@ let audioModeConfigured = false;
3636

3737
async function ensureAudioMode(): Promise<void> {
3838
if (audioModeConfigured) return;
39-
await Audio.setAudioModeAsync({ playsInSilentModeIOS: true });
39+
await setAudioModeAsync({ playsInSilentMode: true });
4040
audioModeConfigured = true;
4141
}
4242

@@ -49,15 +49,15 @@ export async function playCompletionSound(
4949
const which = sound ?? prefs.completionSound;
5050
const vol = (volume ?? prefs.completionVolume) / 100;
5151
await ensureAudioMode();
52-
const { sound: player } = await Audio.Sound.createAsync(SOUND_ASSETS[which], {
53-
shouldPlay: true,
54-
volume: Math.max(0, Math.min(1, vol)),
55-
rate: playbackRate,
56-
shouldCorrectPitch: false,
57-
});
58-
player.setOnPlaybackStatusUpdate((status) => {
59-
if (status.isLoaded && status.didJustFinish) {
60-
player.unloadAsync();
52+
const player = createAudioPlayer(SOUND_ASSETS[which]);
53+
player.volume = Math.max(0, Math.min(1, vol));
54+
player.shouldCorrectPitch = false;
55+
player.playbackRate = playbackRate;
56+
const subscription = player.addListener("playbackStatusUpdate", (status) => {
57+
if (status.didJustFinish) {
58+
subscription.remove();
59+
player.remove();
6160
}
6261
});
62+
player.play();
6363
}

‎apps/web/package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
"@trpc/server": "^11.17.0",
3030
"@trpc/tanstack-react-query": "^11.17.0",
3131
"inversify": "^7.10.6",
32-
"react": "19.1.0",
33-
"react-dom": "19.1.0",
32+
"react": "19.2.6",
33+
"react-dom": "19.2.6",
3434
"reflect-metadata": "^0.2.2",
3535
"superjson": "catalog:",
3636
"zod": "^4.4.3"

0 commit comments

Comments
 (0)