Building iOS Live Activities With React: Inside Voltra

Date
Thursday, December 18, 2025
Time
4PM [CET]
Location
Online

Building iOS Live Activities With React: Inside Voltra

Learn how to build iOS Live Activities and Dynamic Island experiences using pure JSX, no Swift or native code required.

Date
18 December 2025
-
Time
4PM [CET]
Location
Online

Building iOS Live Activities With React: Inside Voltra

youtube-cover
Organizer
Organizer
Presented
Callstack
@
Callstack
Speakers
Speakers
Featuring
Kewin Wereszczyński
Software Engineer
@
Callstack
Łukasz Chludziński
Software Engineer
@
Callstack
Szymon Chmal
Software Developer
@
Callstack
Featuring
Kewin Wereszczyński
Software Engineer
@
Callstack
Łukasz Chludziński
Software Engineer
@
Callstack
Szymon Chmal
Software Developer
@
Callstack

Live Activities are one of the most visible platform features Apple has shipped in recent years. They sit on the Lock Screen, power the Dynamic Island, and stay alive while your app is in the background or not running at all. For users, they feel instant and native. For developers, they introduce an entirely different execution model than what most React Native apps are built around.

This is exactly the gap Voltra is designed to close.

In recent livestream, we took a closer look at how Voltra approaches iOS Live Activities, what problems it solves, and what it means for React Native teams who want first-class, real-time system integrations without rewriting their app in Swift.

Why Live Activities are fundamentally different

Live Activities are not “just another UI surface”.

They are rendered by the system and run outside your app’s process. Updates are applied imperatively by the app, either through push notifications or background signals, and they are expected to be fast, predictable, and extremely battery-aware.

From Apple’s perspective, this makes perfect sense. A Live Activity showing a delivery or transit update cannot depend on your JavaScript thread being alive, hydrated, and in a good mood.

From a React Native perspective, this is where things get tricky.

React Native apps are optimized around an active JavaScript runtime, component trees, and state updates flowing through React. Live Activities break that assumption entirely. They operate under strict OS-imposed resource limits, which means you cannot run a full-fledged JavaScript environment. Instead, they rely on native SwiftUI layouts, serialized state snapshots, explicit lifecycle management, and a lightweight translation layer that produces a SwiftUI view hierarchy, all while respecting strict system-enforced update limits.

Voltra starts by accepting this reality instead of trying to hide it.

Voltra’s core idea: React Native controls intent, native owns rendering

One of the biggest conceptual wins in Voltra is that it does not try to “re-implement React Native inside a Live Activity”.

Instead, it draws a clear boundary: React Native owns business logic, events, and decision - Native. SwiftUI owns layout, rendering, system integration and Voltra acts as the bridge that keeps both sides in sync

This separation aligns naturally with how Live Activities are meant to work on iOS.

Your React Native app decides when a Live Activity should start, update, or end.

The system decides how it is displayed, when it refreshes, and where it appears.

Trying to blur that line usually leads to brittle abstractions. Voltra avoids that by leaning into platform rules rather than fighting them.

State updates without pretending the JS runtime is alive

A common misconception is that Live Activities require your app to be running in the background. They do not.

Live Activities update via:

  • Push notifications with specific payloads
  • System-scheduled refresh windows
  • Server-driven updates

Voltra models this explicitly. State updates are treated as immutable snapshots rather than live, reactive streams. That makes updates predictable and keeps you aligned with Apple’s rate limits and power constraints.

From a React Native point of view, this means you stop thinking in terms of “re-rendering components” and start thinking in terms of “publishing state”.

It is a mindset shift for sure.

Dynamic Island support without special cases

Dynamic Island is often treated as a special feature, but architecturally it is just another presentation of the same Live Activity.

You define one activity, one state model, and one update flow. iOS decides whether that state appears on the Lock Screen, in the Dynamic Island, expanded, collapsed, or hidden entirely.

Widgets, Live Activities, and one mental model

Widgets and Live Activities share more DNA than most people expect. Both rely on SwiftUI, serialized data, and system-managed refresh behavior. Timeline-driven updates, however, apply only to widgets.

Voltra takes advantage of their similarity.

By aligning its APIs with Apple’s widget and activity architecture, Voltra makes it easier to reason about both surfaces using the same mental model. You define what data exists, how it changes, and when it should be published. The platform handles the rest.

This also makes future expansion easier. Once you are comfortable publishing state instead of rendering views, adding new surfaces becomes less intimidating.

What Voltra deliberately does not do

There are a few things Voltra intentionally avoids, and this is where some of the strongest opinions from the stream came through.

Voltra does not:

  • Run JavaScript inside Live Activities
  • Pretend Live Activities are “mini React Native apps”
  • Hide Apple’s constraints behind leaky abstractions
  • Over-optimize for rare edge cases

This restraint is a feature.

Live Activities are heavily constrained by design. Any solution that promises unlimited updates, full React rendering, or background JavaScript execution is either misleading or headed for rejection.

Voltra stays within the rules, which makes it boring in the best possible way.

When Live Activities actually make sense

One of the more pragmatic takeaways is that Live Activities should be used sparingly.

They are perfect for:

  • Deliveries and ride tracking
  • Live sports or event updates
  • Timers and ongoing sessions
  • Navigation and transit progress

They are a poor fit for:

  • Generic notifications
  • High-frequency data streams
  • Anything that needs complex user interaction

Voltra does not try to convince you otherwise. It gives you the tools to build Live Activities when they are the right UX, not because they are shiny.

Final thoughts

Voltra represents a mature approach to integrating React Native with modern iOS system features.

It respects platform boundaries, avoids magical thinking about background JavaScript, and treats Live Activities as what they are: system-owned, state-driven surfaces.

For React Native teams, this is a big deal. It means you can offer first-class iOS experiences like Live Activities and Dynamic Island without abandoning your existing architecture or rewriting your app in Swift.

Live Activities are not easy. Voltra does not make them trivial. It makes them possible in a way that is realistic, maintainable, and aligned with how iOS actually works.

And that is exactly what most production teams need.

Register now
Need help with React or React Native projects?

We support teams building scalable apps with React and React Native.

Let's chat
Link copied to clipboard!
//
Save my spot

Building iOS Live Activities With React: Inside Voltra

Learn how to build iOS Live Activities and Dynamic Island experiences using pure JSX, no Swift or native code required.

//
Insights

Learn more about React

Here's everything we published recently on this topic.

//
React

We can help you move
it forward!

At Callstack, we work with companies big and small, pushing React Native everyday.

React Native Performance Optimization

Improve React Native apps speed and efficiency through targeted performance enhancements.

Code Sharing

Implement effective code-sharing strategies across all platforms to accelerate shipping and reduce code duplication.

Web App Development

Develop powerful cross-platform desktop applications that work across Linux, Windows and Mac.

Next.js Development

Use Next.js to build fast, SEO-friendly web applications with server-side rendering at the edge.

React Native Performance Optimization

Improve React Native apps speed and efficiency through targeted performance enhancements.

C++ Library Integration for React Native

Wrap existing C-compatible libraries for React Native with type-safe JavaScript APIs.

Shared Native Core for Cross-Platform Apps

Implement business logic once in C++ or Rust and run it across mobile, web, desktop, and TV.

Custom High-Performance Renderers

Build custom-rendered screens with WebGPU, Skia, or Filament for 60fps, 3D, and pixel-perfect UX.