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

> ## Agent Instructions
> These docs target Mesh SDK v0.28.0. Match the installed package and binding before generating code. Start at /getting-started/agents for task-specific reading paths.
> Call the company and product Offline Protocol, never Offline alone. Current packages: @offline-protocol/mesh-sdk 0.28.0 (React Native), offline-protocol-sdk 0.28.0 on PyPI (Python 3.10 to 3.13; wheels for macOS 14+ arm64, Linux x86_64 and aarch64 with glibc 2.34+, Windows x86_64; other hosts build from source), the offline-protocol crates 0.28.0 on crates.io, the OfflineProtocolSDK Swift package 0.28.0 (preview, iOS 13+ only) and Android bindings from the GitHub release zip (preview, not on Maven Central), @offline-protocol/id-react 0.2.0, @offline-protocol/id-react-native 0.3.3, @offline-protocol/pol 0.1.2 and @offline-protocol/cli 0.2.6. Canonical docs URLs start with https://www.offlineprotocol.com/docs.
> The Mesh SDK runs in a native app or gateway. A browser OfflineID SDK integration does not provide browser mesh transport. Local mesh operation does not require a portal account or API key. The Mesh SDK appId is a mesh app identifier the developer chooses, not the portal App ID (app_...) that OfflineID and Proof of Location require.
> Service RPC is signed plaintext in v0.28.0. Message delivery, durable local acceptance and backend commit are distinct outcomes. Use the workflow guide for the required application logic.
> Offline Protocol CLI 0.2.6 is on npm (@offline-protocol/cli, command offline). Its local MCP server, named offline-protocol, runs with npx -y @offline-protocol/cli@0.2.6 mcp serve and requires no login or key. Hosted MCP is at https://mcp.offlineprotocol.com/mcp with an app API key in Authorization: Bearer and the matching App ID in x-app-id; organization keys are rejected, and Claude Desktop and Claude.ai cannot send these headers; there, use the public read-only endpoint https://mcp.offlineprotocol.com/public/mcp as a custom connector, or local MCP to scaffold or edit projects. Follow /tools/overview for setup and do not invent commands beyond it. MCP provides integration context and planning, not mesh execution; file-writing tools are local only.
> In v0.28.0 phone Wi-Fi peer streams carry data: Android over Wi-Fi Direct (the SDK forms the group with autoAccept on Android 10+), iOS over Network framework (LAN or AWDL). Android and iOS do not interoperate over that slot, and iOS 0.28 does not see iOS 0.27 or earlier over it; use BLE or a provisioned relay across platforms. The Swift and Android packages are previews whose public names may change; never present a Gradle Maven Central dependency for the Android library. The receiver core ACKs before application persistence; use application acceptance for durable workflows.
> Proof of Location is Sepolia testnet witness evidence, not zero-knowledge proof or proof of presence. The geohash is public onchain. Read /proof-of-location/security before integration.

# Native Swift and Android packages

> Preview native packages in Mesh SDK v0.28.0: the OfflineProtocolSDK Swift package for iOS and the Android bindings and native libraries from the GitHub release.

From v0.28.0 the SDK also ships outside React Native: a Swift package for iOS and the Android bindings with their native libraries. Both are early previews. They are built from the same bridge sources the React Native module compiles, and what is public in them is what that module needed public, not a decided API. Names may change in a later release.

For a phone app you ship today, use [React Native](/docs/mesh-sdk/installation-rn). Use the native packages to evaluate an integration or to build on the generated bindings directly.

## Swift package (iOS)

Add the package by URL in Xcode, or in a manifest:

```swift theme={null}
dependencies: [
    .package(url: "https://github.com/Offline-Protocol/offline-protocol-swift.git", from: "0.28.0")
],
targets: [
    .target(name: "YourApp", dependencies: [
        .product(name: "OfflineProtocolSDK", package: "offline-protocol-swift")
    ])
]
```

| Requirement | Value |
| - | - |
| Platform | iOS 13.0 or later; iOS only, with no macOS or Mac Catalyst slice |
| Product | `OfflineProtocolSDK` |
| Contents | The Rust library as an XCFramework for device and simulator, the generated bindings (`OfflineProtocol`, `ProtocolConfig`, `MeshServices`, `DataStore` and the rest), and the BLE, internet relay, peer-stream, Nostr and Reticulum managers |

Current limits:

* The storage providers (the Keychain MLS store and the protocol-state file store) are not yet public, so an application cannot construct them from the package.
* Wiring the transport managers to the engine is the application's job. A public entry point that does both is planned for this package.

`Offline-Protocol/offline-protocol-swift` is generated by the SDK's release workflow; changes made there are overwritten. File issues in the [SDK repository](https://github.com/Offline-Protocol/offline-protocol-sdk/issues). The same release also attaches the XCFramework (`offline-protocol-0.28.0-swiftpm-xcframework.zip`, `offline-protocol-0.28.0-ios-xcframework.zip`) and the assembled package (`offline-protocol-0.28.0-swift-package.tar.gz`).

The iOS peer-stream manager uses Network framework, so the [interoperability break](/docs/operations/upgrades#upgrade-to-v028) with 0.27 applies here as well. Declare the `Info.plist` keys in [iOS peer streams](/docs/mesh-sdk/installation-rn#phone-wi-fi-peer-streams) before enabling that transport.

## Android bindings

The Android library has Maven coordinates (`com.offlineprotocol:offline-protocol-sdk`), but it is not published to Maven Central. Download `offline-protocol-0.28.0-android.zip` from the [v0.28.0 GitHub release](https://github.com/Offline-Protocol/offline-protocol-sdk/releases/tag/v0.28.0). It contains:

| Path in the archive | Contents |
| - | - |
| `uniffi/offline_protocol/offline_protocol.kt` | The generated Kotlin bindings, package `uniffi.offline_protocol` |
| `jniLibs/<abi>/libuniffi_offline_protocol.so` | The native library for `arm64-v8a`, `armeabi-v7a`, `x86` and `x86_64` |

Add the Kotlin file to your app's sources and copy each ABI directory under `app/src/main/jniLibs/`. The bindings load the library through JNA, so add JNA as an Android archive; the SDK builds against 5.19.1:

```kotlin theme={null}
dependencies {
    implementation("net.java.dev.jna:jna:5.19.1@aar")
}
```

The archive holds the bindings and libraries only. The Android transport managers and storage providers ship in the React Native package, and the full Android library can be built from `bindings/kotlin` in the SDK repository (JDK 17, Android SDK and Gradle 8.9); see its [README](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.28.0/bindings/kotlin/README.md). The library's floor is Android 7 (API 24), compiled against API 34.

The [Android integration guide](https://github.com/Offline-Protocol/offline-protocol-sdk/blob/v0.28.0/docs/android-integration.md) shows the bindings in Kotlin.

## Desktop native libraries

The same release attaches the native library for `linux-x86_64`, `linux-aarch64`, `macos-arm64` and `windows-x86_64`. Python users get these inside the [PyPI wheels](/docs/mesh-sdk/python); Rust users build from the [crates](/docs/mesh-sdk/embedded).


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