Migration
Version 3.0.0 - Sep 05, 2026
Version 3.0.0 is binary breaking. Rebuild your app against the new package rather than swapping the assembly.
Minimum platform versions
The minimum platform versions have been raised. Adapt your project accordingly if you are still below them:
| Minimum | |
|---|---|
| .NET | 9 (10 is supported as well) |
| Android | 6.0 (API level 23) |
| iOS | 13.0 |
Fields became properties
All configuration values are now properties instead of public fields. In almost all cases your code does not need to change, since the syntax for reading and writing them is identical:
var scanConfig = new DocumentScannerConfiguration();
scanConfig.ConfirmPages = true;
You do need to adapt your code if you passed a configuration value by ref or out, or if you accessed it through reflection.
DocutainColor.Light and DocutainColor.Dark are now nullable (Color?). Both of them have to be set for a color to be applied.
Sealed and abstract configuration classes
DocumentScannerConfiguration and PhotoPaymentConfiguration are now sealed, their shared base class BaseScannerConfiguration is now abstract and cannot be instantiated any more. If you derived your own class from one of them, use composition instead, e.g. a factory method that returns a preconfigured DocumentScannerConfiguration.
Uninitialized SDK now throws
Using SDK functionality before DocutainSDK.InitSDK returned true used to fail silently or with an arbitrary platform exception. It now throws a DocutainSdkNotInitializedException.
If you already check the return value of DocutainSDK.InitSDK as described in SDK Initialization, nothing changes for you. See Error Handling for the complete list of exceptions.
Nullable return values
Document.WritePDF, Document.WriteImage and Document.GetImageBytes are now annotated as nullable. They always returned null on error, so this only makes the existing behaviour visible to the compiler. With nullable reference types enabled, you may need to add a null check:
string? pdfFile = Document.WritePDF(destinationPath);
if (pdfFile == null)
{
var error = DocutainSDK.LastError;
}
DocutainSDK.IsInit is now read-only. It was a writable field before, but writing to it never had any effect other than confusing the SDK.
Version 2.0.0 - May 12, 2025
Onboarding
With the new comprehensive onboarding functionality, the customizing of the previous onboarding popup within the scan screen has been moved to the new scanHintPopup class.
Therefore, the following properties have been deprecated and will be removed in a future version. If you are currently using at least one of them, we recommend to migrate to the new onboarding functionality as early as possible, to avoid breaking changes in the future.
DocumentScannerConfiguration
| Property | Type | Description |
|---|---|---|
OnboardingImageSource | string? | Your custom image for the onboarding dialog that appears when scan is opened for the first time. Its replacement Onboarding.ScanHintPopup.ImageSource takes the image the same way, see Image resources. |
TextConfiguration
| Property | Type | Description |
|---|---|---|
TextOnboardingTitle | string | The text to show in the onboarding popup title that appears when the scan page is opened for the first time. |
TextOnboardingMessage | string | The text to show in the onboarding popup message that appears when the scan page is opened for the first time. |
TextOnboardingCloseButton | string | The text to show in the onboarding popup close button that appears when the scan page is opened for the first time. |
TextSizeOnboardingTitle | float | The text size of the onboarding popup title that appears when the scan page is opened for the first time. |
TextSizeOnboardingMessage | float | The text size of the onboarding popup message that appears when the scan page is opened for the first time. |