Customize the scanning UI
The UX package ships a complete scanning screen with a camera preview, a reticle, and real-time instructions. You can adjust which elements appear, apply your brand's colors and fonts, and change the instruction text without leaving the prebuilt UI.
This article covers the look and behavior of the scanning screen. To translate the instruction text or supply your own wording, see Translate the SDK.
Show or hide UI elements
The most common customization is toggling the onboarding guide and the help button. Each platform exposes these through its UX settings.
- Web (TS)
- Android (Kotlin)
- iOS (Swift)
- Flutter (Dart)
- React Native (TS)
On web, the onboarding guide is controlled through feedbackUiOptions.
import { createBlinkId } from "@microblink/blinkid";
const blinkId = await createBlinkId({
licenseKey: "your-license-key",
feedbackUiOptions: {
showOnboardingGuide: false,
},
cameraManagerUiOptions: {
showMirrorCameraButton: false,
},
});
BlinkIdCameraScanningScreen(
blinkIdSdk = blinkIdSdk,
uiSettings = UiSettings(
showOnboardingDialog = false,
showHelpButton = false,
),
onScanningSuccess = { result -> },
onScanningCanceled = { }
)
let analyzer = try await BlinkIDAnalyzer(sdk: sdk)
BlinkIDUXView(
analyzer: analyzer,
onScanCompleted: { resultState in
guard let result = resultState.scanningResult else { return }
}
)
.uxSettings(ScanningUXSettings(
showIntroductionAlert: false,
showHelpButton: false
))
final uxSettings = BlinkIdScanningUxSettings(
showOnboardingDialog: false,
showHelpButton: false,
);
final result = await blinkIdPlugin.performScan(
blinkIdSdkSettings: sdkSettings,
blinkIdSessionSettings: sessionSettings,
blinkidScanningUxSettings: uxSettings,
);
const result = await performScan({
sdkSettings: { licenseKey: "your-license-key", downloadResources: true },
sessionSettings: {
scanningMode: "automatic",
scanningSettings: { documentCaptureModule: {}, mrzModule: {}, barcodeModule: {}, vizModule: {} },
},
scanningUxSettings: {
showOnboardingDialog: false,
showHelpButton: false,
},
});
Apply your brand colors and fonts
On Android, the scanning UI is themeable through UiSettings.
You can override the Material 3 color scheme, the colors of graphical elements such as the reticle and help button (uiColors), and the typography.
Leaving a value null keeps the default, which follows the device's light or dark mode.
BlinkIdCameraScanningScreen(
blinkIdSdk = blinkIdSdk,
uiSettings = UiSettings(
colorScheme = myBrandColorScheme, // androidx.compose.material3.ColorScheme
uiColors = myReticleColors, // com.microblink.ux.theme.UiColors
typography = myBrandTypography, // com.microblink.ux.theme.UiTypography
),
onScanningSuccess = { result -> },
onScanningCanceled = { }
)
Visual theming differs by platform:
- Web: the UI mounts into a container you control (see below) and is rendered with web components, so apply your own CSS to match your brand.
- iOS:
BlinkIDUXViewis a SwiftUI view; see the iOS UX SDK reference for the available theming entry points. - React Native and Flutter: the wrappers expose the behavior toggles shown above (onboarding, help button, haptic feedback, preferred camera) but not color or font theming. For full visual control, integrate the native Android or iOS UX package.
Mount the scanner in your own layout
On web, pass a targetNode to render the scanner inside an element you control instead of the document body.
const blinkId = await createBlinkId({
licenseKey: "your-license-key",
targetNode: document.getElementById("scanner-container")!,
});
On Android and iOS, the scanner is a composable (BlinkIdCameraScanningScreen) or a SwiftUI view (BlinkIDUXView), so you place it in your own layout like any other view.
Change the instruction text
The on-screen instructions and accessibility strings are part of the SDK's localization. You can replace the default wording or add a new language:
- Web:
feedbackUiOptions.localizationStringsandcameraManagerUiOptions.localizationStrings. - Android:
UiSettings.sdkStrings. - iOS: the localization entry points described in Translate the SDK.
See Translate the SDK for the full localization workflow.