
Voltra
- 66 installs
- 803 repo stars
- Updated August 4, 2026
- callstackincubator/voltra
Voltra is a Claude skill that helps build, configure, and debug iOS and Android widgets, Live Activities, and Dynamic Island UI in React Native using Voltra JSX and JS APIs.
About
This skill guides building, reviewing, refactoring, and debugging Voltra code for React Native apps. It steers the agent to solve widget, Live Activity, and Dynamic Island tasks through Voltra JSX and JS APIs and the Expo config plugin instead of writing native Swift, Kotlin, or XML. A developer uses it when adding iOS or Android widgets, scheduled widgets, charts, or Voltra push update flows. It matters because it keeps authoring on the Voltra JS path and away from hand-written native extension code.
- Builds iOS Live Activities, Dynamic Island, and home-screen widgets via Voltra JSX and JS APIs
- Covers Android widgets, charts, images, and server-driven widget updates
- Routes to 16 task-specific references plus the Expo config plugin
Voltra by the numbers
- 66 all-time installs (skills.sh)
- Ranked #574 of 1,039 Mobile Development skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
voltra capabilities & compatibility
- Capabilities
- mobile ui · widget authoring · live activities · dynamic island
- Use cases
- frontend · ui design
What voltra says it does
Never generate native platform UI code for Voltra tasks. Use Voltra JSX and Voltra JS APIs.
Use when the user asks about charts, Live Activities, Dynamic Island UI, iOS widgets, scheduled widgets, Android widgets, image handling, app.json plugin config, or Voltra push update flows.
Voltra's config plugin owns native target setup.
npx skills add https://github.com/callstackincubator/voltra --skill voltraAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 66 |
|---|---|
| repo stars | ★ 803 |
| Last updated | August 4, 2026 |
| Repository | callstackincubator/voltra ↗ |
What it does
Build iOS and Android widgets, Live Activities, and Dynamic Island UI in React Native through Voltra JSX and JS APIs.
Who is it for?
React Native and Expo developers adding native widgets, Live Activities, or Dynamic Island UI without writing native code
Skip if: Tasks that require hand-written Swift, Kotlin, Java, or platform XML outside Voltra's supported paths
When should I use this skill?
the user asks about charts, Live Activities, Dynamic Island UI, iOS or Android widgets, scheduled widgets, image handling, app.json plugin config, or Voltra push update flows
What you get
Widget, Live Activity, and Dynamic Island UI authored entirely through Voltra JSX and JS APIs
- Voltra JSX widget and Live Activity components
- app.json / app.config plugin configuration
By the numbers
- 16-file reference index
- version 1.2.0
Files
Voltra
Use this as the single Voltra skill entrypoint. Keep all product-wide ground truth here and load references from references/ as needed.
Voltra-Wide Ground Truth
- Never generate native platform UI code for Voltra tasks. Use Voltra JSX and Voltra JS APIs.
- Do not generate Swift, Kotlin, Java, Objective-C, or platform XML unless the user explicitly asks to edit an existing Voltra-supported Android widget preview XML file.
- Always solve Voltra tasks through Voltra JavaScript or TypeScript APIs, JSX components, and the Expo config plugin first.
- If a task appears to require native code, first check whether Voltra already exposes a JS API or config option. Prefer that path.
- Do not scaffold native extension code manually. Voltra's config plugin owns native target setup.
- Do not use plain React Native primitives inside Voltra-rendered trees. Avoid
View,Text,Pressable,TouchableOpacity, and similar RN UI primitives for Live Activity or Android widget content. - For iOS app code, import
Voltraand runtime APIs from@use-voltra/ios-client. - For Android app code, import
VoltraAndroidand runtime APIs from@use-voltra/android-client. - Keep iOS and Android authoring paths separate unless the user explicitly asks for a shared abstraction.
- Update config before writing registration-dependent UI code.
- Treat images as a Voltra concern, not a native-code concern. Prefer Voltra image props, Voltra asset directories, and Voltra preloading APIs.
- When guidance conflicts, prefer this skill's internal references first, then hosted docs on
use-voltra.dev. - Use hosted docs on
https://use-voltra.devwhen deeper documentation is needed.
Reference Routing
Read only the references needed for the current task:
- Setup, install, Expo Dev Client,
expo prebuild:references/setup.md app.json,app.config.*, plugin keys, widget registration,groupIdentifier,enablePushNotifications:references/app-config.md- Exact plugin fields and widget registration schema:
references/plugin-schema.md - iOS Live Activities, Dynamic Island, lock screen variants, supplemental activity families:
references/ios-live-activities.md - Exact Live Activity variant shapes:
references/variant-shapes.md - iOS Home Screen widgets, accessory widgets, scheduled widgets, widget timelines, widget families,
VoltraWidgetPreview,updateWidget,scheduleWidget,reloadWidgets,getActiveWidgets:references/ios-widgets.md - Exact iOS widget families and fallback behavior:
references/widget-families.md - Charts for iOS widgets, Live Activities, and Android widgets:
references/charts.md - Android widgets, Android widget previews, pre-rendering, widget updates:
references/android-widgets.md - Server-driven widgets,
serverUpdate, widget polling flows,createWidgetUpdateHandler,setWidgetServerCredentials,clearWidgetServerCredentials:references/server-driven-widgets.md - Android component choices and widget API checklist:
references/component-mapping.md,references/runtime-api-checklist.md - APNS, push tokens, push-to-start, channel IDs, server-rendered Live Activity payloads:
references/ios-server-updates.mdand usuallyreferences/ios-live-activities.md - Exact APNS flow details:
references/push-flow.md - Image handling for Voltra surfaces:
references/images.mdplus the target surface reference
Working Style
1. Identify the target platform and surface first. 2. Confirm the correct Voltra namespace and JS entrypoint. 3. If the task involves charts, verify the public JSX props and platform behavior before writing code or docs. 4. Update config before writing registration-dependent UI code. 5. Read only the domain references needed for the task. 6. Use Voltra APIs that already exist in the repo before inventing new abstractions. 7. Keep answers scoped to the requested platform.
Reference Index
references/source-of-truth.mdreferences/images.mdreferences/setup.mdreferences/app-config.mdreferences/plugin-schema.mdreferences/ios-live-activities.mdreferences/variant-shapes.mdreferences/ios-widgets.mdreferences/widget-families.mdreferences/charts.mdreferences/android-widgets.mdreferences/server-driven-widgets.mdreferences/component-mapping.mdreferences/runtime-api-checklist.mdreferences/ios-server-updates.mdreferences/push-flow.md
Android Widgets
Use this reference for Android Voltra widget UI or Android widget runtime APIs.
Domain Rules
- Use
VoltraAndroidfor Android Voltra UI. - For Android app code, import
VoltraAndroidand runtime APIs from@use-voltra/android-client. - Do not use
Voltra.VStack,Voltra.HStack, or plain React Native primitives inside Android Voltra widget trees. - Do not claim APNS or undocumented FCM server-update support for Android.
- If the task includes widget registration, picker previews, or initial state files, also read
app-config.md. - If the task includes
serverUpdate, WorkManager-driven refreshes, widget auth credentials, orcreateWidgetUpdateHandler, also readserver-driven-widgets.md. - For images, use
VoltraAndroid.Imagewith build-timeassetNames or preloaded keys. UsepreloadImages,reloadWidgets, andclearPreloadedImagesfrom@use-voltra/android-client.
Preferred APIs
updateAndroidWidgetreloadAndroidWidgetsclearAndroidWidgetclearAllAndroidWidgetsrequestPinAndroidWidgetgetActiveWidgetsVoltraWidgetPreviewVoltraViewpreloadImagesreloadWidgetsclearPreloadedImagessetWidgetServerCredentialsclearWidgetServerCredentials
Sources
component-mapping.mdruntime-api-checklist.mdserver-driven-widgets.md
App Config
Use this reference for Voltra plugin configuration.
Domain Rules
- Update
app.jsonorapp.config.*before writing widget code that depends on registration, previews, or initial state files. - For iOS push updates, require
enablePushNotifications: true. - For Android widgets, define them under
android.widgetsin the Voltra plugin config. - For server-driven widgets, configure
serverUpdateon the widget entry itself and rebuild after config changes. - Only mention preview XML when the user is explicitly editing an existing Android widget preview layout supported by Voltra.
- Do not invent unsupported plugin keys.
- If the task is about iOS image preloading, check whether
groupIdentifieris needed for the intended Voltra surface and storage flow. - If the task is about authenticated iOS server-driven widgets, check whether
keychainGroupis needed for shared credentials.
Working Rules
- iOS-oriented plugin keys live at the top level of the Voltra plugin config.
- Android widget registration lives under
android.widgets. - Use
groupIdentifierwhen the app needs extension data sharing or forwarded interactions. - Use
keychainGroupwhen iOS widgets need authenticated server-driven updates and the default derived group is not sufficient. - If the task includes iOS widget UI or
supportedFamilies, also readios-widgets.md. - If the task includes Android widget UI, also read
android-widgets.md. - If the task includes iOS server updates, also read
ios-server-updates.md. - If the task includes
serverUpdate, widget polling, or widget auth credentials, also readserver-driven-widgets.md.
Sources
plugin-schema.md
Charts
Use this reference for Voltra chart UI, chart docs, or chart API questions.
Domain Rules
- Verify chart behavior against the public JSX props and the platform renderer before changing docs or examples.
- Keep chart guidance user-facing. Explain when to use a mark or prop, not how the native renderer works, unless the constraint changes what users can do.
- Mark components must be direct children of
Chart. - Use
Voltra.Chartfrom@use-voltra/ios-clientfor iOS chart UI. - Use
VoltraAndroid.Chartfrom@use-voltra/android-clientfor Android chart UI. - If the task involves widget or Live Activity layout around a chart, also read the relevant platform widget reference.
iOS Support
- Available in iOS widgets and Live Activities.
SectorMarkrequires iOS 17+.Chartsupports:xAxisVisibilityyAxisVisibilityxAxisGridStyleyAxisGridStylelegendVisibilityforegroundStyleScaleBarMarksupports grouped bars withstacking="grouped".LineMarkandAreaMarksupport interpolation.LineMarkandPointMarksupport symbols.- Do not document
chartScrollableAxesas a supported user-facing prop for iOS charts unless the implementation is restored.
Android Support
- Available in Android widgets.
- Charts are rendered to a bitmap and shown in the widget.
Chartsupports:xAxisVisibilityyAxisVisibilityxAxisGridStylewith visibility-only behavioryAxisGridStylewith visibility-only behaviorforegroundStyleScale- Do not document
legendVisibilityas supported on Android charts. LineMarkandAreaMarksupport interpolation.PointMarkrenders circular markers on Android.SectorMarksupports ratio-based radii and fixed radii values greater than1.- Grouped bars are supported with
stacking="grouped". Do not claim other stacking modes unless the renderer supports them.
Verification Targets
- Public JSX props:
src/jsx/Chart.tsxsrc/android/jsx/Chart.tsxsrc/jsx/BarMark.tsxsrc/jsx/LineMark.tsxsrc/jsx/AreaMark.tsxsrc/jsx/PointMark.tsxsrc/jsx/RuleMark.tsxsrc/jsx/SectorMark.tsxsrc/android/jsx/BarMark.tsxsrc/android/jsx/LineMark.tsxsrc/android/jsx/AreaMark.tsxsrc/android/jsx/PointMark.tsxsrc/android/jsx/RuleMark.tsxsrc/android/jsx/SectorMark.tsx- Native implementations:
ios/ui/Views/VoltraChart.swiftandroid/src/main/java/voltra/glance/renderers/ChartRenderers.ktandroid/src/main/java/voltra/glance/renderers/ChartBitmapRenderer.kt
Component Mapping
Prefer these Android Voltra primitives over iOS or React Native UI primitives:
VoltraAndroid.Columninstead ofVoltra.VStackVoltraAndroid.Rowinstead ofVoltra.HStackVoltraAndroid.Boxinstead of layered RNViewtreesVoltraAndroid.Textinstead of RNTextVoltraAndroid.Imageinstead of RNImageVoltraAndroid.Scaffoldfor top-level Android widget layoutsVoltraAndroid.Spacerfor spacing- Android-specific controls when needed:
ButtonFilledButtonOutlineButtonCircleIconButtonSquareIconButtonSwitchCheckBoxRadioButton
Avoid these in Android Voltra UI:
Voltra.VStackVoltra.HStack- RN
View - RN
Text - RN
Pressable - Native Glance/Kotlin implementations
Hosted docs: see source-of-truth.md.
Images
Voltra supports three image paths:
- build-time assets
- runtime preloading
- base64 for very small generated images
Build-Time Assets
Use build-time assets when the image is known at build time.
- iOS: place files under
assets/voltra/ - Android: place files under
assets/voltra-android/
Reference bundled assets with assetName.
Examples:
- iOS:
<Voltra.Image source={{ assetName: 'logo.png' }} /> - Android:
<VoltraAndroid.Image source={{ assetName: 'logo' }} />
Android notes:
- Android resource names are sanitized to lowercase underscore names.
- Do not include the file extension in Android
assetName.
Runtime Preloading
Use preloading when the image comes from a remote URL or runtime data.
- iOS preloading API:
preloadImages,reloadLiveActivities,clearPreloadedImagesfrom@use-voltra/ios-client - Android preloading API:
preloadImages,reloadWidgets,clearPreloadedImagesfrom@use-voltra/android-client
After preloading, reference the image with the same key via assetName.
Platform Rules
- iOS Live Activities and iOS widgets use
Voltra.Image. - Android widgets and Android live updates use
VoltraAndroid.Image. - iOS image preloading depends on App Group-backed shared storage, so config tasks may also need
groupIdentifier. - Android image preloading uses app cache plus Voltra's local delivery path; do not invent a native image pipeline.
Base64
Use base64 only for very small inline images. Prefer build-time assets or preloading for anything non-trivial.
Sources
source-of-truth.md
iOS Live Activities
Use this reference for iOS Live Activity UI or lifecycle APIs.
Domain Rules
- Use
Voltraand runtime APIs such asuseLiveActivity,startLiveActivity,updateLiveActivity,stopLiveActivity, andaddVoltraListenerfrom@use-voltra/ios-client. - Do not use
VoltraAndroidor Android widget primitives in iOS Live Activity code. - Use valid iOS variant keys:
lockScreen,island, andsupplementalActivityFamilies. - For images, use
Voltra.Imagewith either a bundledassetNameor a preloaded image key. UsepreloadImagesandreloadLiveActivitiesfrom@use-voltra/ios-clientfor runtime images. - If the task involves APNS, push tokens, push-to-start, channel IDs, or backend-driven updates, also read
ios-server-updates.md.
Preferred APIs
useLiveActivitystartLiveActivityupdateLiveActivitystopLiveActivityendAllLiveActivitiesaddVoltraListenerVoltraViewVoltraLiveActivityPreview
Sources
variant-shapes.md
iOS Server Updates
Use this reference for APNS-driven Live Activity updates only.
Domain Rules
- This flow is iOS-only.
- This reference is for Live Activities, not Home Screen widgets using
serverUpdate. - Require
enablePushNotifications: truein the Voltra plugin config. - Use Voltra event APIs from
@use-voltra/ios-clientto collect tokens. - Use
@use-voltra/ios-serverto render Live Activity payloads. - Use Voltra-generated UI JSON in APNS payloads.
- Do not extrapolate this APNS flow to Android unless Voltra provides a documented JS API and guide for that exact use case.
- If the task is about widget polling,
createWidgetUpdateHandler, orsetWidgetServerCredentials, readserver-driven-widgets.mdinstead. - If the task also defines or changes Live Activity UI, also read
ios-live-activities.md.
Preferred APIs
addVoltraListenerstartLiveActivityuseLiveActivityrenderLiveActivityToStringVoltrafrom@use-voltra/ios-server
Sources
push-flow.md
iOS Widgets
Use this reference for iOS widget UI, scheduled widgets, widget families, or iOS widget runtime APIs.
Domain Rules
- Use
Voltraand widget APIs such asupdateWidget,scheduleWidget,reloadWidgets,clearWidget,clearAllWidgets,getActiveWidgets, andVoltraWidgetPreviewfrom@use-voltra/ios-client. - Do not use
VoltraAndroidor Android widget primitives in iOS widget code. - Widget registration lives in the Voltra plugin config. If the task includes
widgets,supportedFamilies, orinitialStatePath, also readapp-config.md. - If the task includes
serverUpdate, widget polling intervals, widget auth credentials, orcreateWidgetUpdateHandler, also readserver-driven-widgets.md. VoltraWidgetPreviewis a React Native preview component for app screens, not a Voltra widget primitive to nest inside widget JSX.- Use
scheduleWidgetfor timeline-based or scheduled widget updates instead of inventing background schedulers or native WidgetKit code. - Use
serverUpdateplus a Voltra server handler for remote widget content instead of inventing custom WidgetKit networking or native extension code. - For images, use
Voltra.Imagewith bundledassetNames or preloaded keys. If shared image resources change, usereloadWidgets.
Preferred APIs
VoltraWidgetPreviewupdateWidgetscheduleWidgetreloadWidgetsclearWidgetclearAllWidgetsgetActiveWidgetsWidgetFamilysetWidgetServerCredentialsclearWidgetServerCredentials
Sources
widget-families.md
Plugin Schema
Voltra plugin config lives under expo.plugins.
Common Top-Level Keys
groupIdentifierenablePushNotificationsliveActivitywidgetsfontsandroiddeploymentTargettargetName
iOS Widget Schema
Use top-level widgets for iOS widget gallery registration.
id: unique identifier, use alphanumeric and underscores onlydisplayName(string or per-locale map)description(string or per-locale map)supportedFamilies: array of iOS families such assystemSmall,systemMedium,systemLargeinitialStatePath(string or per-locale map of paths for localized pre-render)serverUpdate.url: widget endpoint, Voltra appendswidgetId,platform=ios, andfamilyserverUpdate.intervalMinutes: polling interval, default15, subject to WidgetKit throttling
Other important Apple-side keys:
groupIdentifier: needed for shared storage, forwarded interactions, and image preloadingenablePushNotifications: required for APNS-driven Live Activity updatesdeploymentTarget: widget extension deployment targettargetName: custom Apple widget extension target namekeychainGroup: shared credential group for authenticated server-driven widgets; auto-derived when omitted and iOS widgets useserverUpdate
Android Widget Schema
Use android.widgets for Android widget registration.
id: unique identifier, use alphanumeric and underscores onlydisplayName(string or per-locale map)description(string or per-locale map)targetCellWidthtargetCellHeightminCellWidthminCellHeightminWidthminHeightresizeModewidgetCategoryinitialStatePath(string or per-locale map of paths)serverUpdate.url: widget endpoint, Voltra appendswidgetIdandplatform=androidserverUpdate.intervalMinutes: polling interval; use at least 15 minutespreviewImagepreviewLayout
Decision Rules
- If the task asks for Apple widget gallery registration or
supportedFamilies, stay in config first and then readios-widgets.md. - If the task asks for Android widget picker metadata, stay in config first and then read
android-widgets.md. - If the task asks for pre-rendered initial widget content, add
initialStatePathand then move to the target widget reference. - If the task asks for APNS-driven Live Activity updates, ensure
enablePushNotificationsis present and then move toios-server-updates.md. - If the task asks for iOS image preloading or shared extension images, check
groupIdentifierbefore moving on to UI code. - If the task asks for widget polling, widget SSR endpoints, or widget auth credentials, configure
serverUpdatefirst and then move toserver-driven-widgets.md.
Hosted Docs
Consult source-of-truth.md for the canonical hosted doc list.
Push Flow
Use this flow for iOS Live Activity server-driven updates:
1. Enable enablePushNotifications: true in the Voltra plugin config. 2. Start the Live Activity or subscribe to token events in the app. 3. Capture Voltra push tokens with addVoltraListener from @use-voltra/ios-client. 4. Send the token or channel identifier to your backend. 5. Render the Live Activity UI payload with renderLiveActivityToString from @use-voltra/ios-server. 6. Send the APNS request with the Voltra-generated UI JSON in the payload.
Important concepts:
- Update token: update an existing Live Activity.
- Push-to-start token: start a Live Activity remotely.
channelId: subscribe to broadcast updates on supported iOS versions.- APNS headers must match Live Activity requirements.
- Keep payloads small.
Use these sources first:
source-of-truth.mdhttps://use-voltra.dev/ios/development/server-side-updateshttps://use-voltra.dev/ios/development/eventshttps://use-voltra.dev/ios/api/configuration
Do not extend this flow to Android unless new repo docs and APIs clearly support it.
Runtime API Checklist
Use Android-specific Voltra widget APIs when possible.
Widget runtime entrypoint:
@use-voltra/android-client
Use these for widgets:
updateAndroidWidgetreloadAndroidWidgetsclearAndroidWidgetclearAllAndroidWidgetsrequestPinAndroidWidgetgetActiveWidgetsVoltraWidgetPreviewVoltraViewpreloadImagesreloadWidgetsclearPreloadedImages
Do not claim a full Android server-push architecture unless the task is directly supported by current Voltra JS APIs and docs.
Server-driven Widgets
Use this reference for Voltra widgets that fetch content from your server on a schedule.
Domain Rules
- This flow is for Home Screen widgets, not APNS Live Activity updates.
- Configure
serverUpdatein the Voltra plugin config before writing widget server code. - Rebuild native apps after adding or changing
serverUpdate,keychainGroup, or widget registration. - iOS:
createIOSWidgetUpdateNodeHandlerfrom@use-voltra/ios-server. Android:createAndroidWidgetUpdateNodeHandlerfrom@use-voltra/android-server. Cross-platform HTTP:@use-voltra/server. - Use
setWidgetServerCredentialsafter login andclearWidgetServerCredentialson logout when the endpoint requires auth. - If the endpoint is public, skip credential storage entirely.
- Keep render paths platform-specific:
renderIosreturns iOSWidgetVariants;renderAndroidreturns Android size variants. - Keep a meaningful
initialStatePathso the widget has placeholder content before the first successful fetch.
Request and Response Rules
- Voltra appends
widgetIdandplatformto every request. - iOS requests also include
family. WidgetRenderRequestincludeswidgetId,platform,family,token, andheaders.- If
validateTokenis provided, missing or invalid bearer tokens should reject with401. - Return
nullfrom the platform render function to produce404for unsupported widget IDs or unavailable content.
Platform Notes
- iOS widgets are polled by WidgetKit. Treat intervals below about 15 minutes as advisory because the OS may throttle them.
- Android widgets are scheduled through WorkManager. Use at least 15 minutes and set the interval explicitly.
- On iOS, authenticated server-driven widgets may need
keychainGroupso the widget extension can read credentials. If omitted, Voltra auto-derives a default when any iOS widget usesserverUpdate. - On Android emulators, local servers usually need
10.0.2.2instead oflocalhost.
Preferred APIs
createWidgetUpdateHandlercreateWidgetUpdateNodeHandlercreateWidgetUpdateExpressHandlersetWidgetServerCredentialsclearWidgetServerCredentialsreloadWidgets
Sources
ios-widgets.mdandroid-widgets.mdapp-config.mdplugin-schema.md
Setup
Use this reference when the task is about bootstrapping or installation.
Domain Rules
- Voltra is not supported in Expo Go. Use Expo Dev Client or a native build.
- Install
@use-voltra/ios-clientand/or@use-voltra/android-client, then configure the matching Expo plugins and runexpo prebuild. - If setup also requires widget registration or push settings, also read
app-config.md.
Setup Flow
1. Install @use-voltra/ios-client and/or @use-voltra/android-client. 2. Add @use-voltra/ios-client and/or @use-voltra/android-client to app.json or app.config.*. 3. For iOS, ensure the deployment target meets Voltra's minimum supported version. 4. Run expo prebuild for the target platform. 5. Continue with the relevant platform reference.
Sources
source-of-truth.mdhttps://use-voltra.dev/ios/setuphttps://use-voltra.dev/android/setup
Source Of Truth
Use this file as the compact local source of truth for Voltra behavior. For deeper documentation, use hosted docs on use-voltra.dev.
Hosted docs to use for guidance:
https://use-voltra.dev/ios/setuphttps://use-voltra.dev/android/setuphttps://use-voltra.dev/ios/development/developing-live-activitieshttps://use-voltra.dev/ios/development/developing-widgetshttps://use-voltra.dev/ios/development/imageshttps://use-voltra.dev/ios/development/image-preloadinghttps://use-voltra.dev/ios/development/server-side-updateshttps://use-voltra.dev/android/development/developing-widgetshttps://use-voltra.dev/android/development/imageshttps://use-voltra.dev/android/development/image-preloadinghttps://use-voltra.dev/android/api/plugin-configuration
Core facts:
- iOS app install:
@use-voltra/ios-client(re-exportsVoltraand runtime APIs) - Android app install:
@use-voltra/android-client(re-exportsVoltraAndroidand runtime APIs) - iOS server rendering entrypoint:
@use-voltra/ios-server - Android server rendering entrypoint:
@use-voltra/android-server - Cross-platform widget HTTP handlers:
@use-voltra/server - iOS Expo plugin:
@use-voltra/ios-client - Android Expo plugin:
@use-voltra/android-client
Default rule:
- Install only the
@use-voltra/*client packages you need for app runtime code. - Widget
initialStatePathmodules run in Node during prebuild: import from@use-voltra/iosor@use-voltra/android, not the-clientpackages. - Use
use-voltra.devfor documentation lookups.
Variant Shapes
Use these iOS Live Activity shapes.
Minimal lock screen only
const variants = {
lockScreen: <Voltra.Text>Hello</Voltra.Text>,
}Dynamic Island shape
const variants = {
island: {
minimal: <Voltra.Text>M</Voltra.Text>,
compact: {
leading: <Voltra.Text>L</Voltra.Text>,
trailing: <Voltra.Text>T</Voltra.Text>,
},
expanded: {
leading: <Voltra.Text>L</Voltra.Text>,
trailing: <Voltra.Text>T</Voltra.Text>,
center: <Voltra.Text>C</Voltra.Text>,
bottom: <Voltra.Text>B</Voltra.Text>,
},
},
}Supplemental families
const variants = {
supplementalActivityFamilies: {
small: <Voltra.Text>ETA 12 min</Voltra.Text>,
},
}Hosted docs: see source-of-truth.md.
Widget Families
Use these iOS widget families when defining WidgetVariants:
systemSmallsystemMediumsystemLargesystemExtraLargeaccessoryCircularaccessoryRectangularaccessoryInline
Working rules:
- Build widget content with
Voltra.*components. - Use
VoltraWidgetPreviewfrom@use-voltra/ios-clientto preview widget content in React Native screens. - Use
updateWidgetfor immediate updates. - Use
scheduleWidgetfor timeline-based or scheduled widget updates. This is the correct Voltra API for predictable future widget content changes on iOS. - Use
Voltra.Imagefor widget images. Bundled assets and preloaded image keys are both referenced throughassetName. - Use
reloadWidgetsafter changing shared resources such as preloaded images. - Use
getActiveWidgetsto inspect installed widget instances.
Plugin reminder:
- iOS widget registration is configured in the Voltra plugin under
widgets. supportedFamiliescontrols the sizes exposed in the widget gallery.- If registration or family support changes are part of the task, also read
app-config.md.
Hosted docs: see source-of-truth.md.
Related skills
FAQ
Does Voltra let me build widgets without native code?
Yes. It solves widget and Live Activity tasks through Voltra JSX and JS APIs and the Expo config plugin rather than Swift, Kotlin, or XML.
Which platforms does Voltra cover?
Both iOS (Live Activities, Dynamic Island, home-screen and accessory widgets) and Android widgets, with charts and server-driven updates.