Releases: callstackincubator/voltra
v1.3.1
⚡️ Voltra 1.3.1
VOLTRA_SERVER_DRIVEN_WIDGETS.mp4
I am excited to announce Voltra 1.3.0! This release brings two major additions to Voltra: server-driven widgets and charts. Together, they make it much easier to build widgets that stay fresh, feel dynamic, and present live data in a much richer way.
💎 Highlights
☁️ Server-driven widgets (iOS and Android)
Voltra now supports server-driven widgets on both iOS and Android. With the new serverUpdate configuration, widgets can fetch fresh content directly from your backend, even when the app is closed.
This opens the door to a whole new class of widgets. Weather, portfolios, scores, dashboards, and other fast-moving experiences can now stay up to date through scheduled background refreshes, with Voltra handling the client-side plumbing for you.
This release also includes the server-side helpers needed to power that flow, plus theme-aware requests and support for a native refresh button so users can manually trigger an update on demand.
📈 Charts (iOS and Android)
Voltra now includes a new Chart component family for widgets and Live Activities, making it much easier to build visually rich, data-driven experiences.
Supported chart types include line, area, bar, point, rule, and pie/donut charts. Charts are especially powerful when paired with server-driven widgets, letting you fetch live data from your backend and present it in a much more expressive, glanceable format.
✨ Features
- Native refresh button for server-driven widgets (iOS and Android): Widgets can now show a built-in refresh action via
serverUpdate.refresh, letting users fetch fresh content immediately. - Theme-aware server requests: Server-driven widget requests now include the current system theme, allowing your backend to return light or dark-aware content.
- Custom fonts in Android widgets: Added support for rendering custom fonts in Android Glance widgets.
🛠 Fixes
- Chart rendering improvements: Improved chart sizing and clipping so charts render more cleanly inside widgets.
- Android widget preview fixes: Fixed text truncation and blank preview issues in
VoltraWidgetPreview. - Expo plugin reliability: Fixed
pod installfailures with pnpm and bun symlinkednode_modulessetups. - Timer rendering fix (iOS): Fixed shifting digits in relative countdown and stopwatch timers.
- Live Activity token handling (iOS): Fixed duplicate push-to-start token events being emitted during activity lifecycle changes.
- Image preloading errors (iOS): Fixed error propagation so image preload failures are reported correctly.
🙏 Contributors
Thank you to all the contributors who made this release possible:
@V3RON
@DorianMazur
@bartoszboruta
@ludwig-pro
Full changelog: v1.2.0...v1.3.1
v1.2.0
⚡️ Voltra 1.2.0
I am excited to announce Voltra 1.2.0! This release introduces a powerful new layout engine for iOS, enhanced Expo support, and significant improvements to developer control over widgets and media.
💎 Highlights
🍱 Flexbox (iOS)
I've introduced a new layout system via Voltra.View that brings React Native-style Flexbox capabilities directly to your views. This is fully opt-in; VStack and HStack continue to use standard SwiftUI layout, but when you need complex alignment, wrapping, or gap control, Voltra.View is now your best friend.
Supported properties include: flexDirection, justifyContent, alignItems, gap, flex, and more.
⚠️ Note: Flexbox support is currently experimental and a work in progress. Some features, such as absolute positioning, are missing but will be added in upcoming releases. If you stumble upon any edge cases, please don't hesitate to open an issue report; your feedback helps me make it rock solid.
📍 Relative & absolute positioning (iOS)
You can now mix relative and absolute positioning within your layouts. This unlocks much more flexible design patterns and overlay capabilities without fighting the layout system.
🖼️ Customizable image fallbacks (iOS and Android)
Say goodbye to the default placeholder. You can now provide a custom view to render whenever an image fails to load, ensuring your UI remains consistent and branded even when the network isn't.
🔌 Expo Config Plugin & EAS
The Expo plugin has been completely refactored to ensure seamless integration with EAS (Expo Application Services). Building Voltra-powered apps in the cloud is now smoother and more reliable.
🎛️ New API: getActiveWidgets (iOS and Android)
You can now programmatically query which widgets are currently active using Voltra.getActiveWidgets(). This is perfect for reacting to widget states directly within your logic or debugging active instances.
✨ Improvements & fixes
- Timer Rewrite (iOS): The Timer component has been rebuilt from the ground up with layout constraints in mind, resulting in much more reliable rendering.
- Text & Stack Alignment (iOS): Fixed various alignment edge cases in text and stack components.
- Line Height (iOS): Added
lineHeightsupport toVoltraTextStylefor full control over vertical text rhythm. - Progress Labels (iOS):
currentValueLabelis now supported on Linear and Circular Progress Views, allowing values to be shown directly on the indicators. - Widget Icons (iOS): Fixed app icon inheritance in widget extension build settings.
- Timeline Pruning (iOS): The logic has been updated to ensure the latest past timeline entry is preserved when pruning, preventing data gaps.
🙏 Contributors
Thank you to all the contributors who made this release possible:
@alex-vance
@bartoszboruta
@chukwumaokere
@V3RON
Full changelog: v1.1.2...v1.2.0
v1.1.2
v1.1.0
Release Notes - v1.1.0
Release Date: January 28, 2026
Previous Release: v1.0.1 (January 16, 2026)
✨ Features
Android Support
- Full Android widget support (#45)
- Complete Android implementation with widgets
- Android codebase lives in
voltra/androidwithvoltra/android/clientandvoltra/android/serversubdirectories - Separate documentation pages for iOS and Android platforms
iOS Enhancements
-
iOS Link component (#47)
- New
Linkcomponent for iOS that creates custom buttons opening specified URLs when pressed
- New
-
Supplemental activity families support for iOS 18+ (#13)
- Support for iOS 18 supplemental activity families
- Enables multiple activity variants from a single configuration
-
Widget scheduling (#19)
- Schedule multiple widget states to display automatically at different times
- Perfect for weather forecasts, calendar events, or any app needing content changes throughout the day
- Automatic UserDefaults cleanup for orphaned widget data and expired timeline entries
- Size validation warnings for payloads exceeding 50KB and timelines exceeding 100KB
-
Custom fonts support (#9)
- API similar to expo-font for custom font loading
- Based on expo-font foundation
-
Configurable widget extension target name (#33)
- Optional
targetNameprop inConfigPluginPropsfor customizing widget extension target name
- Optional
-
Timer component enhancement (#22)
- Added
showHoursprop support toVoltra.Timercomponent - Allows controlling whether timer displays hours when duration exceeds 60 minutes
- Added
-
Group identifier improvements (#10)
- Made group identifier truly optional as documented
🐛 Bug Fixes
-
ESM module compatibility (#30)
- Fixed ESM module compatibility issues causing build failures during EAS builds
-
Optional JSX elements with && operator (#26)
- Fixed boolean handling to match React Native's behavior
- Booleans are now ignored in non-Text components, enabling patterns like
{condition && <Component />} - In Text components, booleans render as empty strings (matching React Native)
🙏 Contributors
Thank you to all the contributors who made this release possible:
- @tarikfp - ESM module compatibility fix (#30), configurable targetName feature (#33), and iOS 26 SDK documentation (#34)
- @mrevanzak - Supplemental activity families support (#13) and Timer showHours prop (#22)
- @lukebrandonfarrell - README links update (#44)
- @bartoszboruta - Token listeners documentation fix (#40)
v1.0.1
v1.0.0 - Hello World!
Voltra is here, and with it, there’s no longer any need to reach out to Swift.
Learn more about Voltra on its documentation site: https://www.use-voltra.dev/
As always, feel free to play with it, have fun, and report any issues you come across.
Happy coding!