react-native-purchases puts StoreKit and Play Billing behind one API
React Native in-app purchases and subscriptions made easy. Support for iOS, Android and web.
At a glance
- What is it?
- React Native Purchases is the client for RevenueCat's subscription tracking system, wrapping StoreKit, Google Play Billing and RevenueCat Web Billing so a React Native app can fetch products, take payments and read subscription status through one interface. The SDK is the open source part; the service behind it is a hosted backend.
- Who is it for?
- Adopt react-native-purchases if you are shipping subscriptions from a React Native app and do not want to implement StoreKit and Google Play Billing separately, since the SDK handles both and adds a server-side validation path. Do not adopt it if you need to avoid a third-party service in the purchase flow, because the client is only half of the system, with entitlement state held on RevenueCat's servers.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One API over three billing systems
The library is described as an open source framework that provides a wrapper around StoreKit, Google Play Billing, RevenueCat Web Billing and the RevenueCat backend to make implementing in-app purchases in React Native easy. The platform span is the point. Without it, a subscription app on React Native has two completely different purchase implementations, two receipt formats, two renewal semantics and two ways of reporting entitlement, and any bug has to be fixed twice. The SDK's stated capabilities are fetching products, making purchases and checking subscription status through the native SDKs, hosting and configuring products remotely from the dashboard, analysing metrics in one place, seeing customer transaction histories, charting lifetime value, granting promotional subscriptions, getting notified of real-time events through webhooks, and sending enriched purchase events to analytics and attribution tools through integrations.
The service is the backend, the SDK is the client
The repository README is the client documentation, and it is worth being clear about where the line falls. The framework provides a backend and a wrapper around the store billing systems, so the app talks to RevenueCat and RevenueCat talks to Apple and Google. The feature table names server-side receipt validation as the first capability, and webhooks as enhanced server-to-server communication with events for purchases, renewals, cancellations and more. That is the part you cannot replicate by wrapping StoreKit yourself: a client that validates a receipt is a client the user controls, and a client that can be modified can be made to believe a purchase succeeded. Server-side validation and signed webhooks are the reason the service exists, and they are also the reason the SDK is not a standalone library.
Installing in an Expo project takes a development build
Expo supports in-app payments and is compatible with react-native-purchases, and the install is a single command:
$ npx expo install react-native-purchasesThe catch is stated immediately after. In Expo Go, the SDK automatically runs in Preview API Mode, replacing native calls with JavaScript mocks so the app loads without errors, but real purchases require a development build. To test in-app purchases fully you need a custom development build with EAS, which ensures that all native dependencies, including react-native-purchases, are properly included. The step before that is to create a new project and set up a development build, since development builds enable native code and provide a complete environment for testing purchases. The distinction between the two modes is the kind of thing that costs an afternoon if you find out halfway through a purchase test.
The version floors are stated plainly
The requirements section is short and specific. The minimum React Native version this SDK requires is 0.73.0, and in Android the minimum Kotlin version is 1.8.0. Those floors tell you something about the project's direction, since 0.73 is a recent React Native baseline and it means the SDK does not carry the compatibility burden for the older architecture. The release history is active, with 10.14.0 and 10.13.1 both published on 2026-10-15 and 10.13.0 a few days earlier, so a major version arrives every few weeks and the changelog is the place to look for what changed. The repository carries a `VERSIONS.md` and both a `CHANGELOG.md` and a `CHANGELOG.latest.md`, plus a `v4_to_v5_migration_guide.md` for the one major version break that needed its own document.
The repository holds a lot more than the client
The top level of the repository tells you that this is a monorepo with native code, not a TypeScript wrapper. There is an `android/` directory and an `ios/` directory, a `RNPurchases.podspec` for CocoaPods, and a `src/` directory for the TypeScript that bridges to them. There are also two workspace packages of their own, `react-native-purchases-store-galaxy` and `react-native-purchases-ui`, which are excluded from the published package, and an `e2e-tests/MaestroTestApp` workspace that points at Maestro for end-to-end testing. Alongside that there is a `migrations/` directory, an `apitesters/` directory for exercising the API, a `fastlane/` directory for release automation, a `Dangerfile`, and a `Gemfile` for the Ruby parts of the release tooling.
The build and the release process are automated
The package manifest shows a Yarn 3 workspace setup with the package manager pinned to a specific yarn 3.6.1 release by hash, which is the reproducible-installs approach and explains the `.yarn/` directory and `.yarnrc.yml` at the root. The scripts are a build with tsc, a watch build, jest for the tests and a typecheck with tsc in no-emit mode, and a lint script that still uses tslint with its own configuration file. There is a `prepare` script that runs the build, and a `bootstrap` script that chains the install, the Expo prepare, the example pods and the Maestro test app pods, which is the one command that gets a fresh clone into a working state. The publish path is `prepare` followed by a release script, and there is a separate `RELEASING.md` document for the procedure. A `renovate.json` file handles dependency updates and a `mise.toml` and `mise.lock` pin the tool versions used in development.
Editorial conclusion
Adopt react-native-purchases if you are shipping subscriptions from a React Native app and do not want to implement StoreKit and Google Play Billing separately, since the SDK handles both and adds a server-side validation path. Do not adopt it if you need to avoid a third-party service in the purchase flow, because the client is only half of the system, with entitlement state held on RevenueCat's servers. Verify first that the minimum React Native version of 0.73.0 and the Android Kotlin version of 1.8.0 match your project, and if you use Expo, plan on a development build rather than Expo Go, since real purchases will not work there.
Frequently asked questions
What does react-native-purchases do?
It is the client for the RevenueCat subscription and purchase tracking system, providing a wrapper around StoreKit, Google Play Billing, RevenueCat Web Billing and the RevenueCat backend so that in-app purchases and subscriptions are easy to implement in React Native.
What are the minimum versions react-native-purchases supports?
The minimum React Native version is 0.73.0, and in Android the minimum Kotlin version is 1.8.0.
Can I test in-app purchases in Expo Go?
Not fully. In Expo Go the SDK automatically runs in Preview API Mode, replacing native calls with JavaScript mocks so the app loads without errors, but real purchases require a development build created with EAS.
How do I install react-native-purchases in an Expo project?
Run `npx expo install react-native-purchases`. You also need to create a new project and set up a development build, since development builds enable native code and include the native dependencies properly.
What licence is react-native-purchases released under?
The MIT licence, with the licence file in the repository root. The current version is 10.14.0, released on 2026-10-15, and the project ships frequent releases.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/revenuecat-react-native-purchases)Was this useful?