# Overview

The `flutter_ts_identity_orchestration` is a Flutter plugin for Mosaic Orchestration. It enables secure identity verification and authentication flows in your Flutter app using Mosaic. It allows your application to start journeys, handle journey steps, and submit client responses through a stream-based event model.

Note
For platform-specific implementation details and advanced configuration, refer to the native SDK documentation:

- [iOS documentation](https://developer.transmitsecurity.com/guides/webauthn/quick_start_sdk_ios/)
- [Android documentation](https://developer.transmitsecurity.com/guides/webauthn/quick_start_sdk_android/)


## Capabilities

- Start and manage journeys from the client side
- Handle journey steps and submit client responses
- Stream-based real-time event handling via `journeyResponseStream`
- Support for mobile approve flows
- Push token management
- Debug PIN generation for development


## Requirements

- Flutter 3.0.0+, Dart 2.17.0+
- iOS 13.0+, Xcode 12+
- Android API 21+ (Android 5.0), compileSdkVersion 34+


## Installation

Add the dependency to your `pubspec.yaml`:

```yaml
dependencies:
  flutter_ts_identity_orchestration:
    git:
      url: https://github.com/TransmitSecurity/flutter_ts_identity_orchestration.git
      ref: 0.0.3
```

Install dependencies:

```bash
flutter pub get
```

## Platform setup

iOS
Add permissions to `ios/Runner/Info.plist` (if using camera and FaceID):

```xml
<key>NSCameraUsageDescription</key>
<string>This app needs camera access for identity verification</string>
<key>NSFaceIDUsageDescription</key>
<string>This app uses Face ID for authentication</string>
```

Set the minimum iOS version in `ios/Podfile`:

```ruby
platform :ios, '13.0'
```

Android
Add permissions to `android/app/src/main/AndroidManifest.xml`:

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
```

Add the Maven repository to `android/build.gradle`:

```gradle
allprojects {
    repositories {
        google()
        mavenCentral()
        maven {
            url "https://transmit.jfrog.io/artifactory/transmit-security-gradle-release-local/"
        }
    }
}
```

Update `android/app/build.gradle`:

```gradle
android {
    compileSdkVersion 34

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 34
    }
}
```

Make sure your `MainActivity` inherits from `FlutterFragmentActivity`:

```kotlin
import io.flutter.embedding.android.FlutterFragmentActivity

class MainActivity: FlutterFragmentActivity() {
}
```

This is required for proper plugin functionality and native SDK integration.

## Initialization

You can initialize the SDK either with a configuration file or with explicit parameters.

Configuration file
```dart
import 'package:flutter_ts_identity_orchestration/flutter_ts_identity_orchestration.dart';

final orchestration = FlutterTsIdentityOrchestration();
await orchestration.initializeSDK(configurationFile: 'TransmitSecurity');
```

Parameters
```dart
import 'package:flutter_ts_identity_orchestration/flutter_ts_identity_orchestration.dart';

final orchestration = FlutterTsIdentityOrchestration();
await orchestration.initialize(
  clientId: 'CLIENT_ID',
  options: {
    'serverPath': 'https://api.transmitsecurity.io',
    'locale': 'en',
  },
);
```

## Regional base URLs

| Region | Base URL |
|  --- | --- |
| US | `https://api.transmitsecurity.io/` |
| EU | `https://api.eu.transmitsecurity.io/` |
| Canada | `https://api.ca.transmitsecurity.io/` |
| Sandbox | `https://api.sbx.transmitsecurity.io/` |
| Custom domain | `https://<your-domain>.com/` (see [Custom domains](/guides/deployment/custom_domains)) |


## Next steps

Once initialized, implement orchestration flows using the available [functions](/sdk-ref/flutter-ts-identity-orchestration/functions).