Skip to main content


RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates. Whether you’re building a new app, exploring new paywall concepts, or diving into experimentation; RevenueCat’s Paywalls make it easy to get started.

Paywalls are supported in the following SDK versions:

RevenueCat SDKVersion required for Paywalls
purchases-ios4.26.0 and up
purchases-android7.1.0 and up
react-native-purchases-ui7.15.0 and up
purchases-flutter6.15.0 and up
purchases-kmp1.0.0 and up

Within the SDKs, Paywalls are available on the following platforms:

  • iOS 15.0+
  • visionOS 1.0+
  • Mac Catalyst 15.0+
  • watchOS 8.0+
  • Android 7.0 (API level 24)

Support for more platforms is coming soon: macOS, tvOS, and others!

How Paywalls work

iOS Installation

Using SPM:

If you already have RevenueCat in your project:
  1. Open your project settings and select "Package Dependencies":

Change version

  1. Double-click and make sure version is at least 4.26.0:

Configure version

  1. Open your target settings and find "Frameworks, Libraries, and Embedded Content":

Find frameworks in your target

  1. Add RevenueCatUI:

Add RevenueCatUI dependency

First time integrating the RevenueCat SDK:
  1. Click File -> Add Packages...

  2. Search for and make sure version is at least 4.26.0:

Adding purchases-ios dependency

  1. Add RevenueCat and RevenueCatUI SPM dependency to your project:

Add paywall

Using CocoaPods:

Add the following to your Podfile:

pod 'RevenueCat'
pod 'RevenueCatUI'

Android Installation

  1. Add RevenueCatUI:
implementation 'com.revenuecat.purchases:purchases:7.1.0'
implementation 'com.revenuecat.purchases:purchases-ui:7.1.0'

Android paywalls is currently behind an experimental flag (ExperimentalPreviewRevenueCatUIPurchasesAPI).

It is safe to release app updates with it. We guarantee that paywalls will continue to work and any changes will always be backwards compatible.

They are stable, but migration steps may be required in the future. We'll do our best to minimize any changes you have to make.

React Native Installation

  • Update your package.json to include react-native-purchases-ui:
"dependencies": {
"react-native-purchases": "7.15.0",
"react-native-purchases-ui": "7.15.0"

Flutter Installation

  • Add purchases-ui-flutter in your pubspec.yaml:
purchases_flutter: 6.15.0
purchases_ui_flutter: 6.15.0
  • For Android, you need to change your MainActivity to subclass FlutterFragmentActivity instead of FlutterActivity.

Kotlin Multiplatform Installation

Add the following Maven coordinates to your libs.versions.toml:

purchases-kmp = "1.0.0-beta.1"

purchases-core = { module = "com.revenuecat.purchases:purchases-kmp-core", version.ref = "purchases-kmp" }
purchases-ui = { module = "com.revenuecat.purchases:purchases-kmp-ui", version.ref = "purchases-kmp" }

Then add the dependencies to the commonMain sourceset in your Compose Multiplatform module's build.gradle.kts:

kotlin {
// ...
sourceSets {
// ...
commonMain.dependencies {
// Add the purchases-kmp dependencies.

Lastly, you'll need to change the pod specification from PurchasesHybridCommon to PurchasesHybridCommonUI. This needs to happen either in your iOS project's Podfile, or your Compose Multiplatform module's build.gradle.kts, depending on how your Multiplatform module is integrated with your iOS project.


Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers

  2. See displaying paywalls for how to display it into your app.

Offerings and Paywalls

You can think of a Paywall as an optional feature of your Offering. An Offering is the collection of Products which are organized into Packages to be displayed to your customers as a single "offer" across platforms. Now, with Paywalls, you can control the actual view that is used to display that "offer" in addition to controlling the products that are offered.

Therefore, you can create a unique Paywall for each of your Offerings, and can create an unlimited number of Offerings & Paywalls for each variation you want to test with Experiments.


Platforms (support for more coming)

  • ✅ iOS 15.0 and higher
  • ✅ visionOS 1.0 and higher
  • ✅ Mac Catalyst 15.0 and higher
  • ✅ watchOS 8.0 and higher
  • ✅ Android 7.0 (API level 24)
  • ❌ macOS
  • ❌ tvOS

Android's Google Play developer determined offers

Paywalls in Android will use the default subscription option which, in case you use developer determined offers, will always be available, providing these types of offers always to your users. If you want to avoid this behavior when using paywalls, add the rc-ignore-offer tag to the developer determined offer from your product.

Next Steps