Choosing a cross-platform barcode scanner for .NET MAUI isn’t easy. Hardware, operating system, and platform support varies widely across libraries in the ecosystem.
In this article, we compare two popular barcode scanning libraries for .NET MAUI: ZXing.Net.Maui and BarcodeScanning.Native.Maui. We look at a variety of aspects, from capabilities to maintenance and support.
Short on time? Then start with the quick summary below.
💡 Key findings
Supported platforms:
- ZXing.Net.Maui: Android, iOS, and Windows (barcode generation only)
- BarcodeScanning.Native.Maui: Android (using Google ML Kit) and iOS/macOS (Apple VisionKit)
- ZXing.Net.Maui supports a wide variety of 1D and 2D barcodes.
- BarcodeScanning.Native.Maui supports fewer symbologies. Moreover, barcode support is inconsistent across platforms, with more supported on iOS/macOS than on Android.
Capabilities and customizability:
Both libraries can scan codes from the live camera stream and from images. Neither provides a default UI – you’ll have to build your own.
- ZXing.Net.Maui offers barcode generation, but lacks zoom and ROI setup features
- BarcodeScanning.Native.Maui provides more advanced features, but can’t generate barcodes
- ZXing.Net.Maui is well-established, but its core library is in maintenance mode. Updates include bug fixes, but there is no active feature development.
- BarcodeScanning.Native.Maui is actively maintained and developed. However, its progress is dependent on the underlying native libraries.
Both libraries are dependent on community contributions, with no official support in place.
- ZXing.Net.Maui
- Difficulties scanning small and dense barcodes
- Camera focus issues
- Reduced barcode readability on nano-texture screens on iOS
- Limited Windows support
- BarcodeScanning.Native.Maui
- Incorrect UPC-A decoding on iOS
- Orientation issues on iOS
- Difficulties scanning tiny barcodes
A detailed comparison: ZXing.Net.Maui vs. BarcodeScanning.Native.Maui
ZXing.Net.Maui is the successor to ZXing.Net.Mobile and provides MAUI controls for camera-based barcode scanning and barcode generation. It builds on the ZXing.Net engine – a C#/.NET port of the original Java ZXing library. Scanning and barcode generation are available on Android and iOS. Windows is generation-only.
BarcodeScanning.Native.Maui uses native APIs – Google ML Kit on Android and Apple VisionKit on iOS/macOS – for camera-based barcode scanning. At the time of writing, Windows is not supported.
Supported barcodes
ZXing.Net.Maui supports a broad set of 1D and 2D symbologies, including GS1 DataBar and DataBar Expanded. It also covers more industry-specific types like the Intelligent Mail barcode.
BarcodeScanning.Native.Maui (BSNM) covers the most common formats, but fewer overall. It lacks support for UPC-A/EAN extensions on all platforms. On iOS/macOS, it supports GS1 DataBar variants (including DataBar Limited) and adds Micro QR and Micro PDF417 – formats not available on Android or in ZXing.Net.Maui.
Both libraries allow restricting which formats will be scanned.
| Barcode types | ZXing.Net.Maui – all platforms | BSNM – Android | BSNM – iOS/macOS |
| UPC-A | ✅ Yes | ✅ Yes | ✅ Yes |
| UPC-E | ✅ Yes | ✅ Yes | ✅ Yes |
| UPC-A/EAN Extension | ✅ Yes | ❌ No | ❌ No |
| EAN-8 | ✅ Yes | ✅ Yes | ✅ Yes |
| EAN-13 | ✅ Yes | ✅ Yes | ✅ Yes |
| ITF (Interleaved 2 of 5) | ✅ Yes | ✅ Yes | ✅ Yes |
| Code 39 | ✅ Yes | ✅ Yes | ✅ Yes |
| Code 93 | ✅ Yes | ✅ Yes | ✅ Yes |
| Code 128 | ✅ Yes | ✅ Yes | ✅ Yes |
| Codabar | ✅ Yes | ✅ Yes | ✅ Yes |
| MSI Plessey | ✅ Yes | ❌ No | ❌ No |
| Intelligent Mail barcode (IMb) | ✅ Yes | ❌ No | ❌ No |
| GS1 DataBar | ✅ Yes | ❌ No | ✅ Yes |
| GS1 DataBar Expanded | ✅ Yes | ❌ No | ✅ Yes |
| GS1 DataBar Limited | ❌ No | ❌ No | ✅ Yes |
| QR Code | ✅ Yes | ✅ Yes | ✅ Yes |
| Micro QR Code | ❌ No | ❌ No | ✅ Yes |
| Data Matrix | ✅ Yes | ✅ Yes | ✅ Yes |
| Aztec | ✅ Yes | ✅ Yes | ✅ Yes |
| PDF417 | ✅ Yes | ✅ Yes | ✅ Yes |
| Micro PDF417 | ❌ No | ❌ No | ✅ Yes |
| MaxiCode | ✅ Yes | ❌ No | ❌ No |
| PharmaCode | ✅ Yes | ❌ No | ❌ No |
Capabilities and customizability
Both libraries support scanning from the live camera and from static images, and all processing runs on-device.
ZXing.Net.Maui does not expose zoom, nor does it support setting a region of interest (ROI). It therefore always scans the full camera frame.
BarcodeScanning.Native.Maui, in contrast, does provide zoom and camera controls. Setting an ROI is also possible, using either ViewfinderMode or AimMode. On Android, it can invert source images to scan inverted barcodes, which the native libraries don’t support. However, this impacts performance.
Neither of the libraries provide a user interface out of the box. When using ZXing.Net.Maui, you build your own UI around the CameraBarcodeReaderView component. Similarly, BarcodeScanning.Native.Maui uses CameraView.
| Feature | ZXing.Net.Maui – Android/iOS | BSNM – Android/iOS/macOS |
| Scan multiple codes at once | ✅ Yes | ✅ Yes |
| Scan from images | ✅ Yes | ✅ Yes |
| Omnidirectional scanning | ✅ Yes | ✅ Yes |
| Camera switching | ✅ Yes | ✅ Yes |
| Torch toggle | ✅ Yes | ✅ Yes |
| Zoom control | ❌ No | ✅ Yes |
| Define ROI | ❌ No | ✅ Yes |
Maintenance and updates
ZXing.Net.Maui is a stable, maintenance-focused library. The underlying ZXing engine is in maintenance mode, so updates focus on compatibility, device-specific fixes, build tooling, and bug fixes rather than new features.
BarcodeScanning.Native.Maui is actively developed. Updates regularly deliver bug fixes, and improvements to performance and OS/hardware compatibility. New capabilities generally track the underlying native APIs (ML Kit and VisionKit). However, their long-term availability is not guaranteed. Google’s history of product deprecations is a useful caution.
Community and support
ZXing, in general, has a broader community as it has been around for a long time. While there is no official support, developers typically find answers to questions on GitHub, Reddit and Stack Overflow.
Support for BarcodeScanning.Native.Maui, too, relies on community contributions. While it can take time, fellow developers and library maintainers actively respond to open GitHub issues.
Integration and developer resources
While both libraries have an active community, neither offers documentation. In the table below, you can find links to useful resources to help you get started.
| ZXing.Net.Maui | BarcodeScanning.Native.Maui |
| GitHub repository NuGet package Integration tutorial | GitHub repository NuGet package Integration tutorial |
Limitations
Even with community support and solid resources, real-world scanning is full of edge cases. Device cameras, OS APIs, and the underlying engines (ZXing, Apple VisionKit, Google ML Kit) all have constraints that may cause issues in production.
Below are some recurring issues flagged in repositories and community threads on Stack Overflow and Reddit.
ZXing.Net.Maui
Apart from ZXing being in maintenance mode, developers have mentioned some other limitations.
Difficulties scanning small and dense barcodes
ZXing.Net.Maui has issues with scanning small codes, even on higher-end devices. Developers also flag that the scanner has difficulties detecting denser barcodes, such as PDF417.
Camera focus issues on iOS and Android
On iPhone 15 Pro devices, the scanner initializes but fails to auto-focus on barcodes. The camera feed often stays blurry at close range and defaults to the wrong lens, requiring manual distance adjustment. While reported specifically for QR and EAN codes, the problem likely affects all barcode types. Similar issues have been flagged on Android 10.
Reduced barcode readability on nano-texture screens on iOS
On iOS devices, QR codes shown on Apple’s nano-texture glass can appear low-contrast or slightly blurred to the camera because the matte surface diffuses light. This lowers edge clarity and may prevent reliable detection, even though Android devices don’t appear to have the issue. This behavior has been observed on M4 MacBook Pro displays.
Limited Windows scanning support
While ZXing.Net.Maui supports barcode generation on Windows, the README states that barcode scanning is not supported on the platform. There is, in fact, experimental support. Some developers have managed to display the camera preview, but report that actual scanning fails to work.
Even when scanning does work, it comes with limitations. For example, on desktop apps with multiple webcams, the scanner doesn’t allow selecting a specific camera. Other users bring up that QR codes are supported, but 1D codes are not.
Because scanning behavior is not guaranteed and they are officially unsupported, Windows scanning capabilities are not production-ready.
BarcodeScanning.Native.Maui
As we commonly see in cross-platform libraries, BarcodeScanning.Native.Maui inherits limitations from its underlying APIs.
Incorrect UPC-A decoding on iOS
On iOS, scanning UPC-A barcodes adds an extra leading zero, while scanning on Android returns the correct value. The issue is that it maps UPC-A to VNBarcodeSymbology.Ean13, as Apple’s VisionKit framework lacks native UPC-A support.
Camera preview rotation issues on iOS
In recent versions (2.1.9+), the camera preview on iOS may appear rotated by 90 degrees. This occurs across both portrait and landscape orientations, including when screen rotation is locked.
The problem began after replacing the deprecated VideoOrientation API with VideoRotationAngleForHorizonLevelPreview in iOS/macOS 17+, which requires additional handling of device and sensor rotation angles.
Difficulties scanning tiny barcodes
BarcodeScanning.Native.Maui may struggle to detect tiny barcodes. The limitation stems from the underlying ML Kit and VisionKit APIs, where narrow spacing in small barcodes prevents reliable detection. Zooming might improve the issue a bit.
Conclusion: Which library should you choose?
The best choice depends on your project’s priorities.
Use ZXing.Net.Maui if you want a mature and stable library that supports both barcode generation and scanning on iOS and Android, with partial functionality on Windows. However, its ZXing core is in maintenance mode with no active feature development – a key reason why users are switching to BarcodeScanning.Native.Maui.
BarcodeScanning.Native.Maui is the better choice if you need active development, macOS support and more features. However, be aware that its functionalities track the underlying native libraries. This also introduces inconsistencies in barcode support and behavior across platforms.
While both libraries have a solid community, neither has official support. Especially for enterprise applications, this introduces real risks.
Scanbot SDK: Reliable and fast cross-platform barcode scanning software
If you want consistent cross-platform performance and reliable support, commercial SDKs are the way to go.
Among them: the Scanbot .NET MAUI Barcode Scanner SDK.
“Switching to Scanbot SDK from ZXing significantly improved our ability to scan Data Matrix codes. We evaluated several solutions, and the Scanbot SDK provided the perfect blend of performance and value.”
(Benedikt Niermann, Process Improvement Officer, KROHNE Group)
Beyond performance, there are 5 key reasons why customers choose the Scanbot SDK:
- 100% offline scanning: All data is processed locally on the device, ensuring uninterrupted workflows and compliance with data security regulations.
- Advanced scanning modes: The Scanbot Barcode Scanner SDK provides ready-made modes for scanning single or multiple barcodes, for finding particular barcodes, and for counting barcodes. No additional development effort needed.
- User-friendly features: User guidance, real-time feedback, and AR overlays help users scan barcodes and improve the overall user experience.
- Ease of integration: Ready-to-use UI components accelerate app development. Additionally, the detailed documentation, tutorials, and technical support ensure your integration process runs smoothly.
- Transparent fixed pricing: Our pricing model is straightforward: A fixed annual fee for unlimited scans on unlimited devices. We don’t hamper your growth.
Curious to try our solution yourself? Test our demo app or request a free 7-day trial license.

FAQ
Which libraries does BarcodeScanning.Native.Maui use under the hood?
BarcodeScanning.Native.Maui uses the Google ML Kit Barcode Scanner API on Android and the Apple VisionKit Framework API on iOS and macOS.
Does either library parse GS1 Application Identifiers or BCBP (boarding pass) data out of the box?
ZXing.Net.Maui supports GS1 DataBar and GS1 DataBar Expanded. BarcodeScanning.Native.Maui supports the same, plus GS1 DataBar Limited – but only on iOS/macOS, not on Android.
Neither library parses PDF417 boarding passes (BCBP) out of the box.
The Scanbot SDK, however, provides parsers for GS1 and all its variants, and for BCBP.
Does either library support Windows scanning now or on the roadmap?
In short, no. Neither library supports scanning today on Windows. While ZXing.Net.Maui users have successfully implemented scanning, it remains limited and experimental.
For BarcodeScanning.Native.Maui, Windows is currently unsupported and not on the roadmap.
If you need Windows support, you may want to consider a commercial solution. Check out the Scanbot Windows Barcode Scanner SDK for more information.
What value does a commercial solution bring compared to open-source software?
In short, a commercial SDK trades license cost for predictable maintenance, consistent cross-platform behavior, and accountable support.
While open-source software is inexpensive and flexible, it can introduce risks in production:
Compatibility risk: Major OS releases and new devices can break existing behavior. Keeping pace requires ad-hoc fixes or waiting for community patches.
Cross-platform consistency: Achieving uniform results across iOS, Android, macOS, and Windows is difficult when libraries rely on different native frameworks. Performance and supported symbologies may vary by platform.
Stability over time: Even mature projects can slow down, shift into maintenance mode, or become abandoned. There is no guarantee of continued development, timely updates, or long-term availability.
Support: Commercial SDKs typically include access to a dedicated support team, extensive documentation, and responsiveness. This minimizes integration time and any downtime – vital for enterprise applications.
What barcodes does the Scanbot Barcode Scanner SDK support?
The Scanbot Barcode Scanner SDK supports:
1D barcodes:
EAN-13, EAN-8, EAN-2, EAN-5, ISBN, UPC-A, UPC-E, Code 128, Code 25, Code 39, Code 32, Code 93, Code 11, Codabar, MSI Plessey, Standard 2 of 5, ITF, IATA 2 of 5, One-track Pharmacode and Two-track Pharmacode.
2D barcodes:
QR Code, Micro QR Code, rMQR Code, Aztec, PDF417, MicroPDF417, Data Matrix, MaxiCode, GiroCode, Swiss QR Code, Royal Mail Mailmark, NTIN Code, PPN Code, and UDI Code.
Postal symbologies:
USPS Intelligent mail, RM4SCC, Australia Post 4-State Customer Code, Japan Post 4-State Customer Code, and KIX.
Parsers:
– GS1 Codes: GS1-128, GS1 DataBar, GS1 DataBar Expanded, GS1 Data Matrix, GS1 DataBar Composite, GS1 DataBar Limited, GS1 DataBar Expanded, and GS1 DataBar Truncated.
– PDF417: AAMVA, ID cards, boarding passes (BCBP), and German medical certificates.
– QR Code: vCard, QR-bill data in Swiss QR Codes, and SEPA QR Codes.
– Data Matrix: XML data for German medication plans.
– Various symbologies: HIBC (Health Industry Bar Code) data
What platforms does the Scanbot .NET MAUI Barcode Scanner SDK support?
It is available for iOS and Android. We offer support for Windows in a standalone SDK.