```html Full disclosure: We're the developer relations team at Iron Software, the company behind IronQR, one of the libraries in this comparison. That said, we believe honest evaluations serve everyone better than marketing spin. We'll show our methodology, acknowledge our biases, and let the code speak for itself. We ran each C# QR code library through identical evaluation criteria: simple QR generation, QR reading from images, customization depth, cross-platform support, and licensing cost. Below is the result, a comparison of 11 noteworthy QR code libraries in the .NET ecosystem, designed to help you pick the right one for your project on the first try. Here's what three lines of QR generation look like with in Visual Studio, one of the libraries we'll cover: IronQR using IronQr; using IronSoftware.Drawing; QrCode qr = QrWriter.Write("https://example.com"); AnyBitmap bitmap = qr.Save(); bitmap.SaveAs("myqr.png"); IronQR Example QR Code Output That simplicity is table stakes. The real question is what happens when you need to a damaged QR code from a warehouse scanner, embed a branded logo, target Linux containers, or process thousands of codes in a batch job. That's where libraries diverge, and where this comparison earns its keep. read The TL;DR: Master Comparison Table Before we go deep, here's the full picture. This table captures the dimensions that matter most when selecting a QR library for a .NET project. Library Generate Read Logo/Styling Micro QR Cross-Platform License NuGet Downloads IronQR ✅ ✅ ML-powered ✅ Full ✅ + RMQR ✅ Win/Mac/Linux/Mobile Commercial ($749+) ~56K QRCoder ✅ ❌ ✅ Moderate ✅ ⚠️ Partial (System.Drawing) MIT (Free) ~68M ZXing.Net ✅ ✅ ❌ Minimal ❌ ⚠️ Via bindings Apache 2.0 (Free) ~32M Net.Codecrete.QrCodeGenerator ✅ ❌ ❌ ❌ ✅ MIT (Free) ~4.1M SkiaSharp.QrCode ✅ ❌ ✅ Custom shapes ❌ ✅ MIT (Free) ~1.2M Aspose.BarCode ✅ ✅ ✅ ✅ ✅ Commercial ($999+) ~5.4M Syncfusion Barcode ✅ ❌ ✅ Moderate ❌ ✅ (UI control) Commercial (Free community) ~2M+ Spire.Barcode ✅ ✅ ✅ Logo embed ❌ ⚠️ (System.Drawing) Commercial ($599+) ~450K IronBarcode ✅ ✅ ✅ ✅ Micro QR ✅ Win/Mac/Linux Commercial ($749+) ~1.2M Dynamsoft Barcode Reader ❌ ✅ High-perf N/A ✅ ✅ Commercial ($1,249+/yr) ~250K BarcodeLib ✅ ❌ ❌ ❌ ⚠️ (System.Drawing) Apache 2.0 (Free) ~4.5M Table 1: Master comparison of 11 .NET QR code libraries across key selection criteria. Download counts are approximate as of early 2026. The rest of this article unpacks each row, with code, tradeoffs, and honest assessments. How Did We Evaluate These Libraries? We evaluated each library against seven criteria, weighted by how often they drive real-world selection decisions: — Can it create QR codes from strings, URLs, and structured data (vCards, Wi-Fi credentials)? QR Generation — Can it decode QR codes from images, scans, or PDFs? How does it handle damaged or rotated codes? QR Reading — Logo embedding, color control, module shape styling, error correction configuration Customization — Standard QR, Micro QR, RMQR (Rectangular Micro QR) QR Format Support — Does it run cleanly on Windows, Linux, macOS, and inside Docker containers without System.Drawing hacks? Cross-Platform — Open-source vs. commercial, per-developer pricing, suite discounts Licensing & Cost — API reference quality, tutorial availability, community size, active maintenance Documentation & Ecosystem All code examples target and use top-level statements. Where .NET 10 introduces relevant improvements, we note them. .NET 8 (LTS) Which QR Library Should You Choose? A Decision Framework Skip the 11 library profiles below if you already know your constraints. Here's the fast path: → or . Both are MIT-licensed. QRCoder has more renderers and payload helpers; Net.Codecrete is lighter and avoids System.Drawing entirely. "I need to generate QR codes for free with zero dependencies." QRCoder Net.Codecrete.QrCodeGenerator → (ML-powered reading, best accuracy on damaged codes), (free, battle-tested, broadest format support), or (enterprise suite, expensive). "I need to both generate AND read QR codes." IronQR ZXing.Net Aspose.BarCode → , , or . All three avoid the System.Drawing dependency that breaks cross-platform deployments. "I'm deploying to Linux/Docker and can't use System.Drawing." IronQR SkiaSharp.QrCode Net.Codecrete.QrCodeGenerator → leads in raw generation benchmarks. For reading performance, is purpose-built for high-throughput scanning. "Performance and memory footprint are critical." SkiaSharp.QrCode Dynamsoft Barcode Reader → Use what you have. Adding another vendor's QR library when your suite already includes one rarely makes sense from a licensing or maintenance perspective. "I already use an Aspose/Syncfusion/Iron Software suite." → has explicit MAUI and Blazor integration guides. Microsoft MVP Jeff Fritz using IronQR with Blazor, a real-world example of this exact pattern. "I'm building a Blazor/MAUI mobile app with QR scanning." IronQR built a QR-based digital business card app The 11 .NET QR Code Libraries Compared 1. IronQR — ML-Powered QR Reading and Generation with Cross Platform Support IronQR is Iron Software's dedicated QR code library, separate from their broader IronBarcode product. Its standout feature is a machine learning model ( -based) that detects and reads QR codes from imperfect images, rotated, partially obscured, or photographed at odd angles, often in just a few lines of code. ONNX It is also capable of creating QR code objects with ease, with support to style QR codes with images, add custom colors, and save your QR image to different output formats. Generation: using IronQr; using IronSoftware.Drawing; // Generate a styled QR code with logo var options = new QrOptions(QrErrorCorrectionLevel.High, 20); QrCode qr = QrWriter.Write("https://example.com", options); var style = new QrStyleOptions { Dimensions = 300, Margins = 10, Color = new Color("#2E75B6"), Logo = new QrLogo { Bitmap = AnyBitmap.FromFile("logo.png"), Width = 80, Height = 80 } }; AnyBitmap styledQr = qr.Save(style); styledQr.SaveAs("branded-qr.png"); IronQR Generated QR Output Reading: using IronQr; using IronSoftware.Drawing; var reader = new QrReader(); var input = new QrImageInput(AnyBitmap.FromFile("scanned-qr.jpg")); IEnumerable<QrResult> results = reader.Read(input); foreach (var result in results) Console.WriteLine($"Value: {result.Value}"); IronQR Read Output The ML model is what differentiates IronQR from every other library on this list. In our testing, it successfully decoded QR codes from conference badge photos and angled smartphone screenshots where ZXing.Net and basic image-processing readers returned nothing. The tradeoff is package size, the ONNX model adds weight. If you don't need reading, IronQR.Slim ships without the ML model and is significantly lighter. Strengths: ML-powered reading handles damaged, rotated, and partially obscured QR codes and prioritizes accuracy Supports QR Code, Micro QR, and RMQR (Rectangular Micro QR) formats Full styling API: colors, logos, rounded modules, margins Cross-platform: Windows, macOS, Linux, iOS, Android, Docker, Azure, AWS Async reading support (ReadAsync) for server workloads Save to multiple formats such as PNG image, JPG, multi page TIFF, and more User friendly API makes it easy to use Limitations: Commercial license required ($749+ per developer for deployment) Full package is heavier than open-source alternatives due to ML model is lower than mature open-source options, newer product (launched ~2023) NuGet download count Generation-only projects may not need the ML overhead Projects that need both generation and reading, especially where scan conditions are imperfect (mobile apps, warehouse scanning, conference/event scenarios). The demonstrates IronQR handling real-time QR generation with Blazor and custom branding. Best for: Jeff Fritz QR business card case study 2. — The Most Popular Open-Source QR Generator QRCoder The QRCoder library is the single most downloaded QR code package on NuGet, with . Originally created by Raffael Herrmann in 2013 and now , it's a pure C# implementation focused exclusively on QR code (not reading). over 68 million downloads maintained by Shane32 generation using QRCoder; // Generate a QR code and save as PNG bytes using var qrGenerator = new QRCodeGenerator(); using var qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H); using var pngQrCode = new PngByteQRCode(qrCodeData); byte[] qrCodeImage = pngQrCode.GetGraphic(20); File.WriteAllBytes("qrcoder-output.png", qrCodeImage); QRCoder Output Image QRCoder provides multiple renderers: PngByteQRCode (cross-platform, no System.Drawing dependency), QRCode (System.Drawing-based, Windows only), SvgQRCode, AsciiQRCode, and more. It also includes payload generators for structured data like Wi-Fi credentials, vCards, and bookmarks, which saves you from formatting those strings manually. Strengths: MIT license, completely free for commercial use 68M+ NuGet downloads, massive community adoption and proven stability Multiple renderer options including a PngByteQRCode that avoids System.Drawing Built-in payload generators (Wi-Fi, vCard, geolocation, calendar events) Micro QR code support Zero dependencies on .NET Standard targets Limitations: , cannot read or decode QR code image files Generation only Some renderers (like QRCode) depend on System.Drawing.Common, which is Windows-only since .NET 6 No logo embedding built-in (you'd composite the image yourself) No advanced styling (module shapes, gradients) Projects that only need QR generation, especially when budget is zero. If you need to generate Wi-Fi QR codes or vCards and don't need to read codes at all, QRCoder is the pragmatic default choice for most .NET developers. Best for: 3. — The Swiss Army Knife of Barcode Libraries ZXing.Net ("Zebra Crossing") is the of the original Java ZXing library. It's a general-purpose barcode library supporting over 15 formats, QR Code, Data Matrix, Aztec, PDF 417, UPC, EAN, Code 128, and more. QR support is a subset of its broader capabilities. ZXing.Net .NET port using ZXing; using ZXing.Common; using ZXing.QrCode; // Generate a QR code var writer = new BarcodeWriterPixelData { Format = BarcodeFormat.QR_CODE, Options = new QrCodeEncodingOptions { Height = 250, Width = 250, Margin = 1 } }; var pixelData = writer.Write("https://example.com"); // Reading a QR code requires a binding package (e.g., ZXing.Net.Bindings.SkiaSharp) ZXing.Net Output ZXing.Net requires platform-specific binding packages for rendering and reading. The core package provides encoding/decoding logic; you add ZXing.Net.Bindings.Windows.Compatibility, ZXing.Net.Bindings.SkiaSharp, or ZXing.Net.Bindings.ImageSharp depending on your target platform. This modular approach is flexible but adds integration complexity. Strengths: Apache 2.0 license, free for commercial use Both generation and reading in a single library Supports 15+ barcode formats beyond QR codes , battle-tested, extensive community knowledge 32M+ NuGet downloads Bindings available for SkiaSharp, ImageSharp, OpenCV, and more Limitations: QR-specific features are basic, no logo embedding, no advanced styling Reading accuracy on damaged/rotated QR codes is moderate compared to ML-powered solutions Binding packages add dependency management complexity API design shows its age, less fluent than modern .NET libraries Active maintenance pace has slowed (community-maintained) Projects that need both QR code and traditional barcode support (retail, logistics) and want a free, proven option. If your priority is QR-specific features like styling or ML-powered reading rather than broad barcode format coverage, a dedicated QR library will serve you better. Best for: 4. Net.Codecrete.QrCodeGenerator — Lightweight and Standards-Focused Net.Codecrete.QrCodeGenerator is a clean, minimal QR code generation library by Manuel Bleichenbacher. It's a , focused on correctness and standards compliance ( ). .NET translation of Project Nayuki's Java QR code generator ISO/IEC 18004 using Net.Codecrete.QrCodeGenerator; var qr = QrCode.EncodeText("https://example.com", QrCode.Ecc.Medium); string svg = qr.ToSvgString(4); File.WriteAllText("output.svg", svg); Example Ouptut with Net.Codecrete.QrCodeGenerator With , it's well-adopted for a focused library. Its standout quality is zero dependencies on System.Drawing — it generates SVG, XAML path data, PNG, and BMP natively. This makes it an excellent choice for cross-platform .NET projects and ASP.NET Core services running in Docker. ~4.1 million NuGet downloads Strengths: MIT license, completely free Zero System.Drawing dependency, truly cross-platform Small footprint, fast generation SVG and XAML output built-in (useful for WPF, WinUI, and web scenarios) Correct implementation of all 40 QR versions and all 4 error correction levels Extensive example projects (WinForms, WPF, ASP.NET Core, SkiaSharp, ImageSharp) Limitations: , no QR reading capability Generation only No logo embedding or advanced styling features Limited customization compared to QRCoder's payload generators Less community content and tutorials compared to QRCoder or ZXing.Net Developers who need a small, correct, cross-platform QR generator with SVG output and no System.Drawing baggage. If your deployment target is Linux or Docker and you only need generation, this library deserves serious consideration. Best for: 5. SkiaSharp.QrCode — High-Performance Cross-Platform Generation SkiaSharp.QrCode by is a performance-focused QR generation library built on SkiaSharp. It was created specifically to avoid System.Drawing's GDI+ limitations while delivering native-level performance through SkiaSharp's hardware acceleration. guitarrapc using SkiaSharp.QrCode.Image; // One-liner: generate and save QRCodeImageBuilder.SavePng("https://example.com", "qrcode.png"); // Or with custom settings var pngBytes = new QRCodeImageBuilder("https://example.com") .WithSize(512, 512) .WithErrorCorrection(ECCLevel.H) .ToByteArray(); SkiaSharp.QrCode One-Liner Output Benchmark results from the project's repository show SkiaSharp.QrCode outperforming QRCoder and other .NET QR libraries in both speed and memory allocation for generation tasks. It achieves zero-copy rendering directly to the SkiaSharp canvas, avoiding intermediate buffer allocations. Strengths: MIT license, free for commercial use Best-in-class generation performance (benchmarked) Minimal memory allocation, low GC pressure for high-throughput scenarios NativeAOT ready (.NET Native AOT compilation support) Custom module shapes (circles, rounded rectangles) for styled QR codes Works on Windows, Linux, macOS, iOS, Android, WebAssembly Limitations: , no QR reading Generation only Requires SkiaSharp native dependencies (platform-specific NuGet packages) Smaller community than QRCoder or ZXing.Net No payload generators (Wi-Fi, vCard), you format those strings yourself UTF-8 only, no ISO-8859-2 or Shift JIS encoding High-throughput server applications generating QR codes at scale (e.g., ticketing systems, bulk label generation) where performance and memory efficiency matter most. Also ideal if you're already using SkiaSharp in your project. Best for: 6. Aspose.BarCode — Enterprise-Grade Barcode Suite to Generate QR Codes is a comprehensive commercial library supporting over 80 barcode symbologies including QR Code, Micro QR, Data Matrix, PDF417, and all common 1D formats. It's part of the broader Aspose ecosystem used by enterprises for document processing. Aspose.BarCode for .NET using Aspose.BarCode.Generation; using Aspose.BarCode.BarCodeRecognition; // Generate var generator = new BarcodeGenerator(EncodeTypes.QR, "https://example.com"); generator.Parameters.Barcode.XDimension.Pixels = 4; generator.Save("aspose-qr.png", BarCodeImageFormat.Png); // Read using var reader = new BarCodeReader("aspose-qr.png", DecodeType.QR); foreach (var result in reader.ReadBarCodes()) Console.WriteLine($"Type: {result.CodeTypeName}, Text: {result.CodeText}"); Aspose.BarCode QR Output Aspose.BarCode Read Output Aspose.BarCode provides QualitySettings presets that balance recognition speed against tolerance for damaged codes, from HighPerformance (fast, clean images) to HighQuality (slower, handles noise and distortion). Strengths: Both generation and reading with sophisticated quality tuning 80+ barcode format support, the broadest on this list Advanced reading handles noisy scans, low-contrast, skewed, and damaged codes Rich customization: colors, borders, bar height, rotation, text positioning Cross-platform: .NET Framework, .NET Core, .NET 5+, Xamarin Comprehensive documentation and API reference Limitations: , perpetual licenses start at $999 for a single developer Expensive Large package size reflecting the breadth of format support Overkill if you only need QR codes, you're paying for 80+ formats you won't use API design is verbose compared to purpose-built QR libraries Walled-garden ecosystem, integrates best with other Aspose products Enterprises already invested in the Aspose ecosystem, or projects requiring support for many barcode formats beyond QR. For QR-only projects, the price-to-value ratio is hard to justify. Best for: 7. Syncfusion Barcode — UI Control with QR Capabilities Syncfusion's Barcode component is a UI control available across their ASP.NET Core, Blazor, WPF, WinForms, and Xamarin platforms. Unlike standalone libraries, it's designed to render barcodes and QR codes directly within Syncfusion's UI framework. Syncfusion provides a that's free for individual developers and small businesses (revenue under $1M, up to 5 developers). This makes it uniquely accessible among commercial options. Community License Strengths: Free Community License for qualifying individuals and small businesses Integrated UI control for Blazor, WPF, WinForms, Xamarin, and MAUI Supports QR Code, Data Matrix, Code 39, Code 128, EAN, UPC, and more Full color and dimension customization Part of a massive UI component suite (1,800+ controls) Limitations: , no reading/scanning capability Generation only Tightly coupled to Syncfusion's UI framework, not a standalone library you call from a service layer Commercial license required beyond Community License thresholds Overkill if you only need a QR code generator and not a full UI suite Less flexible than code