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

react-native-kickstart-exchange

v0.1.7

Published

Unofficial React Native / Expo view that shows a Kickstart Exchange banner ad on Apple platforms, using the official KickstartSDK.

Readme

react-native-kickstart-exchange

Show a Kickstart Exchange banner ad in your React Native or Expo app.

Kickstart Exchange is a free cross-promotion service for indie Apple-platform apps: your app shows other apps' banners, and they show yours. This package puts the real banner in your React Native tree by hosting the official KickstartSDK SwiftUI view — it doesn't reimplement it, so you get upstream's actual behavior and bug fixes.

This is an unofficial, community project. It isn't affiliated with, endorsed by, or supported by Kickstart Exchange or the author of KickstartSDK. Please report problems with this package here, not to them.

Platform support

| Platform | Support | | --- | --- | | iOS / iPadOS | ✅ Shows the banner | | Mac Catalyst | ✅ Shows the banner | | Android | ⚪️ Renders nothing | | Web | ⚪️ Renders nothing | | tvOS / watchOS / visionOS | ❌ Not supported |

<ExchangeBannerAdView> returns null everywhere except iOS, iPadOS, and Mac Catalyst, so it's always safe to render — no Platform.OS checks needed. Installing it won't break an Android or web build.

There's no Android support because Kickstart Exchange itself doesn't serve Android apps yet — its API only knows about Apple platforms. If that changes upstream, this package can add it.

Requirements

  • Expo SDK 55+ and React Native 0.83+. Earlier SDKs don't ship a compatible @expo/ui.
  • iOS 18 / iPadOS 18 / macOS 15 or later, matching KickstartSDK's own minimum.
  • A development build. This won't run in Expo Go, which can't load custom native modules.
  • Dynamic framework linking in your Podfile. The setup below turns this on; see why if you're curious.

Works in both managed Expo and bare React Native projects.

Setup

Install the packages:

npx expo install react-native-kickstart-exchange expo-build-properties @expo/ui

Add this to your app.json or app.config.js:

{
  "expo": {
    "plugins": [
      ["expo-build-properties", { "ios": { "deploymentTarget": "18.0", "useFrameworks": "dynamic" } }]
    ]
  }
}

Then build:

npx expo prebuild
npx expo run:ios

Usage

import { ExchangeBannerAdView } from 'react-native-kickstart-exchange';

export default function SettingsFooter() {
  return <ExchangeBannerAdView apiKey="ks_live_REPLACE_WITH_API_KEY" />;
}

Get an API key by creating a free account at exchange.kickstart.tools and registering your app.

Hide the banner whenever you like — for example, for users who bought an ad-free upgrade:

{!hasPremiumAccess && <ExchangeBannerAdView apiKey="ks_live_REPLACE_WITH_API_KEY" />}

Only use it on your main app's screens. Apple's guidelines don't allow Kickstart Exchange in extensions like widgets or App Clips.

Try it without an account

Pass "preview" as the API key to see a sample ad:

<ExchangeBannerAdView apiKey="preview" />

It works in Debug builds and the Simulator only, creates no session, and records nothing. Release builds show nothing. The example app in this repo uses it.

Sizing

The banner takes the width its parent gives it and sizes its own height to the ad, so it lays out like any other View — style accepts width, maxWidth, flex, and the rest. Its height comes from the ad's own content and changes with Dynamic Type, so don't set one.

KickstartSDK's card caps itself at 450pt wide; below that it fills whatever it's offered.

Styling

Each prop maps to one of KickstartSDK's SwiftUI style modifiers. Leave a prop out and the SDK's own default applies.

<ExchangeBannerAdView
  apiKey="ks_live_REPLACE_WITH_API_KEY"
  cornerStyle="square"
  strokeColor="#FF9500"
  disclosureBackgroundColor="#FF9500"
  actionTextColor="#FF9500"
/>

| Prop | Type | Maps to | | --- | --- | --- | | cornerStyle | 'square' \| 'rounded' | .exchangeAdCornerStyle(_:) | | strokeColor | hex string ("#RGB", "#RRGGBB", or "#RRGGBBAA") | .exchangeAdStroke(_:) | | disclosureBackgroundColor | hex string | .exchangeAdDisclosureBackgroundColor(_:) | | actionTextColor | hex string | .exchangeAdActionTextColor(_:) |

Checking that it works

Debug builds and the Simulator always get a test ad — a real response from the live service, so if the card shows up, your API key, bundle ID, and network path are all fine. Test ads cost and earn nothing and aren't counted in analytics.

If nothing appears, check the Metro or Xcode console. The SDK logs a line starting with Kickstart Exchange: explaining what went wrong. A failed load never throws — the banner just doesn't render.

Privacy

This package adds no data collection or network calls of its own. Everything goes through KickstartSDK, documented in its README and the privacy notice. In short, Kickstart Exchange matches apps rather than people, and doesn't track users or devices.

If your app ships a privacy manifest, declare the same Usage Data: Product Interaction and Usage Data: Advertising Data entries that upstream declares.

Why dynamic frameworks?

KickstartSDK is only distributed through Swift Package Manager, so this package uses React Native's spm_dependency CocoaPods helper to pull it in — and that helper requires dynamic framework linking. It's a React Native requirement, not a choice this package makes, and there's no way to opt out of it.

That's also why the native side ships as two pods: KickstartExchangeBridge (dynamic, links KickstartSDK) and ExpoKickstartExchange (static, since ExpoModulesCore and ExpoUI are). CocoaPods won't let a dynamic pod depend on a static one, so the dynamic part is kept on its own.

Contributing

See CONTRIBUTING.md.

License

This package's code is MIT licensed — see LICENSE. It depends on twostraws/KickstartSDK but doesn't modify or redistribute it; the SDK and the Kickstart Exchange service have their own license and terms.