Release notes, Releases Flutter SDK

Flutter SDK Release Notes

4.22.0

7 October 2026

Enhancements

  • Added the configError code to IncodeSdkFlowError. startWorkflow reports it before the Workflow starts when sessionConfig has neither a configurationId nor a token. Previously Android reported a generic SDK error, and iOS failed only after making network requests.

  • Added optional interviewId parameter to the getUserScore method.

  • Added userScoreFailed and userCancelled error codes to IncodeSdkFlowError for the getUserScore method.

  • Added additional fields to the UserScoreResult class and turned its sections into structured objects. See Migration Guide and Results for more details.

  • Added approve method to programmatically initiate approval of the user.

  • Added error to ApprovalResult. It reports the module-level error from the native SDK using IncodeSdkFlowError values.

  • Added optional documentSources parameter to the DocumentScan module. It takes a List<DocumentSource> (camera, photoUpload, fileUpload) and defines which capture sources are offered to the user. It applies to both the V1 and V2 UI. fileUpload is ignored on both Android and iOS for document types that don't support PDF uploads (medicalDoc); if it was the only source, the native SDK default applies.

  • Added optional mergeSessionRecordings to OnboardingSessionConfiguration. It is only honoured by startWorkflow() and ignored by the other entry points that take an OnboardingSessionConfiguration. Omit it to keep current behaviour.

  • Breaking change startWorkflow's onError now receives an IncodeSdkFlowError code, such as permissionsDenied, instead of the native error message. Convert it with error.toIncodeSdkFlowError(). See the Migration Guide.

  • Breaking change The otpVerificationEnabled parameter on the Phone and Email modules is now named otpVerification, matching the native SDK. It affects addPhone(), addEmail(), PhoneModule, and EmailModule. See the Migration Guide.

  • Breaking change PhoneNumberResult.phone is now nullable (String?). It was non-nullable, but the value is absent when the SDK captured no number, for example when the user cancelled, which would have thrown at runtime. See the Migration Guide.

  • Breaking change On Android: user score values no longer include the /100 suffix, in both getUserScore results and the onUserScoreFetched callback. A score whose status was manual previously came through as a localized phrase rather than a number.

  • Breaking change On Android: getUserScore's fetchMode now defaults to accurate, previously fast.

  • Breaking change On Android: getUserScore now reports userScoreFailed when a session produced no score, instead of completing with an empty result.

  • Breaking change On iOS: the plugin now depends on IncodeBridgeCommon, which requires a new spec repository source in your Podfile.

  • Breaking change On iOS: getUserScore's onError now delivers IncodeSdkFlowError codes instead of the native SDK's error strings.

  • Breaking change Renamed faceMatch()'s faceMatchType parameter to matchType. The FaceMatch module's flow-config parameter is still faceMatchType.

  • Breaking change Renamed OnboardingSessionConfiguration's userRegion parameter to region, and onboardingValidationModules to validationModules. Affects every entry point taking an OnboardingSessionConfiguration. region no longer defaults to ALL when omitted; pass it explicitly if you relied on that. region remains Android only. See the Migration Guide.

  • Breaking change Changed faceMatch()'s onError signature from Function(String error) to Function(String code, String message, PlatformException? cause), matching setQuantityStrings. Codes are faceMatchError and, on Android, userCancelled, replacing the previous "UserCancelled" string. A cancellation reaches onError as userCancelled when no onUserCancelled callback is supplied.

  • Breaking change Changed faceMatch()'s confidence, nfcVsIdConfidence and nfcVsSelfieConfidence on Android to return null when there was nothing to compare, instead of -1. Check for null instead of comparing to -1.

  • Phone, Email, and FullName results now share one shape on both platforms: the captured value, plus status and resultCode on PhoneNumberResult, AddEmailResult and AddFullNameResult. Both are non-nullable, so every result carries them on both platforms. status (success / fail) is the portable outcome; resultCode is the finer detail, reporting success and error on both platforms and additionally userCancelled and emulatorDetected on Android, since on iOS a cancellation is reported at the session level rather than through a module callback.

  • ApprovalResult.uuid and ApprovalResult.customerToken are now null on iOS when the user was not approved. Previously they were reported as empty strings. See the Migration Guide.

  • PhoneModule.defaultRegionPrefix is now validated consistently on both platforms. Values outside 1-9999 are ignored and the device's own region prefix is used, matching the documented behavior. Previously an out-of-range value was ignored on Android but passed through on iOS.

  • Deprecated the showDocumentProviderOptions parameter of the DocumentScan module. It maps to the deprecated native chooser flags, is not applied in V2, and is ignored when documentSources is provided. Use documentSources instead. See the Migration Guide.

  • Enhanced jailbreak detection on iOS. Add the URL schemes it queries to LSApplicationQueriesSchemes in your app's Info.plist. See Installation.

Fixes

  • Breaking change A flow configuration naming an unrecognized module now reports unknownModule through onError instead of being skipped. Previously, Android silently dropped the module with no log at all; iOS logged it with print, which does not reach device logs in release. Either way, the flow ran without the step and still reported success, so a stale module name was invisible. See the Migration Guide.
  • Fixed a crash on iOS when a user score contained a warn status, or a status the SDK left unset.
  • Fixed faceMatch()'s FaceMatchResult.isFaceMatched, isNameMatched, nfcVsIdConfidence, nfcVsSelfieConfidence and secondIdConfidence on iOS returning false/0 when there was no data to compare. They now return null, so false/0 means a real result. No action needed unless you need to tell the two apart.

Working with Android SDK 5.54.0 and iOS SDK 5.50.0

4.21.0

16 September 2026

4.21.0
  • Added optional minVideoLengthRequired parameter to the VideoSelfie module.
  • Added locationUnavailable to IncodeSdkFlowError.
  • Added storageUnavailable to IncodeSdkFlowError. Android only. Flow APIs report it when the device cannot provide a writable images directory, so the flow now fails at start instead of losing captures later on.
  • On Android, the SDK reports the user-cancel tracking event as userCanceled instead of userCancelled. The onUserCancelled callback is unchanged. See the Migration Guide.
  • On Android, the Video Selfie V2 camera steps hide the close (X) button, so showCloseButton no longer applies to them. Other screens are unaffected.
  • On Android, Signature V2 reads its title and description from the new onboard_sdk_signature_capture_title and onboard_sdk_signature_capture_description string resources. See the Migration Guide.
  • Fixed a bug on iOS where a skipped, denied or unavailable location during the Geolocation module ended the startOnboarding / startOnboardingSection call immediately.

Working with Android SDK 5.53.0 and iOS SDK 5.49.0

4.20.0

27 August 2026

4.20.0
  • Added a setQuantityStrings method, used to localize plural texts on Android.
  • setTheme and setUXConfig now take a JSON String instead of Map<String, dynamic>. Encode maps with jsonEncode before calling. See the Migration Guide.
  • Added an optional sdkMode parameter to init(). It accepts the same values as setSdkMode, so you can set the mode during initialization.
  • Added a sendDiagnosticsData parameter to init(), for iOS only. Set to false to prevent the Incode SDK from sending diagnostic data. If omitted, the native SDK default is used (true). Ignored on Android.
  • Added configError and invalidInitParams codes to IncodeSdkInitError. Initialize failures now also include a human-readable message; onError still receives the error code.
  • Removed unused waitForTutorials parameter from init(). Tutorial behavior is configured per module with showTutorials; see Modules.
  • Updated the Android build requirements: compileSdk 36, Kotlin Gradle plugin 2.2.21, Android Gradle Plugin 8.9.1, and Gradle 8.14.5 are now the minimums. See the Migration Guide.

Working with Android SDK 5.51.0 and iOS SDK 5.47.0

4.19.0

29 July 2026

4.19.0
  • Added support for Dart 3.x. The plugin's SDK constraint was widened to >=2.12.0 <4.0.0.
  • Added optional voiceConsentLanguage parameter to OnboardingSessionConfiguration to set the voice consent language in the VideoSelfie module. Supported values: 'en', 'es', 'pt', and 'he'. Default is English.
  • Added SNA (Silent Network Authentication) to PhoneModule (only available via Flows integration and on a new variant -sna).
  • Replaced jailbreakDetected error code with integrityCompromised in IncodeSdkFlowError to indicate that the device integrity has been compromised (e.g., jail-broken or rooted).
  • Removed disableJailbreakDetection parameter from init() method.

Working with Android SDK 5.50.0 and iOS SDK 5.46.0

4.18.0

23 June 2026

4.18.0
  • Added isInitialized method that returns a boolean indicating whether the SDK has been fully initialized.
  • Deprecated FaceAuthMode.server in startFaceLogin. Migrate to the FaceAuthentication module instead. FaceAuthMode.local and startFaceLogin() with local mode remain fully supported.
  • Deprecated IncodeSdkFlowError.badEnvDetected. It is no longer reported: the native SDK now terminates the process when a compromised device environment is detected, so the error can never be delivered via onError. It will be removed in a future release.
  • Fixed an Android ANR ("Input dispatching timed out" / FocusEvent) that could occur at startup. SDK setup calls (initialize, setSdkMode, setTheme, setUXConfig, etc.) now run off the platform main thread, with results marshaled back to it.

Working with Android SDK 5.49.0 and iOS SDK 5.44.0

4.17.0

28 May 2026

4.17.0
  • Updated the default values of the faceMaskCheck, eyesClosedCheck, headCoverCheck and lensesCheck parameters to true in the FaceAuthentication module.
  • Updated the default values of the faceMaskCheck and lensesCheck parameters to true in the SelfieScan module.
  • Fixed a bug on iOS where the MLConsent module screen was not shown when type was not provided. The type parameter of MLConsent module is now required.
  • Fixed: showCloseButton(allowUserToCancel: false) now correctly hides the close button on Android. Previously the button was always shown regardless of the parameter value.

Working with Android SDK 5.48.0 and iOS SDK 5.44.0

4.16.0

12 May 2026

4.16.0
  • Added isSkippable flag to the Geolocation module. It allows the geolocation step to be skipped. When set to true, skipping or denying location permission advances the flow instead of ending the session with a permission error.
  • Added allAttemptsExhausted flag to IdScanResult and SelfieScanResult indicating when capture or upload retries are no longer available.
  • Added per-attempt IdScan callbacks onIdFrontAttemptCompleted / onIdBackAttemptCompleted. They fire after every individual capture attempt, including intermediate failures. The terminal attempt is signaled when IdScanResult.allAttemptsExhausted is true or when the attempt succeeds.
  • Added per-attempt SelfieScan callback onSelfieScanAttemptCompleted. It fires after every individual selfie capture attempt, including intermediate failures. The terminal attempt is signaled when SelfieScanResult.allAttemptsExhausted is true or when the attempt succeeds.

Working with Android SDK 5.47.0 and iOS SDK 5.43.0

4.15.0

29 April 2026

4.15.0
  • Added deleteLocalUserData method.
  • Added new internal Android dependency com.incode.sdk.hybrid-bridge that is required to have to a successful build. In case you're experiencing issues fetching it during gradle sync phase please contact your Incode representative, as your account access might have to be updated.
  • Fixed UIScene lifecycle crash on iOS.

Working with Android SDK 5.46.0 and iOS SDK 5.42.0

4.14.0

7 April 2026

4.14.0
  • Added support for Android SDK initialization without api key and with e2ee url.
  • Added parameter showIdTypeChooser to IDScan module. ID Document Chooser visibility is now controlled solely by the showIdTypeChooser parameter in addIdScan. Previously, setting idType implicitly hid the chooser. The configured idType is now only used as a pre-selection when the chooser is disabled (showIdTypeChooser == false)
  • Added new parameter e2eeEncryptionEnabled for startFaceLogin method that enables End-to-End Encryption (E2EE) on Android.
  • Introduced startFaceMatch method to perform a face match without showing UI.
  • Fixed a bug caused by flowTag having been an optional parameter of startNewOnboardingSection. It is now required to provide a flowTag to use startNewOnboardingSection.
  • Removed parameters disableHookDetection, disableEmulatorDetection, disableRootDetection, disableVirtualEnvironmentDetection from init method.
  • Removed simulatorDetected, rootDetected, hookDetected, virtualEnvDetected from IncodeSdkFlowError.

Working with Android SDK 5.45.1 and iOS SDK 5.41.0

4.13.0

26 February 2026

4.13.0
  • Added enableFrontShownAsBackCheck and enableBackShownAsFrontCheck optional parameters to the VideoSelfie module.
  • Deprecated autocaptureUxMode parameter from the IdScan module.
  • Deprecated enableIdSummaryScreen parameter from the ProcessId module.
  • Fixed issue preventing custom V2 theme from applying when configured via JSON.

Working with Android SDK 5.44.0 and iOS SDK 5.40.0

4.12.0

6 February 2026

4.12.0
  • Added new Flutter SDK variant '-l', so now Flutter SDK is delivered in multiple variants: 4.12.0: Standard variant 4.12.0-vc: Includes streaming 4.12.0-nfc: Includes NFC 4.12.0-l: Includes local face recognition models
  • Removed the enableRotationOnRetakeScreen parameter from the IdScan module. Captured documents are now always displayed in a vertical orientation on the Review Screen.
  • Renamed the showRetakeScreen parameter to showRetakeScreenForManualCapture in the IdScan module.
  • Renamed the showAutoCaptureRetakeScreen parameter to showRetakeScreenForAutoCapture in the IdScan module.

Working with Android SDK 5.43.0 and iOS SDK 5.39.1

4.11.0

2 December 2025

4.11.0
  • Added optional sslPinningEnabled and forceSSLPinning parameters to the init method to support SSL pinning configuration.
  • Added title and description params to the Signature module.
  • Fixed error handling on Android.

Working with Android SDK 5.41.1 and iOS SDK 5.38.0

Was this page helpful?