The bindings SDK is here: Nutrient Flutter 6
Table of contents
Nutrient Flutter SDK 6 is out, and it promotes the bindings API (introduced as a beta in 5.4) to the recommended surface for new applications. Rather than route cross-platform calls through a method channel, the bindings drive each platform’s native SDK directly through the Java Native Interface (JNI) on Android, the Foreign Function Interface (FFI) on iOS, or JavaScript interop on web:
| Platform | Binding mechanism |
|---|---|
| Android | JNI via jnigen |
| iOS | FFI via ffigen |
| Web | JS interop via dart:js_interop |
What changed under the hood
The SDK is now a federated Flutter plugin. A platform-interface package defines the cross-platform contracts, and separate packages implement them against each native SDK. At runtime, NutrientDocumentView resolves the correct implementation and hands back a typed controller, so document, annotation, bookmark, and form operations compose through controller.document with the same shape on every platform:
NutrientDocumentView( documentPath: 'document.pdf', onControllerReady: (controller) { controller.events.pageChanged.listen((e) => print('Page ${e.pageIndex}')); controller.document.forms.setFormFieldValue('John', 'name'); },);That typed controller.events stream reports the same 17 cross-platform events (document lifecycle, page changes, the full annotation lifecycle, text selection, form field updates, and Instant synchronization) on every platform, and the whole bindings surface lives behind a single package:nutrient_flutter/bindings.dart import. When an app needs a native API the cross-platform surface doesn’t cover, the platform adapters expose the underlying native object directly (AndroidAdapter.nativePdfDocument, IOSAdapter.nativeDocument, NutrientWebAdapter.nativeInstance), with no need to fork the plugin.
Real-time collaboration follows the same shape: NutrientInstantView, the widget that embeds a live Instant document with collaboration on Android and iOS, now uses the same adapter model, with Instant synchronization exposed through a dedicated NutrientInstantController.
The legacy API is deprecated, not removed. Existing apps keep working, and migration can happen one screen at a time.
Upgrading
Version 6 does carry breaking changes: The Pspdfkit.useLegacy flag is gone, annotation colors are now ARGB (alpha, red, green, blue) integers instead of hex strings, and a handful of methods moved or changed signatures. It also raises the version floor across the board. It requires Flutter 3.44.6 or later, updates the underlying Nutrient iOS SDK to 26.10.0 and the Nutrient Web SDK to 1.17.0, and updates the Nutrient Android SDK to 11.6.0, which raises the minimum supported Android API level to 24. The Flutter SDK 6 migration guide covers the full upgrade path: the legacy-to-bindings mapping, every breaking change, and the new pubspec.yaml dependency shape.
Next steps
New apps should start on the bindings: Add the dependencies from the migration guide, import package:nutrient_flutter/bindings.dart, and build from NutrientDocumentView. Teams evaluating Nutrient Flutter SDK can explore the product page or contact our Sales team.