Getting Started with the Journey module for React Native
PingOne Advanced Identity Cloud PingAM React Native
The Orchestration SDK for React Native brings PingOne Advanced Identity Cloud and PingAM authentication journeys to React Native applications.
It wraps the Orchestration SDK for Android and the Orchestration SDK for iOS as React Native TurboModules, exposing a single TypeScript API that works across both platforms.
@startuml diagram-react-native-sdk-architecture.svg
/'
Copyright © 2026 Ping Identity Corporation
This code is to be used exclusively in connection with Ping Identity Corporation
software or services.
Ping Identity Corporation only offers such software or services to legal entities
who have entered into a binding license agreement with Ping Identity Corporation.
'/
top to bottom direction
skinparam linetype ortho
skinparam nodesep 90
skinparam ranksep 60
'skinparam defaultFontName sans-serif
'skinparam defaultFontSize 13
skinparam rectangle {
BackgroundColor #f0f7ff
BorderColor #4a90d9
FontColor #1a1a1a
}
skinparam component {
BackgroundColor #ffffff
BorderColor #4a90d9
FontColor #1a1a1a
}
skinparam cloud {
BackgroundColor #e8f4e8
BorderColor #3a9a3a
}
rectangle "React Native Application" as APP #e8f0fb {
component "useJourney · useJourneyForm" as HOOKS
}
rectangle "Orchestration SDK for React Native" as RNLAYER #ddeeff {
component "Orchestration SDK for React Native\nJourney module" as JOURNEY
}
component "Optional modules:\nrn-oidc · rn-storage\nrn-fido · rn-logger" as OPTIONAL #fffbe6
rectangle "React Native Bridge" as BRIDGE #f5f0ff {
component "Android TurboModule" as ANDROID_BRIDGE
component "iOS TurboModule" as IOS_BRIDGE
}
rectangle "Native SDKs" as NATIVE #fff0e8 {
component "Orchestration SDK for Android\nJourney module" as ANDROID_SDK
component "Orchestration SDK for iOS\nJourney module" as IOS_SDK
}
cloud "Advanced Identity Cloud/PingAM" as SERVER
HOOKS -down-> JOURNEY : "TypeScript API "
JOURNEY -right-> OPTIONAL : Opt-in\nmodules
JOURNEY -down-> ANDROID_BRIDGE : "Android "
JOURNEY -down-> IOS_BRIDGE : "iOS "
ANDROID_BRIDGE -down-> ANDROID_SDK
IOS_BRIDGE -down-> IOS_SDK
ANDROID_SDK -down-> SERVER : "HTTPS "
IOS_SDK -down-> SERVER : "HTTPS "
@enduml
One codebase targets Android and iOS by delegating to each platform’s native SDK at runtime.
Optional packages for storage, logging, FIDO, and OIDC slot in independently so you include only what your app needs.
- One API, two platforms
-
The Orchestration SDK for React Native wraps the Orchestration SDK for Android and the Orchestration SDK for iOS behind a single TypeScript interface using React Native TurboModules.
You call the same
createJourneyClient()anduseJourney()APIs regardless of which platform is running, and the native bridge handles the rest.This means your team works entirely in TypeScript and inherits the security, reliability, and compliance guarantees of the native Orchestration SDKs without needing to maintain separate Android and iOS codebases.
- Native security, zero native code
-
Authentication logic, including secure storage, device binding, biometrics, and attestation, all run inside the native SDK on each platform.
The React Native layer orchestrates the flow but never handles sensitive material directly.
Your app gets production-grade security by default, and the native SDKs stay upgradeable independently of your JavaScript layer.
- Journeys as a predictable state machine
-
Every step of an authentication journey resolves to one of four node types:
ContinueNode(more input required),SuccessNode,FailureNode, orErrorNode.The four node types give you an exhaustive, unambiguous set of states — your app always knows where it is in the journey.
- Callbacks with intent
-
Each callback in a
ContinueNodecarries anexecutionModethat tells your app what to do with it: collect input from the user (manual), display information without input (output_only), or hand off to a native integration before continuing (integration_required).You never need to parse raw callback JSON or write per-type branching logic from scratch —
executionModetells your app how to handle each callback: whether to collect input, display information, or hand off to a native integration. - Bring your own UI
-
The
useJourneyFormhook normalizes all callbacks in a node into a flat list of typed fields — prompt, kind, validation state, default value, and options — without rendering anything itself.Your components always know exactly what to render, and the SDK handles field identity, submit planning, and value validation so they stay focused on presentation.
- Composable by default
-
The SDK is a monorepo of independent packages:
rn-journey,rn-oidc,rn-storage,rn-logger,rn-fido, and more.Each is a standalone NPM module and can be added, or not, without affecting the others.
A minimal integration needs only
rn-coreandrn-journey. Everything else is opt-in, keeping your bundle lean and your dependency surface small.
In this section you will learn how to add the Journey module, configure it to communicate with the identity server, and write the code to initiate a login.
You’ll handle each step of an authentication journey, from collecting user credentials to processing the final session token upon success or handling errors if the login fails.