# Add Siri Shortcuts and App Intents to a React Native App

> By Lawrence Arya, Founder & CEO of VP0. Published 2026-06-08. 7 min read.
> Source: https://vp0.com/blogs/siri-shortcuts-integration-react-native-ai

**TL;DR.** Siri Shortcuts on modern iOS are built with App Intents, and they live in native Swift, not JavaScript, so a React Native app exposes them through a small native layer. You define each action as an App Intent, donate the shortcuts so Siri and Apple Intelligence can surface them, and handle the invocation by opening your RN app to the right screen or running in the background. Start from a template that pairs the native intent with the RN screen it triggers.

## Siri Shortcuts are App Intents now

On modern iOS, a Siri Shortcut is an [App Intent](https://developer.apple.com/documentation/appintents). The older [SiriKit](https://developer.apple.com/documentation/sirikit) intents and the manual donation flow still exist, but App Intents is the framework Apple now points you to: you describe an action your app can take, give it a title and parameters, and the system makes it available to Siri, the Shortcuts app, Spotlight, and Apple Intelligence. So integrating Siri Shortcuts is really about exposing your app's actions as App Intents and handling them when they fire.

The actions worth exposing are the verbs of your app: log a workout, start a timer, add an item, open a specific screen. Each becomes one intent. The skill is choosing a few genuinely useful actions rather than wrapping every button.

## Why this is native work in a React Native app

Here is the part to be clear about. App Intents are defined in Swift, in your native iOS target, not in JavaScript. A [React Native](https://github.com/facebook/react-native) app, with more than 125,000 stars behind it, runs your UI, but the intents live in the native layer, so integrating Siri Shortcuts means writing a small amount of Swift and bridging it to your JS code. In Expo, you add that native code through a config plugin rather than by ejecting.

This is the same shape as other system integrations that cannot live purely in JS, like an [iOS share extension](/blogs/ios-share-extension-ui-template-react-native/): the system feature is native, and React Native is the app it talks to. Accepting that up front saves a long search for a pure-JavaScript shortcut API that does not exist.

## Defining an App Intent and donating the shortcut

An App Intent is a Swift struct with a title, optional parameters, and a `perform` method that does the work and returns a result. You group your intents in an `AppShortcutsProvider` so the system knows the phrases that trigger them, which is what lets a user say "log my water in MyApp" without setting anything up. Donating the shortcut, telling the system this action just happened or is available, is what surfaces it in Siri suggestions and Spotlight at the right moment.

Keep each intent small and single-purpose. An intent that tries to do three things is hard for Siri to describe and hard for a user to trust, so one verb per intent is the rule.

## Handling the invocation in your RN app

When a shortcut fires, the intent's `perform` runs in Swift, and you decide what it does. Two patterns cover most apps. For an action that needs your UI, the intent opens the app and hands off to React Native, usually through a deep link or a native event, so your JS routes to the right screen with the intent's parameters. For an action that can run without UI, like logging a value, `perform` does the work natively and returns a confirmation, so Siri completes it without ever opening the app. The honest detail is the bridge: the native intent and the RN screen have to agree on the route and the data, or the shortcut opens the app to the wrong place.

## Where Apple Intelligence fits

App Intents are also how your app plugs into Apple Intelligence. Because each intent declares what it does and what it needs, the system can surface it, chain it with other intents, and let users invoke it in natural language. You do not train anything; you describe your actions well, and clear titles, sensible parameters, and accurate donations are what make them discoverable. That is the real "AI" work here: good intent design, not a model.

## Building it from a template

The pairing that trips people up is the native intent and the RN screen it triggers. A free [VP0](https://vp0.com) design gives you the in-app screens an intent routes to, with a machine-readable source page, so pasting the link into Claude Code or Cursor lets the agent build the RN side against a real structure while you wire the Swift intent to it. The deep-link-and-handle pattern also shows up in a [Dynamic Island live activity for an AI agent](/blogs/ios-dynamic-island-live-activities-ai-agent/) and a [Light Phone-style launcher with shortcut tiles](/blogs/light-phone-launcher-clone-ios-shortcut-ui/).

## Common mistakes integrating Siri Shortcuts

The frequent ones come from expecting JavaScript to do native work. Searching for a pure-JS shortcut API wastes time, because the intents must be Swift. Exposing every action as an intent overwhelms Siri and the user, so pick a few verbs. Skipping the donation means the shortcut exists but never appears in suggestions. Mismatching the intent's route and the RN screen opens the app to the wrong place. And running a UI-dependent action as a background intent leaves the user with a silent no-op.

## Key takeaways: Siri Shortcuts in React Native

- **Siri Shortcuts are App Intents.** Describe your app's actions and the system surfaces them.
- **The intents are native Swift.** React Native runs the UI; the intents live in the iOS target and bridge to JS.
- **One verb per intent.** Small, single-purpose actions are easier for Siri to describe and users to trust.
- **Decide UI versus background per intent.** Open the app and route, or run natively and confirm.
- **Start from the screens an intent triggers.** A free VP0 design gives the agent the RN side to wire the Swift intent to.

## Frequently asked questions

**How do I add Siri Shortcuts to a React Native app?** Define each action as an App Intent in Swift in your iOS target, group them in an AppShortcutsProvider with trigger phrases, and donate them so Siri and Spotlight surface them. React Native runs your UI, so bridge the intent to your JS, opening the app to the right screen via a deep link for UI actions, or running natively and returning a confirmation for background ones. In Expo, add the native code through a config plugin. Starting from a template for the screens an intent routes to keeps the RN side aligned with the Swift intent.

**What is the safest way to build this with Claude Code or Cursor?** Split the work cleanly: let the agent build the React Native screens an intent routes to, and write the App Intent in Swift yourself or with the agent's help, then agree on the deep link and parameters between them. A free VP0 design gives Claude Code or Cursor a real screen structure to build the RN side against, so the bridge has a defined target. That avoids the common failure where the intent fires and the app opens to the wrong screen because the native and JS sides never agreed on the route.

**Can VP0 provide a free template for the screens a shortcut opens?** Yes. VP0 has free React Native and SwiftUI designs for the in-app screens a shortcut routes to, each with a machine-readable source page. Because the screen exists, your agent builds the RN side against it while you wire the native App Intent to the same route and parameters, which is the handoff that usually goes wrong in hand-built shortcut integrations.

**Can I define Siri Shortcuts in JavaScript in React Native?** No. App Intents and SiriKit intents are defined in Swift in your native iOS target, so there is no pure-JavaScript API that registers a real Siri Shortcut. React Native runs your app and receives the invocation, but the intent itself is native. In Expo you add that Swift code through a config plugin instead of ejecting, and you bridge the result to your JS with a deep link or a native event.

**What common errors happen when vibe coding Siri Shortcuts?** Looking for a JavaScript shortcut API that does not exist, exposing too many actions so Siri cannot describe them, and skipping the donation so the shortcut never appears in suggestions are the frequent ones. Mismatching the intent's route and the React Native screen opens the app to the wrong place, and running a UI-dependent action as a background intent leaves a silent no-op. Keep intents native, small, donated, and aligned with the screen they trigger.

## Frequently asked questions

### How do I add Siri Shortcuts to a React Native app?

Define each action as an App Intent in Swift in your iOS target, group them in an AppShortcutsProvider with trigger phrases, and donate them so Siri and Spotlight surface them. React Native runs your UI, so bridge the intent to your JS, opening the app to the right screen via a deep link for UI actions, or running natively and returning a confirmation for background ones. In Expo, add the native code through a config plugin. Starting from a template for the screens an intent routes to keeps the RN side aligned with the Swift intent.

### What is the safest way to build this with Claude Code or Cursor?

Split the work cleanly: let the agent build the React Native screens an intent routes to, and write the App Intent in Swift yourself or with the agent's help, then agree on the deep link and parameters between them. A free VP0 design gives Claude Code or Cursor a real screen structure to build the RN side against, so the bridge has a defined target. That avoids the common failure where the intent fires and the app opens to the wrong screen because the native and JS sides never agreed on the route.

### Can VP0 provide a free template for the screens a shortcut opens?

Yes. VP0 has free React Native and SwiftUI designs for the in-app screens a shortcut routes to, each with a machine-readable source page. Because the screen exists, your agent builds the RN side against it while you wire the native App Intent to the same route and parameters, which is the handoff that usually goes wrong in hand-built shortcut integrations.

### Can I define Siri Shortcuts in JavaScript in React Native?

No. App Intents and SiriKit intents are defined in Swift in your native iOS target, so there is no pure-JavaScript API that registers a real Siri Shortcut. React Native runs your app and receives the invocation, but the intent itself is native. In Expo you add that Swift code through a config plugin instead of ejecting, and you bridge the result to your JS with a deep link or a native event.

### What common errors happen when vibe coding Siri Shortcuts?

Looking for a JavaScript shortcut API that does not exist, exposing too many actions so Siri cannot describe them, and skipping the donation so the shortcut never appears in suggestions are the frequent ones. Mismatching the intent's route and the React Native screen opens the app to the wrong place, and running a UI-dependent action as a background intent leaves a silent no-op. Keep intents native, small, donated, and aligned with the screen they trigger.

---
*Published on the [VP0 Journal](https://vp0.com/blogs). Free to read, index and cite with attribution.*
