app directory. This project uses file-based routing.
This repo also has a
demo branch that you can switch to if you’d like to inspect a completed version of the app first.Prerequisites
- Node.js
- NPM
- a Privy account
- a Pimlico account
For Android
For Android
- Android Studio (API version 35 and above)
- Guide to setup Android Studio for Expo is available here
Setting up the Privy account
Setting up the Privy account
- Create app:


- Set up login methods:

- Enable email:

- Enable “Automatically create embedded wallets on login” and select “EVM Wallets”:

- Disable everything in Socials.
- Go to “Advanced” and Make sure only “Web2: Email, SMS, and socials” under “Prioritize options displayed” is enabled:

A few more steps are required but we will continue once the dependencies for the project are installed.
Get started
This template also has a
demo branch that you can switch to in order to view the demo project.You can switch using the following command:Install dependencies
Set up the environment variables
-
Create a copy of
.env.example: -
Add the following environment variables to it
How to get `EXPO_PUBLIC_PRIVY_APP_ID`
How to get `EXPO_PUBLIC_PRIVY_APP_ID`
- Go to your Privy Dashboard and click on
Homefor your Privy app and click onRetrieve API keys.

- You will find
App IDunderAPI keys.

How to get `EXPO_PUBLIC_PRIVY_CLIENT_ID`
How to get `EXPO_PUBLIC_PRIVY_CLIENT_ID`
- Go to your Privy Dashboard, click
Homefor your Privy app, and clickRetrieve API keys.

- Click on the
Clientstab at the top, then clickEdit.

- Under
Allowed app identifiers, paste the name of the app bundle and clickAdd.
app.json. For Android, it is the package property. For iOS, it is the bundleIdentifier property.
- Copy the
Client IDand use it as the value forEXPO_PUBLIC_PRIVY_CLIENT_ID.

How to get `EXPO_PUBLIC_PIMLICO_BUNDLER_URL`
How to get `EXPO_PUBLIC_PIMLICO_BUNDLER_URL`
- Sign up on Pimlico and go to “API Keys”:

- Create a new API key:

- Click on “RPC URLs”:

- Search for Monad Testnet and copy the URL. Use this as
EXPO_PUBLIC_PIMLICO_BUNDLER_URL:

Start the app
Start the app either in the Expo Go app, or natively. In the Expo Go app:-
For iOS:
-
For Android:
-
For iOS:
-
For Android:
Template folder structure
Send sponsored transactions
Below is an example of how to use the useSmartWallet hook to send sponsored transactions. You can either modify the code to send your own transactions or integrate it into your existing project.Send batch sponsored transactions
You can also send batches of sponsored transactions:useSmartWallet.tsx to inspect the implementation details.
Modify the app name
| iOS | Android |
|---|---|
name property in app.json:
app.json
Modify the app icon and splash screen
App icon
| iOS | Android |
|---|---|
assets/images/icon.png.
Recommended app icon size is 1024x1024.
If you name the icon file something else, then edit the icon property in app.json accordingly.
app.json
Splash screen
| iOS | Android |
|---|---|
![]() | ![]() |
splash object in app.json to modify the splash screen.
app.json
Change fonts
You can create afonts folder inside assets to store your custom font files.
To use the custom font, load the font in app/_layout.tsx.
Example:
app/_layout.tsx
Modify the deeplinking scheme
Edit thescheme property in app.json to select your custom deeplinking scheme:
app.json
rnwalletapp, then rnwalletapp:// URLs would open your app when tapped.
This is a build-time configuration; it has no effect in Expo Go.
Edit the landing screen
You can edit the landing page by editingscreens/Home.tsx.
In the demo branch, we ended up adding more complex functionality, which is why Home.tsx became a folder.
Modify the package/bundle identifier
When publishing app to the app store, you need to have a unique package/bundle identifier, which you may set inapp.json.
app.json
Check out the demo app
If you’d like to try a completed version of the app before you start developing, switch to thedemo branch:
Demo app folder structure
Learn more
To learn more about developing your project with Expo, Privy, and Monad, check out the following resources:- Expo docs | guides | tutorial
- Privy: create a wallet | send a transaction | sign a transaction
- Permissionless: smart wallet client | sending transactions
- Monad: supported tooling and infra






