npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@capawesome/capacitor-superwall

v0.1.1

Published

Unofficial Capacitor plugin for Superwall SDK.

Downloads

1,036

Readme

@capawesome/capacitor-superwall

Unofficial Capacitor plugin for Superwall SDK.[^1]

Features

We are proud to offer a comprehensive Capacitor plugin for Superwall SDK integration. Here are some of the key features:

  • 🖥️ Cross-platform: Supports Android and iOS.
  • 💰 Paywall Presentation: Show beautiful, remotely-configured paywalls to drive subscriptions.
  • 🎯 Feature Gating: Control feature access based on subscription status.
  • 📊 Analytics Events: Forward Superwall events to your analytics platform.
  • 👤 User Management: Identify users, set custom attributes, and manage subscription status.
  • 🧪 A/B Testing: Built-in support for paywall experiments and holdout groups.
  • 🔗 Deep Linking: Handle deep links for paywall campaigns.
  • 🎨 Customization: Configure paywall behavior, logging, and appearance.
  • 🔁 Up-to-date: Always supports the latest Capacitor version.

Missing a feature? Just open an issue and we'll take a look!

Compatibility

| Plugin Version | Capacitor Version | Status | | -------------- | ----------------- | -------------- | | 0.1.x | >=8.x.x | Active support |

Installation

npm install @capawesome/capacitor-superwall
npx cap sync

Android

Variables

This plugin will use the following project variables (defined in your app's variables.gradle file):

  • $superwallAndroidVersion version of com.superwall.sdk:superwall-android (default: 2.6.6)

Manifest

Add the required activities to your AndroidManifest.xml file:

<activity
  android:name="com.superwall.sdk.paywall.view.SuperwallPaywallActivity"
  android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"
  android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
<activity android:name="com.superwall.sdk.debug.DebugViewActivity" />
<activity android:name="com.superwall.sdk.debug.localizations.SWLocalizationActivity" />
<activity android:name="com.superwall.sdk.debug.SWConsoleActivity" />

Set your app's theme in the android:theme section of the SuperwallPaywallActivity.

Configuration

No configuration required for this plugin.

Usage

import { Superwall } from '@capawesome/capacitor-superwall';

const configureSuperwall = async () => {
  await Superwall.configure({
    apiKey: 'pk_your_api_key_here',
    options: {
      paywalls: {
        shouldPreload: true,
        automaticallyDismiss: true,
      },
      logging: {
        level: 'WARN',
        scopes: ['ALL'],
      },
    },
  });
};

const showPaywall = async () => {
  const result = await Superwall.register({
    placement: 'premium_feature',
    params: {
      user_level: 5,
      source: 'settings',
    },
  });

  console.log('Paywall result:', result.result); // 'PURCHASED', 'CANCELLED', or 'RESTORED'
};

const checkPaywall = async () => {
  const result = await Superwall.getPresentationResult({
    placement: 'premium_feature',
  });

  if (result.type === 'PAYWALL') {
    console.log('Paywall would be shown');
  } else if (result.type === 'NO_AUDIENCE_MATCH') {
    console.log('User does not match audience, no paywall');
  }
};

const identifyUser = async (userId: string) => {
  await Superwall.identify({
    userId: userId,
    options: {
      restorePaywallAssignments: true,
    },
  });
};

const setAttributes = async () => {
  await Superwall.setUserAttributes({
    attributes: {
      username: 'john_doe',
      subscription_tier: 'free',
      total_purchases: 5,
    },
  });
};

const checkSubscription = async () => {
  const result = await Superwall.getSubscriptionStatus();
  console.log('Subscription status:', result.status); // 'ACTIVE', 'INACTIVE', or 'UNKNOWN'
};

const addListeners = async () => {
  // Forward analytics events to your platform
  await Superwall.addListener('superwallEvent', (event) => {
    console.log('Superwall event:', event.type, event.data);
    // Forward to your analytics: Analytics.track(event.type, event.data);
  });

  // Track subscription status changes
  await Superwall.addListener('subscriptionStatusDidChange', (event) => {
    console.log('Subscription status changed to:', event.status);
  });

  // Handle paywall lifecycle events
  await Superwall.addListener('paywallPresented', (event) => {
    console.log('Paywall presented:', event.paywallInfo.placement);
  });

  await Superwall.addListener('paywallDismissed', (event) => {
    console.log('Paywall dismissed:', event.paywallInfo.placement);
  });

  // Handle custom paywall actions
  await Superwall.addListener('customPaywallAction', (event) => {
    console.log('Custom action:', event.name);
    // Handle custom actions like 'help', 'contact', etc.
  });
};

const handleCampaignDeepLink = async (url: string) => {
  await Superwall.handleDeepLink({ url });
};

const logout = async () => {
  await Superwall.reset();
};

API

configure(...)

configure(options: ConfigureOptions) => Promise<void>

Configure the Superwall SDK.

This method must be called once before all other methods.

Only available on Android and iOS.

| Param | Type | | ------------- | ------------------------------------------------------------- | | options | ConfigureOptions |

Since: 0.0.1


register(...)

register(options: RegisterOptions) => Promise<RegisterResult>

Register a placement and present a paywall if the user doesn't have an active subscription.

This is the primary method for feature gating and paywall presentation. The feature closure will execute based on the gating mode:

  • Non-gated: Executes immediately
  • Gated: Executes after subscription or if already subscribed

Only available on Android and iOS.

| Param | Type | | ------------- | ----------------------------------------------------------- | | options | RegisterOptions |

Returns: Promise<RegisterResult>

Since: 0.0.1


getPresentationResult(...)

getPresentationResult(options: GetPresentationResultOptions) => Promise<GetPresentationResultResult>

Check if a paywall would be presented for a placement without actually presenting it.

Useful for determining whether to show a feature or paywall before the user interacts.

Only available on Android and iOS.

| Param | Type | | ------------- | ------------------------------------------------------------------------------------- | | options | GetPresentationResultOptions |

Returns: Promise<GetPresentationResultResult>

Since: 0.0.1


identify(...)

identify(options: IdentifyOptions) => Promise<void>

Identify the current user with a unique ID.

This links the user ID to their anonymous alias for analytics and paywall assignments.

Only available on Android and iOS.

| Param | Type | | ------------- | ----------------------------------------------------------- | | options | IdentifyOptions |

Since: 0.0.1


reset()

reset() => Promise<void>

Reset the user identity.

This rotates the anonymous user ID, clears local paywall assignments, and requires the SDK to re-download configuration. Should only be called on explicit logout.

Only available on Android and iOS.

Since: 0.0.1


getUserId()

getUserId() => Promise<GetUserIdResult>

Get the current user ID.

Returns the identified user ID if set, otherwise returns the anonymous ID.

Only available on Android and iOS.

Returns: Promise<GetUserIdResult>

Since: 0.0.1


getIsLoggedIn()

getIsLoggedIn() => Promise<GetIsLoggedInResult>

Check if the user is logged in (identified).

Only available on Android and iOS.

Returns: Promise<GetIsLoggedInResult>

Since: 0.0.1


setUserAttributes(...)

setUserAttributes(options: SetUserAttributesOptions) => Promise<void>

Set custom user attributes for personalization and audience filtering.

Attributes can be used in audience filters on the Superwall dashboard. Keys starting with $ are reserved for Superwall use. Arrays and nested structures are not supported. Set values to null to remove attributes.

Only available on Android and iOS.

| Param | Type | | ------------- | ----------------------------------------------------------------------------- | | options | SetUserAttributesOptions |

Since: 0.0.1


handleDeepLink(...)

handleDeepLink(options: HandleDeepLinkOptions) => Promise<void>

Handle a deep link URL for paywall campaigns.

This processes deep links associated with Superwall campaigns configured on the dashboard.

Only available on Android and iOS.

| Param | Type | | ------------- | ----------------------------------------------------------------------- | | options | HandleDeepLinkOptions |

Since: 0.0.1


getSubscriptionStatus()

getSubscriptionStatus() => Promise<GetSubscriptionStatusResult>

Get the current subscription status.

Only available on Android and iOS.

Returns: Promise<GetSubscriptionStatusResult>

Since: 0.0.1


addListener('superwallEvent', ...)

addListener(eventName: 'superwallEvent', listenerFunc: (event: SuperwallEventInfo) => void) => Promise<PluginListenerHandle>

Add a listener for Superwall analytics events.

These events can be forwarded to your analytics platform.

Only available on Android and iOS.

| Param | Type | | ------------------ | ------------------------------------------------------------------------------------- | | eventName | 'superwallEvent' | | listenerFunc | (event: SuperwallEventInfo) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


addListener('subscriptionStatusDidChange', ...)

addListener(eventName: 'subscriptionStatusDidChange', listenerFunc: (event: SubscriptionStatusDidChangeEvent) => void) => Promise<PluginListenerHandle>

Add a listener for subscription status changes.

Only available on Android and iOS.

| Param | Type | | ------------------ | ----------------------------------------------------------------------------------------------------------------- | | eventName | 'subscriptionStatusDidChange' | | listenerFunc | (event: SubscriptionStatusDidChangeEvent) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


addListener('paywallPresented', ...)

addListener(eventName: 'paywallPresented', listenerFunc: (event: PaywallPresentedEvent) => void) => Promise<PluginListenerHandle>

Add a listener for when a paywall is presented.

Only available on Android and iOS.

| Param | Type | | ------------------ | ------------------------------------------------------------------------------------------- | | eventName | 'paywallPresented' | | listenerFunc | (event: PaywallPresentedEvent) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


addListener('paywallWillDismiss', ...)

addListener(eventName: 'paywallWillDismiss', listenerFunc: (event: PaywallWillDismissEvent) => void) => Promise<PluginListenerHandle>

Add a listener for when a paywall will dismiss.

Only available on Android and iOS.

| Param | Type | | ------------------ | ----------------------------------------------------------------------------------------------- | | eventName | 'paywallWillDismiss' | | listenerFunc | (event: PaywallWillDismissEvent) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


addListener('paywallDismissed', ...)

addListener(eventName: 'paywallDismissed', listenerFunc: (event: PaywallDismissedEvent) => void) => Promise<PluginListenerHandle>

Add a listener for when a paywall is dismissed.

Only available on Android and iOS.

| Param | Type | | ------------------ | ------------------------------------------------------------------------------------------- | | eventName | 'paywallDismissed' | | listenerFunc | (event: PaywallDismissedEvent) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


addListener('customPaywallAction', ...)

addListener(eventName: 'customPaywallAction', listenerFunc: (event: CustomPaywallActionEvent) => void) => Promise<PluginListenerHandle>

Add a listener for custom paywall actions.

Triggered when a user taps an element with the data-pw-custom attribute.

Only available on Android and iOS.

| Param | Type | | ------------------ | ------------------------------------------------------------------------------------------------- | | eventName | 'customPaywallAction' | | listenerFunc | (event: CustomPaywallActionEvent) => void |

Returns: Promise<PluginListenerHandle>

Since: 0.0.1


removeAllListeners()

removeAllListeners() => Promise<void>

Remove all listeners for this plugin.

Since: 0.0.1


Interfaces

ConfigureOptions

| Prop | Type | Description | Since | | ------------- | ------------------------------------------------------------- | ------------------------------------------- | ----- | | apiKey | string | The Superwall API key from your dashboard. | 0.0.1 | | options | SuperwallOptions | Optional configuration options for the SDK. | 0.0.1 |

SuperwallOptions

| Prop | Type | Description | Default | Since | | ------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------ | --------------------------------------- | ----- | | paywalls | PaywallOptions | Paywall presentation and behavior options. | | 0.0.1 | | logging | LoggingOptions | Logging configuration. | | 0.0.1 | | networkEnvironment | NetworkEnvironment | Network environment for API requests. | NetworkEnvironment.Release | 0.0.1 | | localeIdentifier | string | Override the locale identifier for localization. | | 0.0.1 | | shouldObservePurchases | boolean | Observe external Google Play purchases. Only available on Android. | true | 0.0.1 | | isExternalDataCollectionEnabled | boolean | Enable or disable external data collection for analytics. Only available on Android. | true | 0.0.1 |

PaywallOptions

| Prop | Type | Description | Default | Since | | ------------------------------------ | -------------------- | ----------------------------------------------------- | ----------------- | ----- | | isHapticFeedbackEnabled | boolean | Enable haptic feedback on paywall interactions. | true | 0.0.1 | | shouldShowPurchaseFailureAlert | boolean | Show an alert when purchase restoration fails. | true | 0.0.1 | | shouldPreload | boolean | Preload paywalls during SDK initialization. | true | 0.0.1 | | automaticallyDismiss | boolean | Automatically dismiss paywall on purchase or restore. | true | 0.0.1 |

LoggingOptions

| Prop | Type | Description | Default | Since | | ------------ | --------------------------------------------- | --------------------------- | --------------------------- | ----- | | level | LogLevel | The log level for SDK logs. | LogLevel.Warn | 0.0.1 | | scopes | LogScope[] | The log scopes to enable. | [LogScope.All] | 0.0.1 |

RegisterResult

| Prop | Type | Description | Since | | ------------ | ------------------------------------------------------- | --------------------------------------- | ----- | | result | PaywallResult | The result of the paywall presentation. | 0.0.1 |

RegisterOptions

| Prop | Type | Description | Since | | --------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------- | ----- | | placement | string | The placement identifier configured in the Superwall dashboard. | 0.0.1 | | params | Record<string, any> | Optional parameters for audience filtering. Keys starting with $ are reserved for Superwall use. | 0.0.1 |

GetPresentationResultResult

| Prop | Type | Description | Since | | ---------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----- | | type | PresentationResultType | The type of presentation result. | 0.0.1 | | experiment | Experiment | Experiment information if the result is a paywall or holdout. | 0.0.1 |

Experiment

| Prop | Type | Description | Since | | ------------- | ------------------- | ----------------------------------------- | ----- | | id | string | The unique identifier for the experiment. | 0.0.1 | | variant | string | The variant assigned to the user. | 0.0.1 |

GetPresentationResultOptions

| Prop | Type | Description | Since | | --------------- | -------------------------------------- | ------------------------------------------- | ----- | | placement | string | The placement identifier to check. | 0.0.1 | | params | Record<string, any> | Optional parameters for audience filtering. | 0.0.1 |

IdentifyOptions

| Prop | Type | Description | Since | | ------------- | ----------------------------------------------------------------------- | ---------------------------------------- | ----- | | userId | string | The unique user ID to identify the user. | 0.0.1 | | options | IdentifyOptionsConfig | Additional options for identification. | 0.0.1 |

IdentifyOptionsConfig

| Prop | Type | Description | Default | Since | | ------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- | ------------------ | ----- | | restorePaywallAssignments | boolean | Restore paywall assignments from the server. Set to true when switching accounts to restore assignments. | false | 0.0.1 |

GetUserIdResult

| Prop | Type | Description | Since | | ------------ | ------------------- | ---------------------------------------------- | ----- | | userId | string | The current user ID (identified or anonymous). | 0.0.1 |

GetIsLoggedInResult

| Prop | Type | Description | Since | | ---------------- | -------------------- | ------------------------------------------- | ----- | | isLoggedIn | boolean | Whether the user is logged in (identified). | 0.0.1 |

SetUserAttributesOptions

| Prop | Type | Description | Since | | ---------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----- | | attributes | Record<string, any> | User attributes as key-value pairs. Keys starting with $ are reserved. Set values to null to remove attributes. | 0.0.1 |

HandleDeepLinkOptions

| Prop | Type | Description | Since | | --------- | ------------------- | ---------------------------- | ----- | | url | string | The deep link URL to handle. | 0.0.1 |

GetSubscriptionStatusResult

| Prop | Type | Description | Since | | ------------ | ----------------------------------------------------------------- | -------------------------------- | ----- | | status | SubscriptionStatus | The current subscription status. | 0.0.1 |

PluginListenerHandle

| Prop | Type | | ------------ | ----------------------------------------- | | remove | () => Promise<void> |

SuperwallEventInfo

| Prop | Type | Description | Since | | ---------- | ----------------------------------------------------------------- | ----------------------------------------- | ----- | | type | SuperwallEventType | The type of Superwall event. | 0.0.1 | | data | Record<string, any> | Additional event data as key-value pairs. | 0.0.1 |

SubscriptionStatusDidChangeEvent

| Prop | Type | Description | Since | | ------------ | ----------------------------------------------------------------- | ---------------------------- | ----- | | status | SubscriptionStatus | The new subscription status. | 0.0.1 |

PaywallPresentedEvent

| Prop | Type | Description | Since | | ----------------- | --------------------------------------------------- | ---------------------------------------- | ----- | | paywallInfo | PaywallInfo | Information about the presented paywall. | 0.0.1 |

PaywallInfo

| Prop | Type | Description | Since | | ---------------- | ------------------------------------------------- | --------------------------------------------------------------------------------------- | ----- | | id | string | The unique identifier for the paywall. | 0.0.1 | | placement | string | The placement identifier. | 0.0.1 | | experiment | Experiment | Experiment information if the paywall is part of an A/B test. | 0.0.1 | | data | Record<string, any> | Additional paywall metadata. | 0.0.1 |

PaywallWillDismissEvent

| Prop | Type | Description | Since | | ----------------- | --------------------------------------------------- | ---------------------------------------------- | ----- | | paywallInfo | PaywallInfo | Information about the paywall being dismissed. | 0.0.1 |

PaywallDismissedEvent

| Prop | Type | Description | Since | | ----------------- | --------------------------------------------------- | ---------------------------------------- | ----- | | paywallInfo | PaywallInfo | Information about the dismissed paywall. | 0.0.1 |

CustomPaywallActionEvent

| Prop | Type | Description | Since | | ---------- | ------------------- | ------------------------------ | ----- | | name | string | The name of the custom action. | 0.0.1 |

Enums

LogLevel

| Members | Value | Description | Since | | ----------- | -------------------- | ---------------------- | ----- | | Debug | 'DEBUG' | Debug level logging. | 0.0.1 | | Info | 'INFO' | Info level logging. | 0.0.1 | | Warn | 'WARN' | Warning level logging. | 0.0.1 | | Error | 'ERROR' | Error level logging. | 0.0.1 |

LogScope

| Members | Value | Description | Since | | --------------- | ------------------------ | --------------------------- | ----- | | All | 'ALL' | All log scopes. | 0.0.1 | | Analytics | 'ANALYTICS' | Analytics related logs. | 0.0.1 | | Config | 'CONFIG' | Configuration related logs. | 0.0.1 | | Events | 'EVENTS' | Event tracking logs. | 0.0.1 | | Paywalls | 'PAYWALLS' | Paywall related logs. | 0.0.1 | | Purchases | 'PURCHASES' | Purchase related logs. | 0.0.1 |

NetworkEnvironment

| Members | Value | Description | Since | | --------------- | ------------------------ | ------------------------------------ | ----- | | Release | 'RELEASE' | Production environment. | 0.0.1 | | Developer | 'DEVELOPER' | Development environment for testing. | 0.0.1 |

PaywallResult

| Members | Value | Description | Since | | --------------- | ------------------------ | --------------------------- | ----- | | Purchased | 'PURCHASED' | User completed a purchase. | 0.0.1 | | Cancelled | 'CANCELLED' | User cancelled the paywall. | 0.0.1 | | Restored | 'RESTORED' | User restored purchases. | 0.0.1 |

PresentationResultType

| Members | Value | Description | Since | | ------------------------- | ------------------------------------ | --------------------------------------- | ----- | | PlacementNotFound | 'PLACEMENT_NOT_FOUND' | The placement was not found. | 0.0.1 | | NoAudienceMatch | 'NO_AUDIENCE_MATCH' | No audience matched for this placement. | 0.0.1 | | Paywall | 'PAYWALL' | A paywall would be presented. | 0.0.1 | | Holdout | 'HOLDOUT' | User is in a holdout group. | 0.0.1 | | PaywallNotAvailable | 'PAYWALL_NOT_AVAILABLE' | Paywall is not available. | 0.0.1 |

SubscriptionStatus

| Members | Value | Description | Since | | -------------- | ----------------------- | ------------------------------------------ | ----- | | Unknown | 'UNKNOWN' | Subscription status is unknown. | 0.0.1 | | Active | 'ACTIVE' | User has an active subscription. | 0.0.1 | | Inactive | 'INACTIVE' | User does not have an active subscription. | 0.0.1 |

SuperwallEventType

| Members | Value | Description | Since | | --------------------------------- | --------------------------------------------- | ---------------------------- | ----- | | FirstSeen | 'FIRST_SEEN' | First time user is seen. | 0.0.1 | | AppOpen | 'APP_OPEN' | App was opened. | 0.0.1 | | AppLaunch | 'APP_LAUNCH' | App was launched. | 0.0.1 | | AppClose | 'APP_CLOSE' | App was closed. | 0.0.1 | | SessionStart | 'SESSION_START' | Session started. | 0.0.1 | | DeepLink | 'DEEP_LINK' | Deep link was opened. | 0.0.1 | | TriggerFire | 'TRIGGER_FIRE' | Trigger was fired. | 0.0.1 | | PaywallOpen | 'PAYWALL_OPEN' | Paywall was opened. | 0.0.1 | | PaywallClose | 'PAYWALL_CLOSE' | Paywall was closed. | 0.0.1 | | PaywallDecline | 'PAYWALL_DECLINE' | Paywall was declined. | 0.0.1 | | TransactionStart | 'TRANSACTION_START' | Transaction started. | 0.0.1 | | TransactionComplete | 'TRANSACTION_COMPLETE' | Transaction completed. | 0.0.1 | | TransactionFail | 'TRANSACTION_FAIL' | Transaction failed. | 0.0.1 | | TransactionAbandon | 'TRANSACTION_ABANDON' | Transaction was abandoned. | 0.0.1 | | TransactionRestore | 'TRANSACTION_RESTORE' | Transaction restore. | 0.0.1 | | TransactionTimeout | 'TRANSACTION_TIMEOUT' | Transaction timeout. | 0.0.1 | | SubscriptionStart | 'SUBSCRIPTION_START' | Subscription started. | 0.0.1 | | FreeTrialStart | 'FREE_TRIAL_START' | Free trial started. | 0.0.1 | | SubscriptionStatusDidChange | 'SUBSCRIPTION_STATUS_DID_CHANGE' | Subscription status changed. | 0.0.1 |

Changelog

See CHANGELOG.md.

License

See LICENSE.

[^1]: This project is not affiliated with, endorsed by, sponsored by, or approved by Nest 22, Inc. or any of their affiliates or subsidiaries.