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

# Overview

> The LearnInk Mobile SDK — what it is, what it replaces, and what beta means

<Note>
  **The Mobile SDK is in beta.** It is currently installed directly from our GitHub
  repository rather than from a package registry. We are preparing releases for **Maven
  Central**, **pub.dev** and **npm**, after which installation becomes a one-line
  dependency and these guides will be updated. Until then, follow the install steps for
  your framework below — they work today and take about fifteen minutes.

  Beta also means the API may change between updates. See [What beta means](#what-beta-means-for-you)
  before you start.
</Note>

The Mobile SDK does the work described in the [WebView setup guide](/integration/webview-setup-guide)
for you. Instead of writing and maintaining the WebView screen, token handling, session
refresh and post-message plumbing yourself, you add a dependency, supply a function that
fetches a sign-in token, and drop in a view.

## What the SDK handles for you

Everything in the grey box below is SDK code you no longer write or maintain:

| Concern                                 | Manual WebView integration     | With the SDK                                    |
| --------------------------------------- | ------------------------------ | ----------------------------------------------- |
| Building the signed URL                 | You construct it               | Handled                                         |
| Fetching and attaching the token        | You wire it up                 | You supply a `fetchToken` function              |
| Token timeout and fallback              | You implement it               | Handled, configurable                           |
| `CLOSE` post message                    | You parse and handle it        | A callback                                      |
| `SESSION_EXPIRED` post message          | You re-authenticate and reload | Handled automatically                           |
| Loading indicator                       | You add one                    | Built in                                        |
| Back navigation through WebView history | You implement it               | Handled                                         |
| External links opening in the browser   | You implement it               | Handled                                         |
| Offline / cached content                | Not supported                  | Handled — see [Offline behaviour](/sdk/offline) |

**What stays yours:** the backend endpoint that calls the [Identify API](/api-reference/identify).
The SDK never talks to LearnInk's API directly and never sees your API key — that
separation is deliberate and unchanged. If you have not built that endpoint yet, start
with [Step 1 of the WebView setup guide](/integration/webview-setup-guide).

## Platform support

<Note>
  The SDK targets **Android**, across all three frameworks. Minimum versions are below.
</Note>

| Framework      | Package                      | Minimum versions                             |
| -------------- | ---------------------------- | -------------------------------------------- |
| Native Android | `ink.learn:learnink-sdk`     | Android 5.0 (API 21), JDK 17                 |
| Flutter        | `learnink_sdk`               | Flutter 3.10, Dart 3.0, Android 5.0 (API 21) |
| React Native   | `@learnink/react-native-sdk` | React Native 0.71+, Android 5.0 (API 21)     |

## Before you start

You need the same three things as the manual integration:

* ✅ Your **API key** — used by *your backend*, never by the app. Generate one in the
  LearnInk admin portal (**Settings → Developers → API Keys**).
* ✅ Your **org ID** — your organisation's unique identifier.
* ✅ A **backend token endpoint** that calls the [Identify API](/api-reference/identify)
  and returns a token to your app. See
  [Step 1 of the WebView setup guide](/integration/webview-setup-guide).

Plus, for the beta, one more:

* ✅ **Access to the SDK repository** at
  [github.com/LearnInkTeam/learnink-sdk](https://github.com/LearnInkTeam/learnink-sdk).
  If you get a 404, email [support@learn.ink](mailto:support@learn.ink) with the GitHub
  usernames that need access.

## Install guides

Pick your framework. Each guide is self-contained and assumes no prior knowledge of the
SDK.

<CardGroup cols={3}>
  <Card title="Native Android" icon="android" href="/sdk/kotlin">Kotlin / Java</Card>
  <Card title="Flutter" icon="mobile" href="/sdk/flutter">Dart</Card>
  <Card title="React Native" icon="react" href="/sdk/react-native">JavaScript & TypeScript</Card>
</CardGroup>

Then:

<CardGroup cols={2}>
  <Card title="Offline behaviour" icon="cloud-arrow-down" href="/sdk/offline">
    How cached content works, and what your app must show when nothing is cached.
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/sdk/troubleshooting">
    Fixes for the problems beta testers hit most often.
  </Card>
</CardGroup>

## What beta means for you

<Steps>
  <Step title="Installation is from GitHub, not a registry">
    You clone the repository and build the SDK locally once. Every developer on your team
    (and your CI) does this. It is a one-off command per machine, documented in each
    install guide.
  </Step>

  <Step title="Pin to a tag, not to main">
    `main` moves. Check out a released tag — for example `v0.1.0` — so your builds are
    reproducible and your team is on the same code. We will tell you when a new tag is
    available and what changed.
  </Step>

  <Step title="The API may change">
    We may rename or add things in response to beta feedback. Changes are listed in the
    repository's `CHANGELOG.md`, and we will email beta participants before anything
    breaking lands.
  </Step>

  <Step title="Migrating to the registries will be easy">
    When we publish, the only change is the dependency line — you remove the local build
    step and point at the published version. The code you write against the SDK stays the
    same.
  </Step>

  <Step title="Tell us what hurts">
    That is the point of the beta. Bugs, confusing APIs, missing callbacks, unclear docs —
    email [support@learn.ink](mailto:support@learn.ink) or open an issue on the repository.
  </Step>
</Steps>

## Still want to do it manually?

The SDK is optional. The [manual WebView integration](/integration/webview-overview)
remains fully supported, and is the right choice if your app cannot take a dependency
built from source during the beta.
