React Native 0.86, SPM, Gesture Handler 3, Apex, and Agent Device

Authors
Michał Pierzchala
Principal Engineer
@
Callstack

Hey,

It’s Michał with June’s edition of the newsletter. React Native had a very infrastructure-heavy month: 0.86 shipped, SPM support is getting real, Gesture Handler 3.0 landed for the New Architecture, and the ecosystem keeps moving toward faster runtimes, better native modules, and more reliable testing.

Meanwhile at Callstack Incubator, we’ve been busy with Voltra, Apex, Agent Device, React Navigation, Brownfield, local LLM experiments, and core React Native work. Let’s go!

Community highlights

  • ‍React Native 0.86 + Swift Package Manager support: No breaking changes (again!). React Native 0.86 is a stability-first release with Android 15+ edge-to-edge fixes, DevTools improvements, and new JSI APIs. At App.js, Meta and Expo also previewed npx react-native spm, a path toward replacing CocoaPods with SPM-generated Xcode projects, codegen, and shared XCFramework caches.
  • React Native Runtimes: we’ve teamed with Margelo to introduce a multi-runtime layer for React Native New Architecture apps. It lets you run selected components, screens, headless tasks, and business logic in isolated Hermes runtimes, so expensive work does not block navigation, gestures, or input on the main JS thread. Like Lynx, but without rewriting your app.
  • React Native Gesture Handler 3.0: A major New Architecture-only release of Gesture Handler with a new hook-based API, a new Touchable component, and deeper Reanimated integration. It is another sign that core interaction libraries are moving their best APIs to the New Architecture path.
  • Talking to JSI in Swift: what changed in SDK 56: Expo native modules now call JSI directly on Apple platforms in SDK 56, removing the Objective-C++ bridge layer and making calls 1.6-2.3x faster. Good news for everyone! Hard to imagine a project without Expo Modules today.
  • React Native Testing Library 14.0: RNTL 14 aligns testing with React 19 and replaces the deprecated React Test Renderer with the new Test Renderer compatibility line. The release also makes core rendering and event APIs async by default, with codemods available for the most common migration work.
  • N-API v10 support landed in Hermes trunk: Native Node-API addons can now run on Hermes without modification, though the work is still experimental. If it matures, this could make more of the Node-native ecosystem available inside React Native without custom mobile rewrites. This is the culmination of years of efforts from Microsoft and community enthusiasts, like Jamie and Kraen. Congrats guys!

Callstack Incubator highlights

Voltra

Szymon is working on a new rendering engine for Voltra, which allows for dynamic UI changes without foregrounding the app. Helpful when a user changes the dimensions of the widget to see the up-to-date UI. There’s some cool engineering going under the hood to make it happen, look out for a blog post on it soon.

Voltra is getting a new rendering engine, one that is no longer tied to the application running in the foreground. This means the UI can change when the environment changes or when its dimensions are updated. Dynamic Widgets are expected to land this week. pic.twitter.com/OcK0bRIbXD

— Szymon Chmal (@ChmalSzymon) June 23, 2026

And speaking of Voltra, the same idea applied to watchOS equals React for watchOS. It requires building a custom Hermes target, but fits nicely on such a small device, with this demo occupying only 17 MB of memory and app bundle as small as 6.7 MB. After releasing this, we also learned there’s an existing react-native-watchos project doing exactly the same. We’ll see whether there’s some space for collaboration. It was a fun weekend experiment nonetheless!

Nothing to see here. Just me playing with a watchOS app written in React ⚛️ pic.twitter.com/fbIYgTOzpy

— Szymon Chmal (@ChmalSzymon) June 24, 2026

Apex

A month ago we released Apex, Callstack’s own large language model that’s fine-tuned for React Native development. We opened the waitlist and have received over 500 submissions so far. We’re constantly processing the list and contacting the companies that want to be early testers. So far, we have over 100 active users, processed over 20k requests, for a total of 1.5 billion tokens.

Apex built me an app from a single prompt that connects with LiteLLM, checks logs, and shows live request/response statistics with the corresponding token counts and costs comparison for GPT-5.5, Opus 4.8, and Apex 😎

Invitations to the private beta are coming your way RN! pic.twitter.com/83mkadbqfu

— Piotr Miłkowski (@xeonbloomfield) June 30, 2026

Agent Device

The project proved to be useful and we decided it’s time to mature from incubation to a stable project, so we moved it under Callstack’s GitHub org. A big milestone for this project, which still has so much more to offer. We’re also at nearly 3k stars on GitHub (star if you haven’t already!) and 128k weekly downloads. Thank you for using it 🫶!

I’ve concluded my “Maestro support” experiment and it turned out that with the agent-device test command you can replace maestro run and expect around 2x faster runs on Android on a powerful machine and about the same perf for iOS. Interestingly, both platforms are faster on GitHub Actions CI, usually between 1.1 and 1.5x. We support most of Maestro’s script and CLI syntax, so feel free to try it and let me know if it works and how much faster (or slower 🙈) it runs for your app.

run Maestro tests 2x faster on Android with this tool

» 𝚊𝚐𝚎𝚗𝚝-𝚍𝚎𝚟𝚒𝚌𝚎 𝚝𝚎𝚜𝚝 pic.twitter.com/Ps89YFGRhT

— Michał Pierzchała (@thymikee) June 13, 2026

After months of keeping it closed source and forgetting about it, I’ve decided to ship the proxy command (most of it was open source anyway, lol). It’s the simplest way to convert your Mac or Linux machine into a private, self-hosted device cloud / farm.

Run this command, expose the server through cloudflared or ngrok or anyhow and connect any agent running anywhere through agent-device connect by passing a secure token that the proxy server generated for you. And just like that, you can can do your mobile dev from a phone, Claude Tag or Vercel Sandbox. Give it a go.

Remote iOS Simulator control from a Linux agent container.

One command on the Mac:

» agent-device proxy

Here’s a remote Claude container connecting to my Mac through a cloudflared tunnel and controlling Maps on an iOS Simulator like it’s local. pic.twitter.com/JAPYo7HydE

— Michał Pierzchała (@thymikee) June 25, 2026

We’ve also heard you like giving agents access to agent-device to profile, diagnose and fix performance issues cheaply and fast without hiring Callstack. And we love this! Give us more examples of how you use agent-device. My DMs are open.

Feeling genuinely sorry for CTOs who recently hired React Native performance engineers on 6-figure salaries 💀@callstackio's agent-device & @aidenybai's react-doctor can already profile, diagnose and fix most performance issues for just a few pennies 🪙🤯

— Lennart Brandt (@brandtnewlabs) June 2, 2026

React Navigation

Satya is working tirelessly on React Navigation 8 (coming as soon as React Native Screens 5 becomes stable!), introducing much better type safety for both static and dynamic APIs.

React Navigation 8 brings rich types to `useNavigation` and `useNavigationState` ✨

So far, that only worked with the static API. Now we're bringing it to the dynamic API too 🚀

It won't be automatic like static config, but there was no way we were leaving it out 💪 pic.twitter.com/US5YOiQxue

— React Navigation (@reactnavigation) June 17, 2026

When you’re using React Navigation's static config (recommended), you’ll be able to use automatic shared URLs for mobile and web. If the same screen appears in multiple navigators with the same path pattern, it'll be marked as shared automatically. So the screen keeps one URL, even when it lives in different navigators.

Shared URLs also work on mobile.

If a deep link to a shared URL is received while the app is running, React Navigation will automatically open it in the current tab.

So users stay on the tab they were already on, instead of switching tabs to open the screen. https://t.co/BjzEWnbzQ0 pic.twitter.com/HS43JlVJHc

— Satya (@satya164) June 15, 2026

And as a bonus, you get nicer SFSymbol (iOS) transitions when the icon changes.

The SFSymbol component in React Navigation 8 will soon support contentTransition.

It enables nicer transition effects when the name changes, depending on the symbol.

<SFSymbol
name={name}
contentTransition={{
type: 'replace',
magic: true
}}
/> pic.twitter.com/bG3mjxKJlI

— React Navigation (@reactnavigation) June 8, 2026

React Native Bottom Tabs

Thiago got on the iOS 27 train very quickly after WWDC 2026 and implemented some new APIs in React Native Bottom Tabs, somehow getting by with the new Device Hub (for me, after using it for 3 days I gave up and got back to the regular simulator).

React Native Bottom Tabs 1.3.0 is out! ✨

🔹 Fix inactiveTintColor behavior on Liquid Glass
🔹 Fix tabBarHidden behavior
🔹 Fix tvOS compilation

🔸 New prop `experimental_bakedTintColors` to opt into Liquid Glass workaround to inactive tint colors (with drawbacks) pic.twitter.com/w7exoj6hUx

— Thiago Brezinski (@thiagobrez) June 10, 2026

React Native Brownfield

As React Native experiments with SPM support, we’ve added just that for the React Native Brownfield library as well. Along with many other fixes and updates, such as MAUI support (yup), opt-in iOS Debug mode for loading the embedded JavaScript bundle, or faster compilation.

@callstack/react-native-brownfield 3.11.0 now generates SPM artifacts if you pass --add-spm-package 🚢

This is in alignment with RN's direction in substituting CocoaPods with SPM.

New Package Manager support, same functionalities. Try it out now: https://t.co/e8u6FR7qEn pic.twitter.com/PDB9UANCWp

— Artur Morys-Magiera (@artus9033) June 10, 2026

Local LLMs

Lech is experimenting with a fully Agentic Operating System that fits on custom handheld hardware he also designed, running a local LLM to control the OS and UI. He’ll be presenting it at the AI Engineer World’s Fair.

I can't keep it secret any longer… 🤫

A handheld AI terminal. Custom hardware. Local LLM. No cloud.

Accepted into the AI Engineer World's Fair 2026 online track 🎟️ — SF, here we come.#aiewf #EdgeAI #LLM pic.twitter.com/H9SondH25f

— Lech Kalinowski (@LeSiOO) June 18, 2026

And Artur teamed up with our new friends at Hugging Face to run the SmolLM2-135M model through ONNX runtime and transformers.js on iPhone 16 to achieve 15 tokens/s. Not too shabby, especially since a few months ago we weren’t able to run LLMs through ONNX. Thank you Joshua!

The SmolLM2-135M works just fine with onnxruntime-react-native and transformers.js at ~15 tps @ iPhone 16 on CoreML ⌨️ pic.twitter.com/CxBPCRFNpI

— Artur Morys-Magiera (@artus9033) June 3, 2026

Core React Native contributions

ArrayBuffer in TurboModules got unblocked recently! Kamil landed C++, Objective-C++, and Java Pull Requests that unlock some sweet performance improvements not only for custom TurboModules, but also built-in ones like Blob, FileReader or fetch, which currently rely on base64.

ArrayBuffer in, base64 out.

With ArrayBuffer support in TurboModules, I finally added proper Blob([arrayBuffer]) support to React Native.

As a bonus, readAsArrayBuffer() got much better for binary data in FileReader, fetch(), and network requests. pic.twitter.com/VFhkaYZMEj

— Kamil Paradowski (@_ikswodarap) June 18, 2026

Hur is working on Android Gradle Plugin 9 and 10 adoption for broader React Native ecosystem.

Hopefully starting with RN 0.87+, the Android Gradle Plugin defaults to v9 with opt-outs enabled.

This means almost no disruption for the community and allows library maintainers to adopt AGP v9.

Get the full breakdown in the RFC 👇 pic.twitter.com/1XHbpXx2oS

— Hur Ali (@hurali97) June 17, 2026

There are 20 open PRs from Callstack developers right now, hope we can close some of them soon!

Blog

  • How Expensify Uses Agent-Device for Mobile Bug Evidence and Profiling by Kacper Mikołajczak and Bartłomiej Obudziński: This article shows how we use agent-device with the Expensify app across three everyday mobile workflows: verifying bug fixes with recorded before/after evidence, measuring Sentry performance spans, and profiling React renders.
  • Writing Custom Renderers for React by Maciej Jastrzębski: React Test Renderer’s deprecation forced React Native Testing Library to find a long-term replacement. In this article, Maciej Jastrzębski explains what it took to build a new JavaScript-only test renderer for RNTL and uses that process to show how React renderers actually work. It’s a practical look at React elements, Fiber, host instances, HostConfig, and React Reconciler for anyone who wants a clearer mental model of how JSX becomes UI.
  • Building Mobile QA Agents With Vercel Eve by Michał Pierzchała: This article walks through migrating a mobile QA agent from a single AI SDK tool loop to Vercel Eve. It shows how Eve’s filesystem-first structure, typed tools, and durable sessions make agent behavior easier to inspect, review, and maintain inside EAS Workflows.
  • How We Made the Brownfield Gradle Plugin 22% Faster by Hur Ali: Build performance rarely comes from one big change. This article explains how we improved the Brownfield Gradle Plugin by moving work out of Gradle’s configuration phase, introducing a task-driven pipeline, and making artifact processing more variant-aware.
  • Why Banking App Modernization Stalls Before It Ships by Łukasz Chludziński: This article looks at why banking app modernization often slows down after the strategy is set. We cover the delivery problems that show up as apps grow, from release coordination and testing to observability and cross-team ownership. We also explain why architecture alone does not solve them and what a shared platform function can do to help banks ship faster without losing control.
  • AI-Assisted React Native Migration for TV: Lessons From Zattoo by Łukasz Chludziński: Zattoo started its React Native TV migration before today’s AI-assisted workflows became common. Their story shows where AI can now support similar migrations, from onboarding and refactoring to testing and platform-specific implementation work.
  • 5 Lessons From Vibe Coding Before You Ship with AI by Hristo Totov: AI agents can turn an app idea into working code in hours. They can also overbuild simple features, miss your architecture, and quietly run up cost. In this article, Hristo Totov breaks down five practical lessons for using AI agents with better prompts, better feedback loops, and better engineering judgment.
  • On-device AI after WWDC 2026: What's new? by Mike Grabowski: Apple’s 2026 AI updates move Apple Intelligence beyond a narrow text model. Foundation Models gets image input and server-backed calls, high-end devices get a stronger on-device model, and Core AI gives custom local models a native path. We’re mapping these APIs into the React Native AI stack and working with early users on real app workflows.
  • Optimizing Self-Hosted Gemma for Production Inference by Piotr Miłkowski: We optimized self-hosted Gemma 4 31B for Apex by tuning vLLM server configuration, GPU memory use, KV cache capacity, context length, multimodal limits, tensor parallelism, and MTP speculative decoding. The article covers what changed, the performance gains we measured, the latency tradeoffs, and the production setup we recommend for faster Gemma serving.
  • AI-Supported Brownfield Migration to React Native by Hur Ali: Brownfield migration is rarely slowed by the rewrite itself. The real cost sits in setup, requirements capture, native integration, and validation. This article shows how an AI-supported workflow reduces that work from weeks to days while keeping engineering review in the loop.

Podcast, videos, and talks
‍

Events

Agent Conf Updates

Agent Conf is coming to Warsaw on September 17-18, and the venue is now set: Crowne Plaza Warsaw - The HUB. We partnered with Crowne Plaza and Holiday Inn to offer attendee hotel rates, so feel free to check them out and take advantage of the offer: https://www.agent.sh/#location.

Early Bird tickets are almost sold out and new speakers are coming soon! Keep up with all the conference updates on X or LinkedIn.

Chain React

We’re heading to Chain React at the end of July. It’s one of the main U.S. React Native conferences, organized by Infinite Red and focused fully on React Native, with speakers and attendees from across the ecosystem.

If you’ll be there on July 30-31, come find the Callstack team and say hi.

That’s it for the June edition. We’ll be back next month with more updates, experiments, and lessons from the field. See you then.

Michał

Insights

Your next read or watch starts here

Building a Software Factory: Write Specs an Agent Can Build From — cover

Nov 6Article

Building a Software Factory: Write Specs an Agent Can Build From

Learn how to research requirements, resolve open decisions, and write testable specs that AI coding agents can implement without the planning conversation.

 Large-Scale Migrations With Coding Agents: Planning, Verification, and Rollback — cover

Nov 4Article

Large-Scale Migrations With Coding Agents: Planning, Verification, and Rollback

Plan codebase migrations with coding agents using reviewable requirements, verification checks, staged rollouts, and defined rollback criteria.

Conversational Banking: From Customer Questions to Authorized Actions — cover

Nov 2Article

Conversational Banking: From Customer Questions to Authorized Actions

Explore conversational banking architecture through a card-dispute example, covering tool access, authorization, execution, observability, and human handoff.

How AI Agents Can Cut Manual QA by 30% — cover

Oct 30Article

How AI Agents Can Cut Manual QA by 30%

Explore an agentic QA workflow targeting 30% less manual effort across mobile, web, and TV, with test selection, failure triage, and validation.

Building a Software Factory: The Night My Agents Waited for Me — cover

Oct 28Article

Building a Software Factory: The Night My Agents Waited for Me

Learn how permissions, review limits, and missing product decisions stalled two overnight coding agent runs, and how their maintainer revised the workflow.

Your AI Coding Agent Still Needs an Architecture — cover

Oct 22Article

Your AI Coding Agent Still Needs an Architecture

Use explicit contracts, behavior tests, and dependency checks to guide AI coding agents and review their changes through a TypeScript favorites example.

cover

Oct 15Live Stream

Who Left the Agents Running? React Native Software Factories

Join Kewin Wereszczyński and Szymon Chmal to explore what can go wrong in a React Native software factory overnight and the controls that keep agents on track.

cover

Oct 14Podcast

When Coding Gets Faster, What Breaks Next?

Matt Hargett explains how AI moves bottlenecks across testing, deployment, infrastructure, support, and the rest of software delivery.

cover

Oct 13Podcast

MCP and Supervisor Agents in eBay's Monitoring Workflow With Leonel Candido da Silva

Leonel Candido da Silva explains eBay's agentic monitoring workflow: specialized agents, MCP, PagerDuty reports, and plans to learn from past incidents.

cover

Oct 12Podcast

AI Agent Observability With Ivana Huckova and Sven Großmann

Grafana's Ivana Huckova and Sven Großmann discuss AI agent observability, coding-agent costs, PR analytics, secret redaction, and local guardrails.

cover

Oct 7Talk

Automating Mobile QA with Cloud Agents

Michał Pierzchała shows how cloud-based QA agents can test real iOS and Android user flows and bring screenshots, recordings, and logs into pull requests.

cover

Oct 1Live Stream

Can Jev Make AI Agent Decisions Faster?

Explore Jev with Kewin Wereszczyński and Szymon Chmal: how it works, its approach to faster agent decisions, and possible local alternatives.

cover

Mar 19Tutorial

The Hard Way vs. The React Native AI SDK Way: Stop Writing Custom Modules for Every Model

Learn how React Native AI uses a unified provider model to switch between cloud and on-device LLMs without rewriting application logic, enabling reliable AI experiences online and offline.

cover

Mar 12Tutorial

Build Smarter Apps: Tool Calling & AI Orchestration Explained

Learn how on-device models in React Native can call tools, interact with external APIs, and return structured outputs you can use directly in application logic.

cover

Mar 5Tutorial

MLC LLM + React Native: On-Device AI Without the Pain

Learn how to run third-party on-device LLMs in React Native using MLC LLM. Choose your models, run them efficiently across platforms, and keep a unified JavaScript API with React Native AI.

cover

Feb 24Tutorial

Intelligent Fallbacks with Apple Intelligence in React Native

Learn how to use Apple’s built-in Foundation Models in React Native apps, reduce memory usage, and enable fast, fully on-device AI with React Native AI Apple.

cover

Feb 10Tutorial

What Is the React Native AI SDK? A Complete Intro & Quickstart

Learn why on-device AI matters for React Native apps, how local LLMs behave offline, and what problems React Native AI is designed to solve from day one.

cover

Jan 29Tutorial

Implementing an Android TurboModule with Kotlin

Learn how to implement a React Native TurboModule on Android, from the TypeScript spec and Codegen to the Kotlin implementation and package registration.

cover

Jan 19Tutorial

Working with Different Threads in Swift TurboModules

Learn how JavaScript, native module, background, and main threads interact in React Native TurboModules, and how to use GCD queues to run async work safely in Swift.

cover

Jan 9Tutorial

How to Add Type-Safe Constants to Swift TurboModules

Learn how to expose typed, immutable constants from a Swift TurboModule using Codegen, and get full end-to-end type safety between native and JavaScript.

cover

Dec 30Tutorial

Adding Event Emitters to Your TurboModule in Swift

Learn how to emit native events from a Swift TurboModule and subscribe to them in JavaScript, including proper memory management and Codegen integration.

cover

Dec 22Tutorial

Writing Your First TurboModule in Swift

Learn how to build a fully working TurboModule in Swift, integrate it with Codegen, and bridge it through Objective‑C inside an Expo app.