Get Started

Quickstart

Create a paywall and see it live in your app in under 10 minutes

Quickstart

Create a paywall in the Studio, publish it as a campaign, and trigger it from your iOS app. By the end of this guide, you will have a working paywall appearing on a real device or simulator.

Prerequisites:

  • A Nuxie account with at least one app created in the dashboard
  • Xcode 15+ with a Swift project targeting iOS 16+
  • Your Nuxie API key (find it in Settings > API Keys in the dashboard)

Step 1: Create a project

Open the Nuxie dashboard and navigate to your app. Click New Project to open the Studio.

A project is your workspace for designing screens. You can have multiple screens in a single project -- for example, a paywall screen and a success screen linked together.

When the project opens, you will see an empty canvas with a chat panel on the left.

Step 2: Generate a paywall with AI

Type a description of the paywall you want in the chat panel. For example:

Create a paywall for a fitness app with a monthly plan at $9.99 and a yearly plan at $49.99. Include a feature list and a free trial badge.

Nuxie generates a complete screen with styled components, product placements, and interactive buttons. The screen appears on the canvas as it streams in.

You can refine the design by sending follow-up messages: "Make the yearly plan more prominent" or "Change the background to a gradient." Each message updates the screen in place.

Once you are happy with the design, move on to publishing.

Step 3: Publish to a campaign

Click the Publish button in the top-right corner of the Studio. Select the target app, then click Launch Campaign.

Publishing does three things:

  1. Creates a version from your project -- an immutable, optimized bundle ready for delivery
  2. Creates or updates a campaign that points at the version with delivery settings
  3. Builds the bundle and syncs it to the edge for fast delivery to devices

When the build completes, your campaign is live. The SDK can now fetch and display it.

Step 4: Install the iOS SDK

Add the Nuxie SDK to your Xcode project using Swift Package Manager.

  1. In Xcode, go to File > Add Package Dependencies
  2. Enter the repository URL: https://github.com/nuxieio/nuxie-ios
  3. Select the Nuxie library product and add it to your target
swift
import Nuxie

Step 5: Configure the SDK

Initialize Nuxie when your app launches. The best place is your App init or application(_:didFinishLaunchingWithOptions:).

swift
import Nuxie
 
@main
struct MyApp: App {
    init() {
        let config = NuxieConfiguration(apiKey: "your_api_key")
        try? NuxieSDK.shared.setup(with: config)
    }
 
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

On setup, the SDK fetches your profile from the server. The profile contains your published campaigns, segment definitions, and feature access -- everything the SDK needs to operate.

Step 6: Identify the user (optional)

If your app has user accounts, identify the user after login so Nuxie can track them across sessions and devices.

swift
NuxieSDK.shared.identify("user_123", userProperties: [
    "plan": "free",
    "signup_date": "2026-01-15"
])

For anonymous users, the SDK automatically generates and persists a device-level ID. You can skip this step and come back to it later.

Step 7: Trigger the paywall

Use trigger to fire a named event. If a live campaign is configured to respond to that event, the SDK evaluates targeting rules and presents the flow.

swift
NuxieSDK.shared.trigger("paywall_requested")

The trigger call is fire-and-forget by default. If you need to react to what happens, use the handler callback or the async stream on the returned TriggerHandle:

swift
NuxieSDK.shared.trigger("paywall_requested") { update in
    switch update {
    case .decision(let decision):
        print("Decision: \(decision)")
    case .journey(let journey):
        print("Journey started: \(journey)")
    case .error(let error):
        print("Error: \(error)")
    default:
        break
    }
}

When the campaign matches, Nuxie downloads the flow bundle (if not already cached), and presents the paywall as a full-screen overlay. The user sees the paywall you designed in Step 2.

What just happened

Here is the full path your paywall took:

  1. You designed a screen in the Studio and published it as a flow
  2. The flow was bundled and synced to the edge
  3. Your app called setup(with:), which fetched the profile containing your campaign
  4. Your app called trigger("paywall_requested"), which matched the campaign and presented the flow

All of this happens without an app update. Change the design in the Studio, publish again, and users see the new version on their next session.

Next steps

  • Concepts -- Learn the 10 core building blocks of the platform
  • Products and Prices -- Connect real subscription products to your paywall buttons
  • Triggers and Goals -- Control when and how campaigns fire
  • Experiments -- A/B test paywall variations to optimize conversion
  • Segments -- Target campaigns at specific user groups