Browse In-App Agent

Flutter Compatibility & Dependency Matrix

embed_flutter: the official compatibility guide.

SDK version this guide describes: 0.4.0 Flutter coverage: 3.29 → latest stable · Dart: 3.7 – 3.x

This page lists the Flutter and Dart versions and the platform minimums the SDK supports, and the dependency versions it ships with. The platform minimums come from the SDK's native dependencies (LiveKit + WebRTC, permission_handler), not from the SDK's own code.


1. Flutter / Dart support

Declared by the package:

environment:
  sdk: ">=3.7.0 <4.0.0"
  flutter: ">=3.29.0"
Support tierFlutterWhat it means
✅ Reference / tested3.41.x (current stable)Built and tested on physical Android devices with Flutter 3.41.x and Dart 3.11, and built for iOS. Known to work.
✅ Supported3.29 → latest stableThe SDK reads semantics roles (SemanticsData.role), which first shipped in Flutter 3.29. Test the integration in your own app.
⛔ Unsupported< 3.29flutter pub get won't resolve embed_flutter ^0.4.0. Stay on embed_flutter: 0.2.0 (Flutter ≥ 3.0 / Dart ≥ 3.0) until you can upgrade.

The Flutter and Dart minimums are unchanged from 0.3.0. The SDK doesn't require any particular app architecture or build flag.


2. Platform floors

These come from livekit_client (via flutter_webrtc) and permission_handler. The SDK's own code adds no stricter requirement. Check the current versions of those plugins for your exact targets.

PlatformMinimumDriven byNotes
AndroidminSdk 21 (Android 5.0), compileSdk 34+WebRTC (flutter_webrtc)Newer livekit_client / permission_handler majors can raise compileSdk; use the Flutter default compileSdkVersion. Permissions: nothing to add. The SDK declares INTERNET, ACCESS_NETWORK_STATE, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS, WAKE_LOCK, BLUETOOTH_CONNECT and BLUETOOTH (Android 11 and below) itself, and requests the runtime ones.
iOS13.0 deployment targetflutter_webrtc / LiveKitSet platform :ios, '13.0' in the Podfile. Needs NSMicrophoneUsageDescription and PERMISSION_MICROPHONE=1.
Web / desktopnot supportedLiveKit mobile stack + app-support directoryThe SDK targets Android + iOS only.

Platform minimums are unchanged from 0.3.0.


3. Dependency matrix (0.4.0)

These are the SDK's direct dependencies. They are ordinary pub ^ ranges, so your app shares a single copy of each through pub's version solver (there is no peer-dependency nesting as in npm). Resolved is the version pub chose when 0.4.0 was built (Flutter 3.41.5 / Dart 3.11). Your app may resolve to any compatible newer version.

PackageConstraintResolved (0.4.0 build)Role in the SDKCompatibility notes
flutterSDK (≥ 3.29.0)3.41.5UI + widget layer, Semantics tree—
livekit_client^2.5.32.6.5Real-time voice, the data channel used by the agent, and the agent's video trackThe heaviest native dependency (WebRTC), and the source of the Android/iOS minimums. If your app also uses livekit_client, keep it within ^2.5; a recent 2.x (2.9 or later) is recommended.
flutter_webrtcvia livekit_client1.3.0WebRTC engineTransitive. Don't add a second copy.
permission_handler^12.0.112.0.1Microphone and Bluetooth permission requests + settings deep-linkMajor bumps periodically raise the Android compileSdk/targetSdk minimum.
lottie^3.3.13.3.2Agent button / avatar animationsPure Dart rendering; low risk.
shared_preferences^2.2.22.5.4Small key/value SDK state (configuration, event queue, the signed-in user)—
path_provider^2.1.02.1.5App-support directory for the on-device screen cache—
http^1.2.01.6.0REST calls (initialize, token, screen-cache sync, analytics)—

Direct dependency constraints are unchanged from 0.3.0. There are no peer dependencies to declare. The Chelsea Market font ships with the package.

New in 0.4.0: embed_flutter is a Flutter plugin. It has a small Android part (its manifest carries the permissions above, plus a check for a connected Bluetooth headset) and a Dart-only iOS part. Flutter picks it up automatically, and there is nothing to configure. Android hosts with an older livekit_client (below 2.9) now keep call audio on a connected headset too.

To check that your app resolves a single copy of each:

flutter pub deps --style=compact | grep -E "livekit_client|flutter_webrtc|permission_handler|lottie"

4. "Install succeeds" ≠ "works": the checklist

  1. Flutter ≥ 3.29 / Dart ≥ 3.7. Otherwise flutter pub get fails to resolve 0.4.0.
  2. iOS deployment target ≥ 13.0 in the Podfile. Otherwise pod install fails on the WebRTC pod.
  3. Android minSdk ≥ 21. Otherwise the WebRTC AAR won't link.
  4. iOS permissions declared: NSMicrophoneUsageDescription + PERMISSION_MICROPHONE=1. If these are missing, the call silently never connects. Android needs nothing: the SDK declares its own permissions.
  5. EmbedNavigatorObserver registered and a USER_DATA event sent after login. Without the observer the agent has no route context. Without a user the token fetch is skipped and no call can start. From 0.4.0 the user is kept across app restarts until EmbedWidget.clearUserSession(), which you must call on logout.
  6. If your app already depends on livekit_client, keep it within ^2.5 so pub resolves a single copy.

5. Upgrading

  • 0.3.0 → 0.4.0: change the constraint to ^0.4.0, then:
    • Call EmbedWidget.clearUserSession() on logout. The signed-in user is now kept across app restarts.
    • Update any analytics that read click event_names. They no longer end in _<screen>; see the 0.4.0 release notes.
    • The Android permissions in your manifest can stay or go.
  • 0.2.0 → 0.4.0: also upgrade Flutter to 3.29+ if needed.
  • Upgrading Flutter within 3.x (from 3.29 on) is safe.
  • When you bump livekit_client or permission_handler majors, re-check the Android compileSdk and iOS deployment-target minimums. Those two plugins are where platform-minimum changes come from.

ComponentRecommended
Flutterlatest stable (≥ 3.29)
Dartbundled with Flutter (≥ 3.7)
iOS deployment target13.0
Android minSdk / compileSdk21 / Flutter default (34+)
embed_flutter^0.4.0

See the Flutter integration guide for the step-by-step setup.


Support