Building iOS Live Activities With React: Inside Voltra
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.
Building iOS Live Activities With React: Inside Voltra
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.
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.

Learn more about React
Here's everything we published recently on this topic.
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.
























