Choose Your Platform
iOS
Native Swift SDK distributed via Swift Package Manager and CocoaPods. Requires iOS 16.0+ and Swift 5.9+.
Android
Kotlin SDK distributed via Maven Central (Gradle). Requires Android API 24+ and Kotlin 1.9+.
Flutter
Dart package distributed via pub.dev. Requires Flutter 3.10+ and Dart 3.0+.
React Native
TypeScript package distributed via npm. Requires React Native 0.76.9+ with the New Architecture enabled (RN 0.77+/Kotlin 2.0 supported via a version-gated Compose config).
Platform Comparison
Requirements
The React Native SDK requires the New Architecture. All four SDKs are generally available.
Dependencies
Flutter and React Native SDKs bridge to the native iOS and Android implementations under the hood. You do not need to add native dependencies manually — they are bundled with the SDK.
Core API
Every SDK exposes the same five core methods. The API is intentionally minimal — initialize once, identify your user, track events, and the SDK handles the rest.configure
Initialize the SDK with your API key. Call this exactly once at app startup.
- iOS
- Android
- Flutter
- React Native
identify
Link a user identity with optional traits. Traits are merged with previously set values.
- iOS
- Android
- Flutter
- React Native
track
Record a custom event with optional properties. Events are queued locally and flushed automatically.
- iOS
- Android
- Flutter
- React Native
reset
Clear the user identity on sign-out. The anonymous ID is preserved so device-level analytics continue uninterrupted.
- iOS
- Android
- Flutter
- React Native
flush
Force-send all queued events immediately. Useful before the app enters the background.
- iOS
- Android
- Flutter
- React Native
Module Namespaces
Beyond the core API, the SDK organizes features into 10 module namespaces. Each namespace is accessed as a property on theAppDNA singleton and operates independently while sharing the core event pipeline, identity state, and configuration layer.
Every namespace is available on all four SDKs. Flutter and React Native are thin wrappers over the same native iOS and Android renderers, so the module surface is the same one — not a re-implementation of it.
Delegate and Callback Protocols
Each module that communicates events back to your application uses a delegate or callback pattern. The core delegate protocols shared across all platforms include:- iOS
- Android
- Flutter
- React Native
Implement Swift protocols with default empty methods. Conform to only what you need:
Architecture
Offline-First Design
All four SDKs share the same offline-first architecture. Your app never crashes or degrades because of a network issue. Configuration priority — the SDK resolves config using a three-tier fallback:
Events survive app restarts and device reboots. They are only removed from the queue after the server acknowledges receipt.
Experiment Bucketing
All SDKs use the same deterministic hashing algorithm for experiment assignment:Config Bundle for CI/CD
Generate a versioned JSON config bundle on the server and embed it in your app binary for zero-latency first launch:- iOS
- Android
- Flutter
- React Native
Add
appdna-config.json to your Xcode project as a bundle resource.Feature Parity Matrix
All four SDKs have feature parity. Flutter and React Native wrap the native iOS and Android SDKs — the rendering, business logic, storage, and network I/O are the same code paths, reached through a thin facade.Configuration Options
All SDKs accept the same configuration options at initialization:Use
logLevel: debug during development and logLevel: warning or logLevel: none for production builds.Environments
Events, experiments, and configuration are completely isolated between environments. The SDK auto-detects the environment from your API key prefix.
Next Steps
iOS Installation
Add AppDNA to your Xcode project via SPM or CocoaPods.
Android Installation
Add AppDNA to your Gradle build.
Flutter Installation
Add the appdna_sdk package from pub.dev.
React Native Installation
Install @appdna-ai/react-native-sdk from npm.

