IRONSOFTWAREHOME
COMPARE TO OTHER COMPONENTS

Neodynamic Barcode vs IronBarcode: Split SDK Architecture and Format Support Compared

Curtis Chau
Curtis Chau
Updated: August 1, 2026

Neodynamic's Barcode Reader SDK cannot read QR codes. You can purchase both Neodynamic SDKs and still find yourself unable to read the same QR codes that the companion generator produces. That single contradiction - a generator that supports QR Code, DataMatrix, PDF417, and Aztec paired with a reader that supports none of those formats - defines the practical experience of working with Neodynamic's barcode tooling and frames the comparison with IronBarcode that follows.

Understanding Neodynamic Barcode

Neodynamic offers barcode functionality through two entirely separate commercial products: Barcode Professional SDK for barcode generation and Barcode Reader SDK for barcode reading. Each product is distributed as its own NuGet package, requires its own purchase, and carries its own license key. A project that needs both generation and reading must integrate both packages independently, maintain both through separate update cycles, and configure both at application startup.

Barcode Professional SDK is the generation component. It supports a wide range of symbologies including linear formats (Code 128, Code 39, EAN-13, UPC-A, Codabar, ITF) and 2D formats (QR Code, DataMatrix, PDF417, Aztec). The SDK uses an instance-based API: a BarcodeProfessional object is constructed, its Code and Symbology properties are assigned, and GetBarcodeImage() is called to produce a System.Drawing.Image that is saved via the standard System.Drawing.Imaging pipeline. The .NET Framework edition carries a dependency on System.Drawing; a separate .NET Standard edition is distributed via ComponentSource.

Barcode Reader SDK is the reading component. It accepts a System.Drawing.Bitmap and returns results for 1D symbologies only. QR Code, DataMatrix, PDF417, Aztec, and all other 2D formats are not supported by the reader. When a 2D barcode is submitted, the SDK returns no results - it does not throw an exception, it simply produces an empty result set. The Barcode Reader SDK was marked end-of-service-life on 31 December 2019, and its NuGet package (Neodynamic.SDK.BarcodeReader 1.0.2000) has not been updated since July 2012, with .NET Framework 2.0/3.x/4.x as its only targets. Recovering 2D reading capability therefore requires adding a third library outside the Neodynamic ecosystem.

Key architectural characteristics of Neodynamic Barcode:

  • Separate products for generation and reading: Two NuGet packages, two purchases, and two license keys are required for a project that uses both capabilities.
  • 2D generation without 2D reading: Barcode Professional SDK generates QR Code, DataMatrix, PDF417, and Aztec, but the companion Barcode Reader SDK cannot read any of those formats.
  • Instance-based generation API: Generation requires constructing a BarcodeProfessional object and assigning properties before calling GetBarcodeImage().
  • System.Drawing dependency in most editions: The Barcode Professional .NET Windows edition and the Barcode Reader SDK depend on System.Drawing, which limits Linux and container deployment for those editions. The Barcode Professional .NET Standard edition uses SkiaSharp and avoids that dependency.
  • 1D-only reading scope: The Barcode Reader SDK supports Code 128, EAN-13, UPC-A, Code 39, Codabar, Interleaved 2 of 5, and MSI/Plessey. No 2D format is included.
  • No native PDF support: Neither SDK reads barcodes directly from PDF documents; a separate image extraction step is required.
  • No automatic format detection: The reader infers the format from what it supports rather than from the image content.

The Split SDK Architecture

A project that purchases both Neodynamic SDKs must configure two separate license blocks at startup. The dual LicenseOwner and LicenseKey assignments use different namespaces and different class names, and neither block is aware of the other:

// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.LicenseKey = "GEN-KEY";

// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";

This pattern repeats across every environment - development, staging, and production - and must be maintained whenever either product is upgraded or renewed.

Understanding IronBarcode

IronBarcode is a commercial .NET barcode library developed by Iron Software that provides barcode generation and reading through a single NuGet package under a single license. The library uses a static API model: generation is performed through BarcodeWriter.CreateBarcode() and reading through BarcodeReader.Read(). Both methods operate across all supported symbologies without requiring format-specific code paths.

IronBarcode is built without a dependency on System.Drawing, which makes it deployable on Linux, macOS, and in Docker containers without platform-specific configuration. The library reads barcodes from image files, image streams, and PDF documents natively, without requiring a separate image extraction step for PDF sources.

Key characteristics of IronBarcode:

  • Single package for generation and reading: One NuGet package, one license key, and one configuration block covers all barcode operations.
  • Unified 1D and 2D support: The same API reads and generates 50+ symbologies including Code 128, EAN-13, QR Code, DataMatrix, PDF417, and Aztec.
  • Static fluent API: BarcodeWriter.CreateBarcode() returns a chainable result; BarcodeReader.Read() accepts file paths, streams, and PDF documents.
  • Automatic format detection: The reader identifies the symbology from image content without requiring the caller to specify the expected format.
  • No System.Drawing dependency: Cross-platform deployment on Linux and in containers works without additional native library configuration.
  • Native PDF reading: Barcodes embedded in PDF documents are read directly, returning page number metadata alongside barcode values.
  • Async and batch processing: BarcodeReader.ReadAsync() and multi-page batch operations support high-throughput server workloads.

Feature Comparison

The following table summarises the highest-level differences between the Neodynamic products and IronBarcode:

FeatureNeodynamic Barcode ProfessionalNeodynamic Barcode ReaderIronBarcode
Barcode generationYesNoYes
1D barcode readingNoYesYes
2D barcode readingNoNoYes
Products required1 (generation only)1 (reading only)1 (both)
License keys required1 per product purchased1 per product purchased1 total
Native PDF barcode readingNoNoYes
System.Drawing dependencyEdition-specificYesNo

Detailed Feature Comparison

FeatureNeodynamic Barcode ProfessionalNeodynamic Barcode ReaderIronBarcode
Generation
Code 128 generationYesN/AYes
EAN-13 / UPC-A generationYesN/AYes
Code 39 generationYesN/AYes
QR Code generationYesN/AYes
DataMatrix generationYesN/AYes
PDF417 generationYesN/AYes
Aztec generationYesN/AYes
Reading
Code 128 readingN/AYesYes
EAN-13 / UPC-A readingN/AYesYes
Code 39 readingN/AYesYes
Codabar readingN/AYesYes
QR Code readingN/ANoYes
DataMatrix readingN/ANoYes
PDF417 readingN/ANoYes
Aztec readingN/ANoYes
Automatic format detectionN/ANoYes
Input Sources
Image file inputYesYesYes
PDF document inputNoNoYes
Stream inputYesYesYes
Platform and Licensing
System.Drawing dependencyEdition-specificYesNo
Linux / Docker supportYes (.NET Standard edition)NoYes
.NET Standard 2.0Yes (.NET Standard edition)NoYes
.NET 8 / .NET 9Yes (.NET Standard edition)NoYes
NuGet packages required1 per product1 per product1 total
License keys required1 per product1 per product1 total

Reading Format Support

The reading format boundary between the two Neodynamic SDKs and IronBarcode is the most significant technical difference in this comparison.

Neodynamic Barcode Reader Approach

Neodynamic Barcode Reader supports linear barcodes only. When a 2D barcode is submitted to the reader, the SDK returns an empty or null result set. No exception is raised, and no error message indicates what happened. Teams working with this SDK typically discover the limitation after deploying code that calls the reader against QR code images and observing that the results collection is always empty.

A common defensive pattern in codebases that use Neodynamic Reader is an explicit check that raises an exception when a 2D format is expected:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results will be null or empty — QR codes are not recognised by this SDK
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}

This method cannot be completed with the Neodynamic Reader SDK alone. The NotSupportedException is not a workaround - it reflects the reader's actual capability boundary for 2D input.

IronBarcode Approach

IronBarcode reads all supported symbologies through the same BarcodeReader.Read() call. The format is detected automatically from the image content. A QR code, a Code 128, and a DataMatrix barcode all use identical calling code:

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    // QR codes, DataMatrix, PDF417 — all handled automatically
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}

The caller does not specify an expected format. IronBarcode identifies the symbology and returns the value. For full details on image reading options including multi-barcode detection and image preprocessing, see the reading barcodes from images guide.

Barcode Generation

Both Neodynamic Barcode Professional and IronBarcode are capable of generating 1D and 2D barcodes. The difference lies in API style and dependency footprint rather than output capability.

Neodynamic Barcode Professional Approach

Neodynamic's generation API is instance-based. A BarcodeProfessional object is constructed, its properties are assigned individually, and GetBarcodeImage() is called to return a System.Drawing.Image. The image is then saved using the System.Drawing.Imaging.ImageFormat enumeration:

using Neodynamic.SDK.Barcode;

// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";

// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;

// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);

The SDK offers legitimate customisation options including DPI control, text alignment, colour settings, and quiet zone sizing. These are useful for print workflows where precise physical dimensions matter. The generation capability itself is complete; the limitations that prompt migration are on the reading side, not the generation side.

IronBarcode Approach

IronBarcode uses a fluent static approach. The encoding and data are passed as parameters to BarcodeWriter.CreateBarcode(), and the output format is expressed as a method name on the returned object. No System.Drawing import is required:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("output.png");

For 2D barcode generation, the dedicated QRCodeWriter class provides additional options specific to QR codes:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qrcode.png");

For guidance on generating 1D symbologies with sizing and annotation options, see the creating 1D barcodes guide. For 2D barcode creation including DataMatrix and PDF417, see the creating 2D barcodes guide.

Licensing and Product Structure

The licensing model represents one of the most practical differences between the two options for teams building systems that require both generation and reading.

Neodynamic Approach

Neodynamic's barcode capability is split across two separately licensed products. Barcode Professional SDK covers generation and Barcode Reader SDK covers reading. Each product requires a separate purchase and carries a separate license key. A team that purchases both products must maintain two LicenseOwner / LicenseKey configuration blocks, track two separate renewal dates, and deal with two separate support channels when issues arise.

Barcode Professional SDK is priced from approximately $352 for a single developer license at the Basic edition and from approximately $705 at the Ultimate edition (developer licenses via ComponentSource). Barcode Reader SDK carries a separate cost and is supplied under legacy pricing - the product was marked end-of-service-life on 31 December 2019. A project that requires 2D reading cannot meet that requirement with Neodynamic products at any price; a third library must be added. See the IronBarcode supported barcode formats page for a complete list of what a single unified license covers.

IronBarcode Approach

IronBarcode is sold as a single product that covers all barcode operations - generation and reading across all supported symbologies - under one license key. There is no separate reader license, no separate generator license, and no additional cost for 2D format support. The license key is set once at application startup and requires no further configuration:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

IronBarcode Lite is priced at $999 for a single developer and covers the full capability set. For current pricing tiers and volume options, see the IronBarcode licensing page.

API Mapping Reference

Neodynamic APIIronBarcode EquivalentNotes
BarcodeProfessional.LicenseOwner = "..."IronBarCode.License.LicenseKey = "key"Single key replaces owner + key pair
BarcodeProfessional.LicenseKey = "..."(part of single key above)No separate owner field
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner(removed)Not required
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey(removed)Not required
new BarcodeProfessional()BarcodeWriter.CreateBarcode(data, encoding)Static method, no instance
barcode.Code = dataFirst parameter of CreateBarcodePassed at construction
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128Second parameter
barcode.Symbology = Symbology.QRCodeBarcodeEncoding.QRCodeFull round-trip supported
barcode.GetBarcodeImage().Save(path, ImageFormat.Png).SaveAsPng(path)Fluent, no ImageFormat enum
new BarcodeReader().Read(bitmap)BarcodeReader.Read(imagePath)Static method, accepts file path
result.Valueresult.ValueSame property name
throw new NotSupportedException(...) for QRBarcodeReader.Read(imagePath)Replace with standard read call

When Teams Consider Moving from Neodynamic Barcode to IronBarcode

QR Code Reading Requirements

The most common scenario that leads teams from Neodynamic to IronBarcode is the discovery that QR codes generated by Barcode Professional SDK cannot be read back by Barcode Reader SDK. Teams building product labelling systems, inventory management tools, or document tracking workflows often implement generation and reading as separate phases of a larger system. When generation is built first using Barcode Professional, the reader limitation only becomes apparent when the reading component is attempted. At that point, the project has already committed to Neodynamic for generation, and adding a third library to cover 2D reading introduces version management complexity that would not exist with a unified SDK.

Reducing Product Complexity

Some teams migrate not because of a specific format gap but because the overhead of maintaining two separate products for what is conceptually a single capability becomes a recurring friction point. Two packages in the .csproj file, two license renewal cycles, two sets of release notes to review, and two potential sources of incompatibility when .NET or Windows updates are applied - none of that overhead delivers functionality beyond what a single unified package would provide. Teams doing a dependency audit as part of a .NET upgrade often identify the Neodynamic dual-package arrangement as a simplification opportunity.

PDF Barcode Processing

Applications that process PDF documents containing barcodes represent a scenario where both Neodynamic SDKs fall short simultaneously. Neither the generation SDK nor the reader SDK can open a PDF file and extract barcode values from its pages. Teams working with shipping manifests, invoice documents, medical records, or any document workflow where barcodes are embedded in PDFs must implement an intermediate image extraction step before any reading can occur. That extraction step requires an additional library, which means the project already carries a third dependency to work around a limitation that a single IronBarcode installation would eliminate.

Format Consistency Across Read and Write

Teams that operate barcode workflows at scale sometimes find that inconsistencies in format support between generation and reading create testing and validation problems. When a system generates QR codes for one purpose and reads different format types for another, the divergence between what the generator supports and what the reader supports creates gaps in round-trip testing. A system where generation and reading share the same library and the same supported format list is simpler to validate. The verification that a generated barcode can be read back successfully becomes a single-library operation rather than a multi-library integration test.

Common Migration Considerations

Dual Package Removal

Migrating from Neodynamic requires removing both NuGet packages: Neodynamic.SDK.Barcode and Neodynamic.SDK.BarcodeReader. Both must be removed from the .csproj file and both corresponding using directives must be removed from source files. Running dotnet remove package for each is sufficient; there are no shared dependencies between the two that would require additional cleanup.

Dual License Configuration Cleanup

The two license configuration blocks - one for BarcodeProfessional and one for Neodynamic.SDK.BarcodeReader.BarcodeReader - are both replaced by a single IronBarCode.License.LicenseKey assignment. This assignment is made once at application startup, typically in Program.cs or the application's dependency injection bootstrap. Any configuration files or environment variables that store Neodynamic license keys can be decommissioned after the migration is verified.

NotSupportedException Removal

Codebases that encountered the 2D reading limitation during development often contain placeholder methods that throw NotSupportedException for QR code or DataMatrix reading. These methods are not workarounds - they are honest acknowledgements that the capability did not exist. After migrating to IronBarcode, each such method body is replaced with a standard BarcodeReader.Read(imagePath) call. No special handling is needed; the format is detected automatically.

Additional IronBarcode Capabilities

Beyond the core comparison points, IronBarcode provides capabilities that are not available in either Neodynamic product:

  • Native PDF barcode reading: BarcodeReader.Read("document.pdf") reads barcodes directly from PDF documents, returning page number information alongside barcode values, with no intermediate image extraction required.
  • Async batch processing: BarcodeReader.ReadAsync() supports non-blocking reads suitable for server-side workloads processing high volumes of images or documents concurrently.
  • Machine learning error correction: IronBarcode applies ML-based error correction to recover values from damaged, partially obscured, or low-resolution barcode images that would return empty results from standard decoders.
  • Multi-barcode detection: A single BarcodeReader.Read() call returns all barcodes present in an image, including mixed-format images containing both 1D and 2D symbologies simultaneously.
  • Barcode stamping into PDFs: IronBarcode can write barcode images directly into existing PDF documents without requiring a separate PDF library.
  • Image preprocessing options: Brightness correction, rotation handling, and noise reduction can be configured on the reader to improve recognition rates on images captured under difficult conditions.

.NET Compatibility and Future Readiness

IronBarcode supports .NET Standard 2.0, .NET Framework 4.6.2 and above, .NET Core 3.1, and all current .NET releases including .NET 8 and .NET 9. The library does not depend on System.Drawing, which means it runs without modification on Linux and in Docker containers. Neodynamic Barcode Reader SDK targets only .NET Framework 2.0/3.x/4.x - its NuGet package has not been updated since July 2012, and the product was marked end-of-service-life on 31 December 2019, so it does not support .NET Core, .NET 5+, Linux, or Docker. The Barcode Professional SDK ships in multiple editions; the .NET Standard edition uses SkiaSharp and runs on .NET Core / .NET 5+, while the .NET Windows edition retains the System.Drawing dependency. IronBarcode receives updates aligned with the .NET release cadence.

Conclusion

Neodynamic Barcode Professional SDK and Neodynamic Barcode Reader SDK together represent a split product model in which generation and reading are separate commercial offerings with separate capability boundaries. The generator supports QR Code, DataMatrix, PDF417, and Aztec. The reader does not. That asymmetry is not a minor omission - it means the two products cannot form a complete barcode workflow for any application that requires 2D barcode reading, and it means the formats most widely used in mobile payments, pharmaceutical tracking, shipping logistics, and document processing are absent from the reader's capability set.

Neodynamic Barcode Professional is a legitimate choice when the requirement is generation only. The SDK produces high-quality output across a wide range of symbologies, supports DPI control and print-specific customisation, and integrates with the broader Neodynamic ThermalLabel ecosystem. Teams with Windows-only deployments that need only 1D reading can also use the Barcode Reader SDK without encountering its format limitations. Within that narrow operational scope - generation only, or 1D-only reading on Windows - Neodynamic's products deliver what they describe.

IronBarcode is the appropriate choice when a project needs both generation and reading, when any part of the workflow involves 2D formats, when PDF documents are a source of barcode input, or when a single-package architecture is preferred for dependency management. The unified license model, the absence of a System.Drawing dependency, and the automatic format detection across all supported symbologies make it suitable for cross-platform applications, cloud deployments, and systems that process a mix of barcode formats from diverse sources.

The choice between the two ultimately reduces to the question of whether the format boundary in Neodynamic's reader affects the project in question. For teams whose workflows are limited to 1D barcode generation and reading on Windows, that boundary may never be encountered. For teams that need QR codes on both the generation and reading sides of the same system, the boundary is insurmountable within the Neodynamic product family, and a different library is required regardless of which one is chosen.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required