Businesses are moving from dedicated scanner hardware to more flexible software solutions. Modern apps can now easily scan barcodes using camera APIs and scanning libraries, eliminating the need for expensive hardware scanners.
This article compares 3 free/open-source libraries and 3 commercial SDKs. We'll cover platform support, barcode types, performance, and pricing to help you choose the right barcode scanning solution for your project.
Open-Source and Free Software
In 2024, GitHub logged over five billion contributions across more than 500 million open source projects. Open source is hotter than ever, and for good reason: The source code is publicly available, enabling anyone to use, modify, and distribute open source libraries and apps freely.
For barcode scanning specifically, here are 3 popular free options (also including one that is proprietary, but free of charge).
ZXing (“zebra crossing”) is a mature, Apache 2.0 licensed barcode scanning library. It was originally developed in Java, but has since been ported to many languages and frameworks. Note that ZXing is currently in maintenance mode – it receives occasional bug fixes but no major new features.
The ML Kit Barcode Scanner API is part of Google’s ML Kit SDK. It is free, but not open source. The API is available for iOS and Android, and there is an official plugin for Flutter. ML Kit runs entirely on-device.
QuaggaJS (and its actively maintained fork, Quagga2) is an open-source JavaScript library for real-time barcode scanning in the browser. As it uses modern web APIs, it does not require any native plugins or extensions.
Supported Frameworks
Platform compatibility is one of the first factors to consider when choosing a solution.
ZXing has broad ecosystem coverage through ports and wrappers. You’ll find options for Android, iOS, .NET, and JavaScript. Community-created bindings also exist for Flutter, React Native, MAUI, and languages like Python and Rust.
The ML Kit Barcode Scanner API is officially available on Android and iOS only, with a first-party plugin for Flutter. Community wrappers exist for other cross-platform frameworks such as React Native, Xamarin, or Capacitor.
QuaggaJS runs on all modern browsers (Chrome, Firefox, Safari, Edge, and their mobile versions, but not Internet Explorer 11). Because it’s pure JavaScript, it also works inside hybrid app frameworks like Cordova, Ionic, or Capacitor.
Platform / Framework | ZXing | ML Kit Barcode Scanner API | QuaggaJS |
---|---|---|---|
NATIVE / SERVER-BASED | |||
Android | ✅ zxing | ✅ ML Kit Android | ❌ |
iOS | ✅ zxingify-objc | ✅ ML Kit iOS | ❌ |
Web/JavaScript | ✅ zxing-js | ❌ | ✅ quagga2 |
Windows | ✅ ZXing.Net | ❌ | ❌ |
CROSS-PLATFORM | |||
React Native | ✅ react-native-barcode-z-xing | ✅ react-native-ml-kit | ❌ |
Flutter | ✅ flutter_zxing | ✅ ML Kit Flutter plugin | ❌ |
.NET MAUI | ✅ ZXing.Net.MAUI | ❌ | ❌ |
Cordova | ✅ cordova-plugin-zxing | ✅ cordova-plugin-mlkit-barcode-scanner | ✅ (hybrid apps) |
Xamarin | ✅ ZXing.Net.Mobile | ✅ Xamarin.Google.MLKit.BarcodeScanning | ✅ (hybrid apps) |
Capacitor | ❌ | ✅ capacitor-mlkit/barcode-scanning | ✅ (hybrid apps) |
Supported Barcode Types
Different use cases require different barcode formats. Here's what each library can decode:
ZXing offers the most comprehensive coverage, supporting virtually all common 1D and 2D barcode formats, plus specialized ones like MaxiCode and GS1 DataBar variants.
ML Kit covers all major retail and consumer barcode types.
QuaggaJS scans common 1D barcodes only.
Symbology | ZXing | ML Kit Barcode Scanner API | QuaggaJS |
---|---|---|---|
EAN-13 | ✅ | ✅ | ✅ |
EAN-8 | ✅ | ✅ | ✅ |
UPC-A | ✅ | ✅ | ✅ |
UPC-E | ✅ | ✅ | ✅ |
UPC/EAN Extension 2/5 | ✅ | ✅ | ❌ |
Code 128 | ✅ | ✅ | ✅ |
Code 39 | ✅ | ✅ | ✅ |
Code 93 | ✅ | ✅ | ✅ |
Code 32 | ❌ | ❌ | ❌ |
Codabar | ✅ | ✅ | ✅ |
ITF | ✅ | ✅ | ✅ |
QR Code | ✅ | ✅ | ❌ |
DataMatrix | ✅ | ✅ | ❌ |
PDF417 | ✅ | ✅ | ❌ |
MaxiCode | ✅ | ❌ | ❌ |
Aztec | ✅ | ✅ | ❌ |
GS1 DataBar (RSS-14) | ✅ | ❌ | ❌ |
GS1 DataBar Expanded (RSS-Expanded) | ✅ | ❌ | ❌ |
MSI Plessey | ❌ | ❌ | ✅ |
Beyond basic decoding, some libraries offer built-in parsing for structured data.
ML Kit has built-in parsers for common QR code payloads: URLs, Wi-Fi credentials, contact cards (vCard), calendar events, email addresses, phone numbers, and geo coordinates.
ZXing provides similar result parsers. However, these are utility classes within the project rather than a documented public API.
QuaggaJS returns only raw barcode strings. You'll need to implement your own parsing logic for structured data.
Performance
Scanning speed and accuracy can vary significantly based on device capabilities and scanning conditions. The chosen library, however, also has an impact.
ZXing provides reliable decoding on a broad range of platforms. However, performance varies noticeably by device. It can feel slower on lower-end hardware and struggles with poorly lit, very small, or damaged codes. Since you control the camera pipeline, however, you can optimize performance by configuring scan regions of interest (ROI) and tuning autofocus settings.
ML Kit generally outperforms ZXing in speed. However, you may get inconsistent results with dense formats like PDF417, as well as with EAN-13. As it uses a closed-source model, you can’t change the internals, but you can tune performance by only enabling the barcode formats you need and choosing recommended camera resolutions (e.g., 720p/1080p).
QuaggaJS performs well for 1D barcodes in the browser, but is heavily dependent on device power, camera quality, and scanning conditions. It struggles with low light, motion blur, angled barcodes, and damaged codes. Community feedback suggests it can be slower and less reliable than native alternatives.
Customizability
Customization can happen on two levels: the scanning logic under the hood, and the look and feel of the scanner UI.
ZXing is highly customizable since it only provides decoding logic. Since you have to implement your own camera pipeline and UI anyway, you have complete control over the interface, scan regions, and autofocus behavior. You can also modify the decoding pipeline, add barcode formats, or patch algorithms, though this requires forking the project.
ML Kit follows a plug-and-play approach with less flexibility. The machine learning model is proprietary and cannot be modified. Likewise, Google's ready-to-use scanner UI offers few configuration options. However, you can instead build a custom interface by feeding camera frames directly to the API.
QuaggaJS is written in plain JavaScript, making it easy to modify. It provides no built-in UI, so you control the video
and canvas
elements directly. The scanning pipeline can be configured (ROI, frequency, locator settings) or modified by editing the open-source code.
Support
ZXing is currently in maintenance mode. While it no longer receives major feature updates, it has a large and active user community on GitHub and Stack Overflow, where most common questions and issues are already addressed. However, there is no official support channel.
ML Kit, maintained by Google, continues to receive regular updates to ensure compatibility with the latest Android and iOS versions. Google provides documentation, guides, and codelabs. However, there is no formal support, so developers usually turn to community forums such as Stack Overflow.
QuaggaJS has a smaller community than ZXing or ML Kit. Developers can request help through GitHub issues and Stack Overflow. Response times vary, though, as the number of contributors is limited.
Commercial Solutions
In enterprise applications, the unreliable support for open-source solutions is a real risk. Commercial SDKs, in contrast, offer professional support and regular updates. Additionally, their performance is generally better across devices, and they offer more features for specific use cases.
In the following, we’ll take a look at the 3 most established barcode scanning software providers: Scandit, Scanbot SDK, and Dynamsoft.
Scandit delivers high-performance barcode scanning, optimized for retail and logistics environments. The company also offers ID scanning software.
Scanbot SDK is an all-in-one provider of data capture solutions. Its SDKs provide fast, reliable barcode scanning, document scanning, and data extraction from structured documents such as MRZs, credit cards, and checks.
Dynamsoft is focused on industrial applications. It provides robust scanning for desktop and server-side image processing, and places less emphasis on mobile environments.
Supported Frameworks
Commercial SDKs differ from free libraries in that they provide dedicated, optimized integrations for a range of platforms and frameworks. This removes the need for community-maintained ports or wrappers and ensures consistent performance across platforms.
Scandit, Scanbot SDK, and Dynamsoft all support the most common native and cross-platform environments.
Below is a breakdown:
Platform / Framework | Scandit | Scanbot SDK | Dynamsoft |
---|---|---|---|
NATIVE / SERVER-BASED | |||
Android | ✅ | ✅ | ✅ |
iOS | ✅ | ✅ | ✅ |
Web/JavaScript | ✅ | ✅ | ✅ |
Windows | ✅ | ✅ | ✅ |
macOS | ✅ | ✅ | ✅ |
Linux | ❌ | ✅ | ✅ |
CROSS-PLATFORM | |||
React Native | ✅ | ✅ | ✅ |
Flutter | ✅ | ✅ | ✅ |
.NET MAUI | ✅ | ✅ | ✅ |
Cordova | ✅ | ✅ | ✅ |
Xamarin | ✅ | ✅ | ✅ |
Capacitor | ✅ | ✅ | ❌ |
Compose Multiplatform | ❌ | ✅ | ❌ |
Titanium | ✅ | ❌ | ❌ |
Supported Barcode Types
All three SDKs cover all common 1D and 2D barcode symbologies, including the standard retail and logistics codes. Scandit and Dynamsoft also support certain niche types such as DotCode, while Scanbot SDK offers the broadest set of data parsers.
Symbology | Scandit | Scanbot SDK | Dynamsoft |
---|---|---|---|
1D CODES | |||
EAN-13 | ✅ | ✅ | ✅ |
EAN-8 | ✅ | ✅ | ✅ |
UPC-E | ✅ | ✅ | ✅ |
UPC-A | ✅ | ✅ | ✅ |
UPC/EAN Extension 2/5 | ✅ | ✅ | ❌ |
Code 128 | ✅ | ✅ | ✅ |
Code 39 | ✅ | ✅ | ✅ |
Code 93 | ✅ | ✅ | ✅ |
Code 32 | ✅ | ✅ | ✅ |
Codabar | ✅ | ✅ | ✅ |
ITF | ✅ | ✅ | ✅ |
MSI Plessey | ✅ | ✅ | ✅ |
4-State Customer Code | ✅ | ✅ | ✅ |
2D CODES | |||
QR Code | ✅ | ✅ | ✅ |
DataMatrix | ✅ | ✅ | ✅ |
PDF417 | ✅ | ✅ | ✅ |
MaxiCode | ✅ | ✅ | ✅ |
Aztec | ✅ | ✅ | ✅ |
GS1 DataBar (RSS-14) | ✅ | ✅ | ✅ |
GS1 DataBar Expanded (RSS-Expanded) | ✅ | ✅ | ✅ |
DotCode | ✅ | ❌ | ✅ |
DATA PARSERS | |||
GS1 | ✅ | ✅ | ✅ |
HIBC | ✅ | ✅ | ❌ |
Swiss QR | ✅ | ✅ | ❌ |
vCard | ❌ | ✅ | ❌ |
SEPA QR | ❌ | ✅ | ❌ |
VIN | ✅ | ✅ | ✅ |
AAMVA | ❌ | ✅ | ✅ |
AADHAAR | ❌ | ❌ | ✅ |
Performance and Features
All three SDKs are built for real-world conditions, reliably scanning barcodes that are blurry, low-contrast, poorly printed, scratched, dirty, or partially damaged. They also include speed and accuracy optimizations such as restricting active symbologies and limiting the scan region.
Additionally, these SDKs offer a number of convenience and usability features. These include advanced user guidance and AR overlays, as well as special modes for scanning multiple barcodes.
Notably, all three work offline, meaning a poor network connection is no problem. Scandit’s and Dynamsoft’s SDKs do, however, transfer some metadata to external servers.
Feature | Scandit | Scanbot SDK | Dynamsoft |
---|---|---|---|
Multi-barcode scanning | ✅ | ✅ | ✅ |
Scan from image | ✅ | ✅ | ✅ |
Scan from PDF | ❌ | ✅ | ✅ |
User guidance | ✅ | ✅ | ✅ |
AR overlay | ✅ | ✅ | ✅ |
Scan barcode and text together | ✅ | ❌ | ❌ |
Offline scanning | ✅ | ✅ | ✅ |
No data transmission to 3rd parties | ❌ | ✅ | ❌ |
Customizability
All three SDKs offer pre-built UIs with configurable scanning behavior (active symbologies, scan regions) and customizable on-screen elements.
Scandit provides multiple pre-built workflows, including SparkScan and MatrixScan, along with customizable UI components. You can adjust colors, text sizes, and UI element positioning. However, under the standard license, the software displays a Scandit watermark in the viewfinder.
Scanbot SDK offers Ready-to-Use (RTU) UI components, including specialized modes like Scan & Count and Find & Pick. Both the viewfinder and result screens are configurable through RTU UI. For advanced customization needs, Scanbot SDK also provides Classic UI options. Unlike with Scandit, there is no watermark in the scanner interface.
Dynamsoft includes a built-in camera view with support for overlays, bounding boxes, and torch controls. While customization options are more limited compared to Scandit and Scanbot SDK, this reflects Dynamsoft's primary focus on robust backend functionality.
Trial license
All three commercial SDKs provide trial licenses for testing integration and features. None of them require credit card details for this, though the exact terms vary.
Scandit and Dynamsoft both provide 30-day trial licenses, though you need to register with your email to receive your license key.
Scanbot SDK offers a 7-day trial without hassle. No email signup is required to request and receive your license key.
Support and updates
As paid SDKs, all three providers offer dedicated assistance for integration issues and bug fixes. Regular updates ensure compatibility with new OS versions and devices.
Scandit provides standard support through ticketing and email channels. Higher licensing tiers include access to 24/7 emergency lines, dedicated technical support, and assigned account managers.
Scanbot SDK offers developer support through Slack, Microsoft Teams, and email. Even during trial integration, you can reach out to the Customer Success and Engineering teams. All support is included in your license price.
Dynamsoft does offer support, though details aren’t as publicly documented. You’ll need to contact them directly for complete support information.
Pricing
Scandit uses a volume-based pricing model, typically tied to either the number of scans or that of active devices. This can be cost-effective for smaller projects, but the costs rise quickly in large deployments.
Scanbot SDK has a flat annual fee. Pricing depends on the number of apps or domains and on which modules you need (Barcode Scanner, Document Scanner, or Data Capture Modules).
Dynamsoft offers flexible licensing models that vary by product and use case. Quotes are provided on request, with higher costs for offline licensing compared to cloud-connected use.
Conclusion
Open-source libraries are a solid choice for simple use cases, but they require ongoing maintenance to keep up with new frameworks and devices.
For production scenarios that demand reliability, cross-platform support, professional assistance, and regular updates, commercial SDKs are the safer option. They deliver stability, faster troubleshooting, and long-term maintainability.
Top comments (4)
Solid overview of open-source vs commercial barcode scanners. The tables and performance notes make the trade-offs easy to grasp. Small nit: the GitHub contributions link seems off, and the Capacitor ML Kit link points to a NuGet package—might be a copy/paste issue. A quick decision flow or a couple of real-world benchmarks would be a nice addition.
Thanks for the feedback and recommendations! I've adjusted the links - indeed, a copy/paste mistake, thanks for pointing that out.
Please don’t share incorrect information. Let me help fix the comparison table. If you’d like to verify, you can try my sample code: github.com/yushulx/cmake-cpp-barco....
Hi @yushulx, thank you for noticing! I double-checked and updated the table, thanks!!