This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /blog/nutrient-flutter-6-bindings-api.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. The bindings SDK is here: Nutrient Flutter 6

Table of contents

    The bindings SDK is here: Nutrient Flutter 6

    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:

    PlatformBinding mechanism
    AndroidJNI via jnigen
    iOSFFI via ffigen
    WebJS 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.

    Julius Kato Mutumba

    Julius Kato Mutumba

    Hybrids Team Lead

    Julius joined PSPDFKit in 2021 as an Android engineer and is now the Cross-Platform Team Lead. He has a passion for exploring new technologies and solving everyday problems. His daily tools are Dart and Flutter, which he finds fascinating. Outside of work, he enjoys movies, running, and weightlifting.

    Explore related topics

    Try for free Ready to get started?