IronBarcode Architecture (2025.2+)
As of version 2025.2, the IronBarcode package is split into separate managed, native, and machine learning layers. The structure mirrors the naming conventions already used by IronOCR and IronPDF, which gives cleaner cross-platform support and easier maintenance.
Package Structure
Main Distribution
The top-level NuGet packages map to a target platform:
BarCode: the default package for Windows, and the primary NuGet for general-purpose use.BarCode.Linux,BarCode.MacOS, and similar: OS-specific distributions that follow the same naming convention as IronOCR and IronPDF.
Internal Package Layers
Each top-level package is assembled from several internal subpackages, each owning one concern.
1. BarCode.Slim
Holds the managed core: the C# code, the interop layer, all PDF-related code, and every C# third-party dependency. This is the central logic and binding layer that drives IronBarcode's managed features.
2. IronSoftware.ReaderInternals.XXX
Contains the native C++ code for reading, writing, and detecting barcodes. Platform-specific variants exist for Windows, Linux, Mac, and others.
3. BarCode.Detection
Carries the machine learning detection logic, currently written in C# on top of ONNX Runtime. It does not depend on the OS at this stage.
BarCode.Detection will eventually move to ncnn, a native C++ ML inference library, which will then introduce OS-specific variants.Mobile Platform Exclusions
BarCode.Detection is not bundled into Barcode.iOS or Barcode.Android. The omission is deliberate: ML detection raises performance concerns and compatibility limitations on mobile platforms.
Benefits
The restructured architecture delivers:
- A modular separation between managed and native code.
- Clean, OS-targeted packaging.
- Future-proofing for high-performance native ML detection.
- Closer alignment with the other Iron Software libraries.
- Easier maintenance and troubleshooting.

