
Template details
Solito iOS Web Payments
Solito monorepo example enabling zero-commission Stripe web checkout inside an iOS app, with Apple Pay supported.
About this template
Solito iOS Web Payments is a Solito monorepo example that redirects iOS app users to a Stripe-powered web checkout, letting developers sell digital goods without Apple's commission. It was generated with npx create-solito-app@latest and deploys its Next.js API routes to Vercel.
What is Solito iOS Web Payments?
Solito iOS Web Payments is a boilerplate monorepo that pairs an Expo/React Native iOS app with a Next.js web app so purchases happen through Stripe checkout in the browser instead of in-app purchase. It takes a selectable Stripe product and price as configuration and outputs a cross-platform app plus Next.js API routes that start a checkout session and handle Stripe webhooks. As of April 30, 2025, the approach avoids Apple's commission while still supporting Apple Pay in the web flow.
Key Features
- Cross-platform navigation —
solitohandles navigation shared between the native and web apps. - Next.js 15 API routes — the
apps/web/apifolder holds checkout routes and an Apple.well-knownroute for domain association. - Expo 53 + React Native — the native app in
apps/nativeruns as a dev client built withnpx expo run:ios. - Stripe payments —
stripepowers checkout, configured with a publishable key, secret key, webhook secret, price ID, and product ID. - Firebase authentication — included for auth and easily swappable for another provider.
- React Navigation 7 and React 19 — with React Compiler enabled; Solito compatibility docs cover React 19.
- One-click API deploy — a Vercel Deploy button clones the repo and prompts for all required environment variables.
Who is it for?
- iOS developers selling digital goods — start a Stripe checkout in Safari from the native app instead of complying with in-app purchase.
- Cross-platform teams — share screens in
packages/appbetween Expo and Next.js, organized by feature rather than ascreensfolder. - React Native developers new to Solito — use the starter layout (apps, packages/app, provider, navigation) as a reference monorepo.
Use cases
- Subscription and one-off sales: configure Stripe keys and price IDs to sell a product through web checkout from an iOS app, with Apple Pay available on supported devices.
- Auth-gated purchases: use the bundled Firebase setup to tie checkout sessions to signed-in users, swapping in another provider if preferred.
- Fast API prototyping: deploy only the Next.js web app via the Vercel button to test checkout and webhook routes before building the native client.
How does it work?
Install with yarn, run the web app with yarn web, and build the native dev client with npx expo run:ios inside apps/native. Afterwards, yarn native starts Expo with the dev client. The Apple .well-known route in apps/web/api provides the domain association used for web payment flows.
FAQ
Does using web checkout on iOS still allow Apple Pay?
Yes. The README states that even though users are redirected to the web to finish a purchase, Apple Pay remains supported in the web checkout flow. As of April 30, 2025, Apple does not charge a commission on this web-based checkout.
Is authentication included?
The template ships with Firebase for authentication, but the README notes it can easily be swapped out for another provider. Config is passed through the NEXT_PUBLIC_FIREBASE_CONFIG_JSON and FIREBASE_SERVICE_ACCOUNT_JSON environment variables.
What environment variables are required?
The Vercel deploy button lists APPLE_TEAM_ID, FIREBASE_SERVICE_ACCOUNT_JSON, NEXT_PUBLIC_APP_URL, NEXT_PUBLIC_BUNDLE_IDENTIFIER, NEXT_PUBLIC_FIREBASE_CONFIG_JSON, NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY, STRIPE_PRICE_ID, STRIPE_PRODUCT_ID, STRIPE_SECRET_KEY, and STRIPE_WEBHOOK_SECRET.
Does it include the native app deployment?
The Vercel button deploys only the API routes, with the web app as the root directory. The iOS app is built locally as a dev client through Expo and is not deployed by that button.













