Home-screen widgets
Home-screen widgets for an Expo app, compared: Expo Widgets, or none - Expo Go support and what each option installs.
Hey - here's how home-screen widgets work in ReadyNative.
This category owns the widget people add to their Home Screen: the one thing your app is about
(today's weather, a streak, a balance, the next booking), visible without opening the app.
@/lib/widgets always exists, whichever option you pick - widgets.update({ title, value, subtitle, symbol }) replaces what the widget shows, and it is a safe no-op wherever widgets
can't run (the none option, Android, web, Expo Go). Screens call it unconditionally.
Pick Expo Widgets when a glance is worth a Home Screen slot: it adds an iOS widget extension
built with @expo/ui SwiftUI components, written in TypeScript in src/widgets/app-widget.tsx,
in small and medium sizes, plus a Live Activity for the Lock Screen and the Dynamic Island
(widgets.activity.start()). It needs a dev build. Pick none until you have that one number -
no extension target, no App Group, nothing extra to sign.
Both options are in Starter and Pro. Widgets are iOS-only for now (expo-widgets' Android support
is experimental); on Android widgets.supported is false.
Options
One option per category - --widgets <option> picks it:
bun run setup --widgets expo-widgets| Option | Label | Expo Go | Hint |
|---|---|---|---|
expo-widgets | Expo Widgets (default) | no - dev build required | iOS home-screen widget + Live Activity (Lock Screen, Dynamic Island) in SwiftUI (@expo/ui), fed from the app · dev build required (no Expo Go) |
none | No widgets | yes | no app extension, widgets.update() is a no-op |