iOS widgets and Live Activities are stable in Expo SDK 56
Key Points
- expo-widgets is stable in SDK 56
- Widgets receive full WidgetEnvironment and no pre-rendering
- Configurable widgets and improved error handling
Summary
Expo SDK 56 promotes expo-widgets to stable. You can build iOS Widgets and Live Activities as React components using Expo UI while Continuous Native Generation handles the Widget Extension target, App Group configuration, and SwiftUI scaffolding — so there’s no separate Xcode project to maintain. The SDK 55 alpha has been hardened and now adds practical improvements like full environment delivery, no pre-rendering, configurable widgets, and better error handling.
Key Points
- Stable expo-widgets: write widgets and Live Activities in React; the system renders them natively via SwiftUI.
- Continuous Native Generation creates and keeps the widget extension and app group configuration in sync — no separate iOS target to maintain.
- Widgets and Live Activities now receive full context through
WidgetEnvironment(family, content margins, color scheme, rendering mode, presentation and accessibility context). - Widgets no longer require pre-rendering by the main app; the widget bundle can render independently in its sandboxed JS runtime.
- SDK 56 adds configurable widgets so users can pick options from the widget gallery.
- Live Activities use the same React model but expose multiple slots (Lock Screen, Dynamic Island compact/expanded/minimal) and accept updates via APNs or app-triggered updates.
- Small implementation notes: use the
'widget'directive for the render function,createWidget(...)to register, and Expo UI components that map to SwiftUI primitives.
Practical guidance for engineers
- Install and prebuild:
expo install expo-widgetsthen runexpo prebuild. - Start small: ship one widget that has a single clear job (e.g., ETA, counter, next meeting) before adding Live Activities.
- Use a widget to learn the rendering model; add a Live Activity when the flow has a clear start, active updates, and an end (and when server-side update/APNs handling is required).
- Test on device for Dynamic Island / Lock Screen behavior and validate update flows (local vs APNs).
- Report production feedback and engagement data on Discord or GitHub to help prioritize follow-ups.