Choose a reading path
- Send between two phones: standalone host app → platform requirements → BLE quickstart → lifecycle and messaging APIs.
- Local handoff: quickstart → local handoff → messaging APIs.
- Share a checklist: quickstart → shared state → DataStore APIs.
- Retain readings for a backend: delivery contract → Python gateway or phone quickstart. Match the selected binding; TypeScript signatures apply to React Native.
- Call a nearby service: quickstart → service invocation → MeshServices APIs.
- Add web sign-in: OfflineID → React setup → OfflineID hooks.
- Add mobile sign-in: agent quickstart → App attestation → React Native setup.
- Set up the account, application and native apps without the portal: agent quickstart.
Give the agent a concrete brief
Start with the live agent setup prompt. Give its URL to your agent, or open it and copy its current contents. It is the canonical setup instruction; this page does not keep a second copy. Add your repository, target device models and OS, installed SDK version, intended workflow, available transports, enrollment policy and storage/backend requirements. Tell the agent what success looks like and which device tests it must run. The agent can create the application, register iOS and Android apps, set origins and features and check readiness with theoffline CLI or its local MCP tools, as the agent quickstart shows. Connect local MCP for package discovery and scaffolding without credentials, or hosted MCP with an app API key and matching App ID. Hosted mode supplies context and planning but cannot write project files. Neither mode runs the mesh or contacts peers.
A phone-to-phone integration needs native device execution. A web app using the OfflineID SDK does not gain local mesh transport. The local Mesh quickstart needs no portal API key.
Fetch only the context you need
Use Copy page to copy the current page as Markdown, or View as Markdown in the adjacent menu. On the hosted docs, append.md to a page path for its Markdown representation. The docs site’s llms.txt lists the available pages; start there when the task does not name a page.
Read the selected workflow, then its focused API reference. Use llms-full.txt only when you need a full-site export; it includes unrelated products and consumes more context. Keep the documentation site’s base path when constructing these URLs.
The page menu can hand documentation context to an assistant. It does not execute the SDK or connect to your devices. Offline Protocol CLI and MCP provide integration guidance and scaffolding separately from the docs menu.
Check the implementation
- Register listeners before startup and narrow
event.typebefore reading event-specific fields. - Use the discovered device address for messaging; a username, App ID or API key is not a peer address.
- Match each peer’s platform and transport. A shared transport label alone does not establish interoperability.
- Keep first-contact service RPC bodies non-sensitive: in v0.33.0 a body is sealed only once the peer runs 0.29.0 or later and the session is confirmed. Check
encryptedon the service events. - If the app calls
enableTelemetry, use v0.30.0 or later: on 0.26.0 to 0.29.0 the telemetry uploader trusted a wider set of certificate roots. - From v0.31.0
ProtocolEventincludespeer_rssi; add it to an exhaustive event switch, and treat a signal reading as a proximity hint, never as proof of who is nearby. - From v0.32.0
ProtocolEventincludesservice_subscribe_received,service_subscription_changedandservice_update_received. A provider app that registers a service answersservice_subscribe_receivedwithacceptServiceSubscriptionorrejectServiceSubscription; under the default policy an unanswered request is rejected after 60 seconds. - Never send content that begins with
__MEMBER__: from v0.32.0 the prefix is reserved and the send is refused withInvalidArgument. - In React Native from v0.33.0, call
requestMeshPermissionsForConfig(config)beforestart()to request the Android grants, and fix every development warning about a peer id that is not anoff1…address or a call made in the wrong order. - Track transport delivery, application acceptance and destination commit separately.
- Preserve operation IDs across retries. A timeout does not prove a remote operation did no work.
- Compile the changed application and test on the target devices. A typecheck or mock cannot establish radio delivery.
Release boundaries
In v0.33.0 phone Wi-Fi peer streams carry traffic. iPhones and Android phones meet over that slot only on a shared Wi-Fi network that allows multicast, never inside an Android Wi-Fi Direct group, and an iPhone on 0.28.0 or later does not see one on 0.27 or earlier over it. BLE is the common phone path. Python installs from PyPI (pip install offline-protocol-sdk, with [lan,http] for a host that runs the service and the HTTP front); the Swift and Android packages are previews. Java installs from Maven Central (com.offlineprotocol:offline-protocol-java, JDK 22 or later) with the native library from the GitHub release; the C header and library come from the GitHub release; the Flutter plugin is a preview path dependency on the SDK repository and is not on pub.dev, and from v0.31.0 its MeshSdk carries the React Native module’s native surface. Ruby installs from RubyGems (offline_protocol, Ruby 3.3 or later) with the native library from the GitHub release. The browser binding is experimental and built from the SDK repository (bindings/web); it is not on npm. Read public types, errors and defaults when choosing limits and recovery behavior. Hosted HTTP integrations use a user JWT plus X-App-Id, not a portal secret; follow the API introduction.
