> ## Documentation Index
> Fetch the complete documentation index at: https://developer.plugchoice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Installation

> Add the Plugchoice SDK to your iOS, Android or React Native app.

<Note>
  The Plugchoice SDK is in beta. Until version 1.0, a minor version may change the SDK or the SDK API. Pin the SDK version in your app and the `Plugchoice-Version` header on your server.
</Note>

The SDK has the same version on every platform. The source is on GitHub at [plugchoice/mobile-sdk](https://github.com/plugchoice/mobile-sdk).

| Platform | Package | Requirements |
| - | - | - |
| iOS | `PlugchoiceSDK` with Swift Package Manager | iOS 16+, Xcode 16+ |
| Android | `com.plugchoice:plugchoice` from Maven Central | Android 10 (API 29)+, `compileSdk 36` |
| React Native and Expo | `@plugchoice/react-native` from npm | Expo SDK 57+, a development or release build |

<Tabs>
  <Tab title="iOS">
    **Requirements**: iOS 16 or later, and Xcode 16 or later. On iOS 18 and later the SDK joins a charger's Wi-Fi through AccessorySetupKit; on iOS 16 and 17 it uses the classic join prompt.

    Add the package with Swift Package Manager. In Xcode, choose **File › Add Package Dependencies…**, enter `https://github.com/plugchoice/mobile-sdk`, pick **Up to Next Minor Version** from `0.4.0`, and add the `PlugchoiceSDK` library to your app target.

    In a `Package.swift`:

    ```swift Package.swift theme={null}
    dependencies: [
        .package(url: "https://github.com/plugchoice/mobile-sdk", .upToNextMinor(from: "0.4.0")),
    ],
    targets: [
        .target(name: "YourApp", dependencies: [
            .product(name: "PlugchoiceSDK", package: "mobile-sdk"),
        ]),
    ]
    ```

    Then import it where you use it:

    ```swift theme={null}
    import PlugchoiceSDK
    ```
  </Tab>

  <Tab title="Android">
    **Requirements**: Android 10 (API 29) or later (`minSdk 29`), `compileSdk 36`, and JDK 17. Bluetooth on Android 12 and later needs your app to target API 31 or later. Scanning a charger's QR code uses Google Play services; on a device without them, the user types the code instead.

    The library is `com.plugchoice:plugchoice` on Maven Central. Make sure `mavenCentral()` is in your repositories (it usually is), then add the dependency to your app module:

    <CodeGroup>
      ```kotlin build.gradle.kts theme={null}
      dependencies {
          implementation("com.plugchoice:plugchoice:0.4.0")
      }
      ```

      ```groovy build.gradle theme={null}
      dependencies {
          implementation 'com.plugchoice:plugchoice:0.4.0'
      }
      ```
    </CodeGroup>

    The public API is in the package `com.plugchoice`.
  </Tab>

  <Tab title="React Native">
    **Requirements**: Expo SDK 57 or later (React Native 0.86), in a development or release build of your app. Expo Go doesn't include the SDK's native code. iOS 16.4 or later, and Android 10 (API 29) or later.

    Install the package:

    ```bash theme={null}
    npx expo install @plugchoice/react-native
    ```

    Add its config plugin to your app config. On every `npx expo prebuild` it adds what the SDK needs on iOS and Android:

    ```json app.json theme={null}
    {
      "expo": {
        "plugins": ["@plugchoice/react-native"]
      }
    }
    ```

    Then rebuild the native app: `npx expo prebuild` and `npx expo run:ios` or `npx expo run:android`, or an EAS build.

    <Note>
      The package is an Expo module. A React Native app without Expo needs Expo modules first (`npx install-expo-modules@latest`), and then makes the native changes by hand, as on the [iOS](/sdk/ios#configure-your-app) and [Android](/sdk/android#configure-your-app) pages.
    </Note>
  </Tab>
</Tabs>

## Next steps

Your app needs a few more settings before the SDK can join a charger's Wi-Fi, reach it on the local network or talk Bluetooth to it. Each platform page lists them:

<Columns cols={3}>
  <Card title="iOS" icon="apple" href="/sdk/ios#configure-your-app">
    Entitlements and Info.plist keys.
  </Card>

  <Card title="Android" icon="android" href="/sdk/android#configure-your-app">
    Permissions and plain HTTP to chargers.
  </Card>

  <Card title="React Native" icon="react" href="/sdk/react-native#the-config-plugin">
    The config plugin and its options.
  </Card>
</Columns>

The SDK also needs a client secret from your server. [Get started](/sdk/get-started) walks through the server endpoint and the app together.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.