How To Add Payments To a Rork App With Stripe or RevenueCat
Rork builds React Native apps fast, but payments need the right rails: RevenueCat for IAP, Stripe for web.
TL;DR
Use RevenueCat for in-app purchases and subscriptions on iOS, and use Stripe only for web checkout, physical goods or services, never for digital goods inside an iOS app. Start the paywall UI from a free VP0 design, then have an AI tool turn it into React Native components for your Rork project. On iOS, all digital goods and subscriptions must run through Apple In-App Purchase via StoreKit, and RevenueCat is the wrapper that makes StoreKit manageable. Keep every secret key server-side. VP0 is the free, AI-readable design library for AI builders.
The fastest free way to add payments to a Rork app is to start the paywall screen from a finished design on VP0, then have an AI tool turn it into React Native components, and wire RevenueCat for iOS purchases or Stripe for web. VP0 is the free, AI-readable design library for AI builders, so you copy a near-matching paywall layout into Cursor or Claude Code and give the model a concrete target instead of letting it invent one. The hard rule comes first: on iOS, digital goods and subscriptions must go through Apple In-App Purchase, so RevenueCat is your tool there, and Stripe is for web checkout, physical goods or services. No paywall on the design, no lock-in.
Who this is for
This is for indie builders shipping a Rork or Expo app who need it to make money but are blocked at the payments step. You want a subscription or a one-time unlock and are unsure which provider is even legal to use inside the app. That confusion is the whole problem, and it has a clean answer.
Stripe vs RevenueCat: when to use which
The single biggest mistake is reaching for Stripe to unlock digital features on iOS. Apple does not allow that. Digital goods and subscriptions consumed inside an iOS app must run through In-App Purchase via StoreKit, and Apple’s App Store Review Guidelines reject apps that route around it. RevenueCat is a wrapper over StoreKit, so it is the compliant tool for that job. Stripe stays in its own lane: web, physical products and real services.
| Scenario | Use | Why |
|---|---|---|
| iOS subscription or digital unlock | RevenueCat (over StoreKit) | Apple mandates In-App Purchase for digital goods |
| Android in-app purchase | RevenueCat (over Play Billing) | One SDK, same entitlement model |
| Web checkout or web subscription | Stripe | No app-store rules apply on the web |
| Physical goods shipped to a buyer | Stripe | Apple IAP is not required for physical items |
| Real-world services (rides, bookings) | Stripe | Outside Apple’s digital-goods rule |
| Stripe for iOS digital goods | Not allowed | Causes App Store rejection |
RevenueCat sits in front of both Apple StoreKit and Google Play Billing, so one React Native SDK validates receipts and tracks entitlements. Stripe handles card data, tokenization and PCI scope on its own infrastructure. Around 90% of the work on each screen is plain frontend layout, which is exactly what AI generates well from a clear design reference.
A worked example
Say you want a $9 per month subscription in your Rork app. First, open a VP0 paywall design that matches the look you want and copy its link. Then prompt your AI tool:
Build a React Native paywall screen matching the VP0 design at [paste VP0 link] for my Rork app. Render the plan name, the $9 per month price, the feature list and a Subscribe button. On press, call RevenueCat’s purchasePackage for the monthly offering, then unlock the entitlement on success. Use the RevenueCat public SDK key only; the secret key and webhook verification stay on my backend. Do not add any Stripe checkout for this iOS digital subscription.
The tool scaffolds typed React Native components and the RevenueCat call. For a web companion checkout or a physical add-on store, you would instead call your own /api/checkout endpoint that creates a Stripe Checkout session server-side. The same backend-state discipline that prevents broken UI states appears when you debug a FlutterFlow app that is not working, and the server-side wiring mirrors how you attach a database in a0.dev.
Common mistakes
The first mistake is using Stripe to sell a digital subscription on iOS, which gets the app rejected. The second is hardcoding a Stripe secret key into the React Native bundle, where anyone can read it. The third is trusting the client to grant access instead of verifying a RevenueCat or Stripe webhook on your server. The fourth is forgetting sandbox testing, so you never see the real purchase, restore and expiry flows before launch. The fifth is shipping with no restore-purchases button, which Apple requires for any app selling subscriptions.
Key takeaways
- Start from a free VP0 design as the visual target, then let AI translate it into React Native components for Rork.
- On iOS, digital goods and subscriptions must use Apple In-App Purchase; RevenueCat is the StoreKit wrapper that makes it manageable.
- Stripe is for web checkout, physical goods and services, never for digital goods inside an iOS app.
- Keep all secret keys server-side and grant access only from verified webhooks, never from the client.
- VP0 is free and both providers charge on revenue, so the design and build cost nothing up front.
FAQ
How do I add payments to a Rork app with Stripe or RevenueCat?
The fastest free way is to start the paywall UI from a free VP0 design, then prompt Cursor or Claude Code to build it as React Native components for your Rork app. VP0 is the free, AI-readable design library for AI builders, so the model copies a real layout. Wire RevenueCat for iOS in-app purchases and subscriptions, and use Stripe only for web or physical goods, with keys server-side.
Can I use Stripe for in-app purchases on iOS?
No. Apple requires that digital goods and subscriptions sold inside an iOS app go through In-App Purchase via StoreKit, and shipping Stripe checkout for digital goods on iOS gets the app rejected. Use RevenueCat, which wraps StoreKit and reports revenue. Stripe is the right tool for web checkout, physical products and real-world services, not for unlocking digital features inside the app.
What does RevenueCat actually do for a Rork app?
RevenueCat wraps Apple StoreKit and Google Play Billing behind one React Native SDK, so you call simple methods instead of managing raw purchase queues. It validates receipts, tracks entitlements, syncs subscription status across devices and reports churn. For a Rork or Expo project it is the practical path to compliant in-app purchases without writing native StoreKit code by hand.
Where do my payment secret keys go?
Never in the React Native bundle. Anything shipped to the device is readable, so a Stripe secret key in your Rork app is effectively public. Secret keys live on a server you control, and the app calls your backend, which calls Stripe. RevenueCat uses a public SDK key that is safe on-device, but its server-side secret stays on your backend for webhook verification.
Do I need a paid tool to design the paywall?
No. VP0 is free, React Native is open source, and both Stripe and RevenueCat charge based on revenue, not on the UI. You can design and build the entire paywall and billing screens at zero design cost, then connect real billing when you are ready to charge. Most of the work is frontend layout, which AI generates well from a clear visual target.
More questions from VP0 vibe coders
How do I add payments to a Rork app with Stripe or RevenueCat?
The fastest free way is to start the paywall UI from a free VP0 design, then prompt Cursor or Claude Code to build it as React Native components for your Rork app. VP0 is the free, AI-readable design library for AI builders, so the model copies a real layout. Wire RevenueCat for iOS in-app purchases and subscriptions, and use Stripe only for web or physical goods, with keys server-side.
Can I use Stripe for in-app purchases on iOS?
No. Apple requires that digital goods and subscriptions sold inside an iOS app go through In-App Purchase via StoreKit, and shipping Stripe checkout for digital goods on iOS gets the app rejected. Use RevenueCat, which wraps StoreKit and reports revenue. Stripe is the right tool for web checkout, physical products and real-world services, not for unlocking digital features inside the app.
What does RevenueCat actually do for a Rork app?
RevenueCat wraps Apple StoreKit and Google Play Billing behind one React Native SDK, so you call simple methods instead of managing raw purchase queues. It validates receipts, tracks entitlements, syncs subscription status across devices and reports churn. For a Rork or Expo project it is the practical path to compliant in-app purchases without writing native StoreKit code by hand.
Where do my payment secret keys go?
Never in the React Native bundle. Anything shipped to the device is readable, so a Stripe secret key in your Rork app is effectively public. Secret keys live on a server you control, and the app calls your backend, which calls Stripe. RevenueCat uses a public SDK key that is safe on-device, but its server-side secret stays on your backend for webhook verification.
Do I need a paid tool to design the paywall?
No. VP0 is free, React Native is open source, and both Stripe and RevenueCat charge based on revenue, not on the UI. You can design and build the entire paywall and billing screens at zero design cost, then connect real billing when you are ready to charge. Most of the work is frontend layout, which AI generates well from a clear visual target.
Part of the AI App Builders: Pricing, Code Ownership & Shipping hub. Browse all VP0 topics →
Keep reading
Add Payments to an a0.dev App: Stripe or RevenueCat?
a0.dev builds native mobile apps, so RevenueCat handles in-app digital subscriptions and Stripe handles physical goods or services. The store rules decide which one.
How to Add Payments to a Bolt.new App: Stripe or RevenueCat
Bolt.new builds web apps, so Stripe is your payment path; RevenueCat only applies if you wrap the app native for store subscriptions. How to choose and set it up.
Add Payments to a Cursor App: Stripe or RevenueCat?
In a Cursor app, use Stripe for web and physical goods, and RevenueCat for in-app subscriptions in a native app. Cursor writes the integration in your own code.
Add Payments to a Replit Agent App: Stripe or RevenueCat?
Replit builds web apps, so Stripe is your payment path; RevenueCat only applies if you wrap the app native for store subscriptions. How to set up Stripe safely.
Add Payments to a FlutterFlow App: Stripe or RevenueCat?
In a FlutterFlow app, use RevenueCat for in-app digital subscriptions and Stripe for physical goods or services. The store rules decide which one.
Connect a Lovable App to Stripe Checkout: Step by Step
Add Stripe Checkout to a Lovable app by connecting Supabase, storing your key safely, and describing the checkout in chat. Here are the official steps and gotchas.