[Mobile] Expo SDK 57 upgrade: smoother mobile apps, plus a heads-up for plugin authors

Hi everyone,

I’m Amy, a product manager on the Mobile team.

Today, we’re upgrading the runtime that powers Bubble native mobile apps from Expo SDK 55 to Expo SDK 57, which also moves us from React Native 0.83 to 0.86. This is mostly an under-the-hood performance improvement, but there are a couple of things worth knowing, especially if you build plugins.

What this means for your apps

Nothing changes about how you build mobile apps on Bubble. Your editor, workflows, and elements all work exactly the same.

Your app’s end-users, on the other hand, should notice the difference. This upgrade brings smoother animations and better memory behavior during long sessions, particularly on older devices. These improvements come from performance work in React Native and Expo’s underlying libraries, and every app built on the new runtime gets them automatically.

One important change to be aware of: Expo SDK 57 raises the minimum supported iOS version to 16.4. Apps built after this upgrade won’t install on devices running anything older than that — in practice, that means the iPhone 7 and earlier. If a meaningful portion of your user base is on older hardware, this is worth factoring into your release planning.

Plugin developers: please read the changelog

Because we jumped two SDK versions (55 straight to 57), the dependency updates are substantial — and there’s a possibility that some plugins relying on these libraries will break.

If you’ve built a plugin that touches any of the packages below, please read through the full changelog, test your plugin against the new versions, and push an update if needed. Your users (and our support team) will thank you.

Here’s everything that changed:

Dependency updates

  • @expo/metro-runtime: ~55.0.6 → ~57.0.11

  • @react-native-community/datetimepicker: 8.6.0 → 9.1.0

  • @react-native-community/netinfo: 11.5.2 → 12.0.1

  • expo: ~55.0.7 → ^57.0.9

  • expo-apple-authentication: ~55.0.7 → ~57.0.1

  • expo-asset: ~55.0.9 → ~57.0.12

  • expo-audio: ~55.0.14 → ~57.0.3

  • expo-auth-session: ~55.0.8 → ~57.0.7

  • expo-blur: ~55.0.10 → ~57.0.2

  • expo-camera: ~55.0.10 → ~57.0.3

  • expo-clipboard: ~55.0.9 → ~57.0.1

  • expo-constants: ~55.0.8 → ~57.0.12

  • expo-crypto: ~55.0.10 → ~57.0.1

  • expo-document-picker: ~55.0.9 → ~57.0.1

  • expo-file-system: ~55.0.11 → ~57.0.4

  • expo-image: ~55.0.6 → ~57.0.3

  • expo-image-manipulator: ~55.0.11 → ~57.0.11

  • expo-image-picker: ~55.0.13 → ~57.0.11

  • expo-linear-gradient: ~55.0.9 → ~57.0.1

  • expo-linking: ~55.0.7 → ~57.0.6

  • expo-location: ~55.1.3 → ~57.0.11

  • expo-media-library: ~55.0.10 → ~57.0.4

  • expo-notifications: ~55.0.13 → ~57.0.12

  • expo-secure-store: ~55.0.9 → ~57.0.1

  • expo-sharing: ~55.0.19 → ~57.0.13

  • expo-splash-screen: ~55.0.11 → ~57.0.7

  • expo-status-bar: ~55.0.4 → ~57.0.1

  • expo-updates: ~55.0.14 → ~57.0.15

  • expo-video: ~55.0.11 → ~57.0.2

  • expo-web-browser: ~55.0.10 → ~57.0.2

  • react: 19.2.0 → 19.2.3

  • react-dom: 19.2.0 → 19.2.3

  • react-native: 0.83.2 → 0.86.2

  • react-native-gesture-handler: ~2.30.0 → ~2.32.0

  • react-native-reanimated: 4.2.1 → 4.5.1

  • react-native-screens: ~4.23.0 → ~4.26.0

  • react-native-svg: 15.15.3 → 15.15.4

  • react-native-webview: 13.16.0 → 13.16.1

  • react-native-worklets: 0.7.2 → 0.10.1

  • @react-native/metro-config: ^0.81.6 → ^0.86.2

  • @types/react-dom: ~19.1.0 → ~19.2.3

  • babel-preset-expo: ^54.0.8 → ~57.0.0

  • metro: ^0.83.3 → ^0.84.4

  • metro-transform-worker: ^0.83.3 → ^0.84.4

New packages

  • expo-glass-effect: ^57.0.1

  • expo-modules-core: ^57.0.11

Wrapping up

Runtime upgrades like this one are a big part of how we keep Bubble mobile apps feeling fast and reliable as the underlying ecosystem evolves. If you’re a plugin author, carve out some time to review the changelog above. And if you run into any unexpected behavior with your app or a plugin after building on the new runtime, let us know below or reach out to our support team so we can help track it down.

Happy building!

— Amy and the Mobile team

It’s wonderful! I also notice reduced opening times!!

Hello :waving_hand:

As a plugin author, I have a few questions since I’ve been away for a while waiting for updates to the native plugin editor.

  1. Are gestures (drag, drop, i.e touch actions) now supported? If they are not supported, is there is a timeline on that?
  2. Is there a timeline on being able to install new packages?
  3. Is there up-to-date documentation on the mobile plugin editor?

Thank you very much,

Jonah

Hi Jonah!

  1. Gestures are not directly available in Bubble yet but if you are looking to build these gestures into your plugins, they are available through react-native-gesture-handler or Pressable from react-native
  2. Yes, we are working on this and you should be able to install new packages this month
  3. Similarly, we should have an updated documentation specifically covering mobile plugin creation sometimes this month

Stay tuned! Let us know if you have more questions!

Thank you Amy for your answers. I had asked #1 because although the documentation said it was available, react-native-gesture-handler was only working for Press events but not for dragging or dropping. I’m wondering if that was addressed or was it just not known by the team yet.

Happy to hear #2 and #3 is coming along!

Can you describe what your implementation looks like? Do you have an example plugin you can show us where you tried to implement it and it wasn’t working?

Yes I can. Here is a plugin I created this year: Photo Picker Grid Plugin | Bubble

I wanted to create a grid where the user defines how many rows and columns they want, and then they can select photos from their device. Once the photos are selected, they can press and hold and drag to reorder the photos in the grid. Once the photos are in the desired order, they can click a save button which uploads the files or sends the updated list using an element action.

Unfortunately, I was stopped at the dragging functionality. As of right now (I haven’t checked in about 6 months to be honest) it seems only the Press gesture works. Drag / drop and other gestures aren’t working. I even created a new element with just a simple square to test gestures, and I confirmed that only Press was working and not the other gestures.

This is my use case. I think supporting more gestures would help make native apps feel more native, and not just wrapped web apps.

Thank you very much @amy.zhong for your time :slight_smile: It’s much appreciated.

Hi, I’m wondering if anyone else has experienced similar issues since this SDK update.

I created a new native mobile build yesterday, and since then I’ve been experiencing several rendering/UI issues that were not happening with the previous build:

  • Screen rendering sometimes stutters and feels noticeably less smooth, especially when switching between tabs.
  • Floating Groups occasionally appear in the wrong position
  • Some content that should appear immediately takes noticeably longer to show up.
  • Overall, UI elements seem to render inconsistently or with a delay across multiple parts of the app.

One thing I’ve noticed is that these issues seem to occur more frequently after navigating between different views several times. The app may initially behave normally, but after moving back and forth between views a few times, the rendering/layout issues seem to become more noticeable and occur more often.

I didn’t make any significant changes to the affected UI elements or workflows before these issues started, and everything was working normally before the new build.

Since the timing seems to line up with this SDK update, I’m wondering if there could be a connection.

I’ve already submitted a bug report to Bubble Support with the details.

Has anyone else noticed similar rendering, layout, or performance issues after creating a new build since this update?

Thanks for the detailed update, Amy! This is a great improvement for Bubble native mobile apps. The performance enhancements and smoother experience will definitely be valuable, especially for users on older devices.

The iOS 16.4 requirement is also an important point for developers to consider when planning future releases. For plugin developers, the SDK 55 → 57 jump and dependency changes make thorough testing essential.

Thanks to you and the Mobile team for keeping the runtime modern and improving the overall mobile experience. Looking forward to building with the new runtime! :rocket:

Hi @shubiz! Sorry to hear about the issue. Are you able to share your app ID so we can take a closer look at your specific app? Feel free to DM me or post it here. Also what browser and OS are you using? Do you experience the same issue on a different browser?

Thanks for looking into this! I’ll send you a DM with my app ID and the details.

Hi Amy, just following up on this — I sent you a DM with my app ID and bug ticket details two days ago.

Would you mind taking a look when you get a chance?

The issue is still affecting the current version of my app, so I’d really appreciate any update. Thank you!

Hi Amy, we are seeing rendering problems in our native app since the SDK 57 upgrade, so I want to add another data point to this thread. Nothing was changed on the affected elements before the issues appeared.

What we see (iOS):

  1. A Floating Group at the top of a view (search bar + filter pills, stacking “Above”, safe area “Ignore”) loses its 15px left/right padding after the view re-renders during load. The padding is set statically in the Layout tab and no condition or workflow touches it. It happens when we navigate to the same view with a reset stack, and also when a plugin state changes shortly after load and forces the group to re-layout. Sometimes the padding shows for a split second and then disappears. Normal Groups on the same view keep their padding, only the Floating Group is affected.

  2. The bottom navigation bar sometimes does not render at all after selecting a filter option that reloads the view content. It is intermittent, but reproducible within a few attempts.

  3. Views render noticeably slower than before the upgrade. Content that used to appear immediately now shows up with a visible delay, especially when switching tabs.

  4. Elements flicker while a view is loading. Groups and floating elements appear, disappear and reappear as the layout settles, instead of rendering once in their final position.

All of these get more frequent after navigating between views several times.

We already opened a ticket with support and sent them the app ID, test user and a screenshot. Happy to DM the app ID and view name here as well if it helps you cross-reference. Is there any update on the investigation, and is a fix planned in the next mobile build?

Yes if you can DM your app ID and I can work with support to take a look at this issue. Thanks for raising this!

Yes! Sorry, let me ping support and get back to you asap :folded_hands:

I’m having the same issue as @milos1 and @shubiz with floating group placement. The groups sometimes lose their margin and snap to the edge of the screen.