NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Flutter iOS companion plugin for betto_pdfium. Carries the PDFium static xcframework SPM dependency.
Last release 1 months ago
24 Aug 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 1 of 1 stable releases
1 version withdrawn
withdrawn after publishing
3 months old
5 releases · first in 2026
One column per month.
The first stable release of betto_pdfium and its iOS companion plugin betto_pdfium_ios .
The first stable release of betto_pdfium and its iOS companion plugin
betto_pdfium_ios.
betto_pdfium is a pure Dart wrapper around
PDFium via dart:ffi. There is no
dependency on dart:ui or Flutter, so it works in CLI tools, server-side Dart,
and Flutter apps alike. Pre-built PDFium binaries
(bblanchon/pdfium-binaries
chromium/7906) are downloaded automatically by the native-assets build hook on
first use — no C++ toolchain required.
There are no functional changes since 0.1.0-dev.4; this release promotes the
dev channel to a stable version. The notes below summarise everything that
landed across 0.1.0-dev.1 → 0.1.0.
dependencies:
betto_pdfium: ^0.1.0Flutter iOS apps also need the companion plugin, which delivers the PDFium
xcframework via Swift Package Manager:
dependencies:
betto_pdfium: ^0.1.0
betto_pdfium_ios: ^0.1.0All eight targets are supported:
| Platform | Status |
|---|---|
| macOS arm64 | Supported |
| Linux x86_64 | Supported |
| Linux arm64 | Supported |
| Windows x86_64 | Supported |
| iOS arm64 | Supported (xcframework) |
| Android arm64 | Supported |
| Android x86_64 | Supported |
| Web (WASM) | Supported |
On desktop the binary is fetched automatically on the first dart test or
dart run. On iOS the xcframework arrives through SPM during flutter pub get.
Web requires make fetch_wasm_assets to stage the WASM/JS artifacts — see the
package README.
Everything hangs off PdfDocument:
PdfDocument.fromBytes() loads into a backgroundPdfExtractionExceptionPdfError.passwordRequired from PdfError.invalidDocument.close() releases the native handle and is safe to call more than once.getMetadata() (title, author, subject, keywords, creator,getDocumentInfo() (file version,pageCount.extractPlainText() streams PdfPageText per page withhasTextLayer and hasUnicodeErrors flags; isPlainTextExtractable() givesrenderPageToBytes() produces a raw BGRA pixel buffer, withgetPageSize() returns dimensions in points plus sizeForDpi().extractAnnotations() streams typed annotations: text,quadPoints), free text,extractImages() streams image objects with bounding boxes andrenderImage() fetches a single image'ssearch() streams matches with page index, character index, andtableOfContents returns the full nested bookmarkgetThumbnail() returns the embedded /Thumb stream whenpdfinfo CLI — dart run bin/pdfinfo.dart inspects metadata, documentStreams are fully cancellable — cancelling or calling close() stops processing
immediately with no native handle leaks.
PdfiumIsolate), lazily spawned and shared by every PdfDocument.dart:isolate is unavailable, so the same concurrency model ispostMessage protocol. Largedart:ui Image, keeping thedev.4) — when running from.dart_tool/lib/. The loader now walks up from thedev.4) — SDK constraint raised to ^3.13.0, verified608 tests passing at 96.2% line coverage.
packages/betto_pdfium/README.mdpackages/betto_pdfium/CHANGELOG.mdWhen dart test runs from a workspace member package, the native-assets pipeline stages the bundled PDFium library to the workspace root .dart_tool/lib
When dart test runs from a workspace member package, the native-assets
pipeline stages the bundled PDFium library to the workspace root
.dart_tool/lib/, not the package's own .dart_tool/lib/. The runtime loader
(_openLibrary) previously probed only the current directory's
.dart_tool/lib/, so a PDFium call issued from a spawned isolate — which cannot
see the test runner's LD_LIBRARY_PATH and so cannot use the bare-name
fallback — failed with cannot open shared object file: No such file or directory.
This surfaced under Dart 3.13 in the kmdb workspace's PDF vault indexing:
dart test (run from packages/kmdb_cli) stages libpdfium.so to the
workspace root .dart_tool/lib/, but _openLibrary looked in the package dir
and missed it. betto_pdfium's own CI never exercised this because its test
suite injects an explicit dylib path via nativeDylibPath().
dartToolLibCandidates(startDir, libName): walks up from the working.dart_tool/lib/<libName> nearest-first._openLibrary in place$cwd/.dart_tool/lib/ probe.coverage:ignore region.Version stays at 0.1.0-dev.4; bump to 0.1.0 (WI-9) once CI is green.
Co-authored-by: Claude Opus 4.8 noreply@anthropic.com
Version bump — no API changes.
Version bump — no API changes.
Version bump — no API changes.
Version bump — no API changes.
minor fixes for release
minor fixes for release
DynamicLibrary.process() can resolve FPDF_* symbols in Flutter iOS
apps using betto_pdfium.Your coding agent can read these notes before it upgrades. Set up the MCP server →