This repository contains the core React Native application built with Expo Router and the Soroban Smart Contract SDK for the Ding Payments network.
- Node.js: v18 or later
- Package Manager:
npm - Development Target: Physical iOS or Android device (required for NFC, passkeys, and SecureStore biometrics); simulator/emulator for UI-only work
⚠️ Native Framework Limitation: This application leverages advanced hardware integrations including NFC capabilities and Passkey WebAuthn modules. These features cannot execute inside standard Expo Go. You must use an Expo Development Build (EAS Development Build) to validate NFC, passkeys, and SecureStore functionality on physical devices.
-
Clone the Repository & Fetch Dependencies
npm install
-
Build requirements for native features
- NFC and passkey research require an Expo development build or custom native runtime.
- Run
npx expo prebuildandnpx expo run:android/npx expo run:iosfor device validation. - Use
npm run dev-clientto launch a dev-client session after native dependencies are installed.
-
Install and authenticate EAS CLI
npm install -g eas-cli eas login
On first setup, link the project with
eas init. Build profiles live ineas.json(development,preview,production). -
Create a development build
npm run dev:build:android # or npm run dev:build:iosInstall the resulting build on a physical device (
.apkon Android; iOS via internal distribution or TestFlight). -
Start the dev client
npm run dev-client
This runs
expo start --dev-clientand connects the installed development build to Metro. -
Native rebuild required Rebuild and reinstall the development build after changes to:
app.config.tsplugins, permissions, or entitlements- native dependencies (for example
expo-dev-client,expo-secure-store,react-native-nfc-manager,react-native-passkey)
JavaScript-only changes do not require a native rebuild.
-
Expo Go limitations Do not use Expo Go to validate NFC, passkeys, or SecureStore with biometric authentication. These flows require a development build with
expo-dev-client. -
Simulator vs physical device
Feature Simulator / emulator Physical device General UI / routing Yes Yes NFC No Yes (required) Passkeys Limited / unreliable Yes (required) SecureStore + biometrics Limited Yes (required) Use a physical device for native capability smoke tests, including the
/c05spike page.
- Passkey ADR:
docs/adr-passkey-library.md - Stellar ADR:
docs/adr-stellar-sdk.md - NFC ADR:
docs/adr-nfc-library.md - Spike PoC page: open
/c05in the app after starting the dev-client.
This is an Expo project created with create-expo-app.
-
Install dependencies
npm install
-
Start the app
npx expo start
For NFC, passkeys, and SecureStore testing, use
npm run dev-client(expo start --dev-client) with an installed development build—not Expo Go.
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go, a limited sandbox for trying out app development with Expo
You can start developing by editing the files inside the app directory. This project uses file-based routing.
When you're ready, run:
npm run reset-projectThis command will move the starter code to the app-example directory and create a blank app directory where you can start developing.
- To set up ESLint for linting, run
npx expo lint, or follow our guide on "Using ESLint and Prettier" - If you'd like to set up unit testing, follow our guide on "Unit Testing with Jest"
- Learn more about the TypeScript setup in this template in our guide on "Using TypeScript"
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.