Skip to content

Releases: callstackincubator/voltra

v1.3.1

25 Mar 08:51

Choose a tag to compare

⚡️ Voltra 1.3.1

VOLTRA_SERVER_DRIVEN_WIDGETS.mp4

Video by @DorianMazur

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 install failures with pnpm and bun symlinked node_modules setups.
  • 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

12 Feb 09:51

Choose a tag to compare

⚡️ 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 lineHeight support to VoltraTextStyle for full control over vertical text rhythm.
  • Progress Labels (iOS): currentValueLabel is 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

28 Jan 15:10

Choose a tag to compare

Release Notes - v1.1.1

Release Date: January 28, 2026
Previous Release: v1.1.0 (January 28, 2026)

🐛 Bug Fixes

  • Restores the ESM compatibility patch accidentally overwritten during the Android rewrite.

v1.1.0

28 Jan 11:20

Choose a tag to compare

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/android with voltra/android/client and voltra/android/server subdirectories
    • Separate documentation pages for iOS and Android platforms

iOS Enhancements

  • iOS Link component (#47)

    • New Link component for iOS that creates custom buttons opening specified URLs when pressed
  • 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 targetName prop in ConfigPluginProps for customizing widget extension target name
  • Timer component enhancement (#22)

    • Added showHours prop support to Voltra.Timer component
    • Allows controlling whether timer displays hours when duration exceeds 60 minutes
  • 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:

v1.0.1

16 Jan 08:26

Choose a tag to compare

What's changed

  • fix: widgets not consuming styles by @V3RON in #18

Changelog: v1.0.0...v1.0.1

v1.0.0 - Hello World!

13 Jan 14:57

Choose a tag to compare

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!