{"id":17624577,"url":"https://github.com/jakeyallop/quarer","last_synced_at":"2026-01-28T18:32:04.147Z","repository":{"id":259112413,"uuid":"786556027","full_name":"JakeYallop/Quarer","owner":"JakeYallop","description":"A fast and simple QR code encoding library, employing vectorization. See the benchmarks!","archived":false,"fork":false,"pushed_at":"2024-11-03T17:47:25.000Z","size":512,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T01:14:01.545Z","etag":null,"topics":["c-sharp","csharp","finite-fields","galois-field","nuget-package","qrcode","qrcode-generator","vectorization"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JakeYallop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-14T20:15:15.000Z","updated_at":"2024-11-06T22:23:53.000Z","dependencies_parsed_at":"2024-10-25T20:55:55.962Z","dependency_job_id":"30034eb9-aaaa-4ae4-86e0-c15b9974c719","html_url":"https://github.com/JakeYallop/Quarer","commit_stats":null,"previous_names":["jakeyallop/quarer"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakeYallop%2FQuarer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakeYallop%2FQuarer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakeYallop%2FQuarer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakeYallop%2FQuarer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JakeYallop","download_url":"https://codeload.github.com/JakeYallop/Quarer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248804826,"owners_count":21164135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-sharp","csharp","finite-fields","galois-field","nuget-package","qrcode","qrcode-generator","vectorization"],"created_at":"2024-10-22T22:04:38.452Z","updated_at":"2026-01-28T18:32:04.141Z","avatar_url":"https://github.com/JakeYallop.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"Quarer\n=========\n\n![NuGet Version](https://img.shields.io/nuget/v/Quarer)\n![GitHub License](https://img.shields.io/github/license/JakeYallop/Quarer)\n\n\u003c!-- TODO: Add codecoverage (coveralls), codacy? badges here --\u003e\n\nA fast and simple-to-use QR code encoding library.\n\n\nBy vectorizing many parts of the QR Code creation process, Quarer manages to be much faster than many other libraries. Quarer supports ECI mode encoding as well as Kanji.\n\n![benchmark graph](https://raw.githubusercontent.com/JakeYallop/Quarer/refs/heads/main/assets/timing-focused-1.png)\n\nSee the [full results](./benchmarks). Want to add get your library added to the benchmarks? Open an [issue](https://github.com/JakeYallop/Quarer/issues/new)!\n\n## Installation\n```bash\ndotnet add package Quarer\n```\n\n## Usage\n\nCreate a QR Code\n```csharp\nusing Quarer;\n\nvar qrCode = QrCode.Create(\"Hello, World!\");\n\nConsole.WriteLine(qrCode.Version);\nConsole.WriteLine(qrCode.Width);\nConsole.WriteLine(qrCode.ErrorCorrectionLevel);\n```\n\nOutput the QR code using a tool of your choice. The example below outputs directly to the console:\n```csharp\nConsole.WriteLine(\"Encoding \\\"Hello, World!\\\"\");\n\nvar qrCode = QrCode.Create(\"Hello, World\");\n\nvar sb = new StringBuilder();\n\nOutputYPadding(sb, qrCode.Width);\nfor (var y = 0; y \u003c qrCode.Height; y++)\n{\n    for (var x = -4; x \u003c qrCode.Width + 4; x++)\n    {\n        if (x \u003c 0 || x \u003e= qrCode.Width)\n        {\n            sb.Append(\"██\");\n            continue;\n        }\n\n        var v = qrCode.Data[x, y] != 0;\n        var s = v ? \"  \" : \"██\";\n        sb.Append(s);\n    }\n    sb.AppendLine();\n}\nOutputYPadding(sb, qrCode.Width);\n\nConsole.WriteLine(sb.ToString());\n\nstatic void OutputYPadding(StringBuilder sb, int width)\n{\n    for (var y = 0; y \u003c 4; y++)\n    {\n        for (var x = 0; x \u003c width + 8; x++)\n        {\n            sb.Append('█');\n            sb.Append('█');\n        }\n        sb.AppendLine();\n    }\n}\n```\n![QR code output in the console](https://raw.githubusercontent.com/JakeYallop/Quarer/refs/heads/main/assets/qrcode%20output.png)\n\nSee more [samples](./samples).\n\n## Features\n\n### Automatic Latin1 detection\n\nByte-mode encoding for a QR Code defaults to Latin1. Quarer detects when it could be beneficial to transcode a string to Latin1, otherwise, Quarer defaults to UTF-8. Latin1 is a more compact encoding than UTF-8 for some characters. In addition, Quarer can also skip emitting the ECI indicator for such a case.\n\n```csharp\nvar s = \"Ã\";\nConsole.WriteLine(Encoding.UTF8.GetBytes(s).Length); // 2\nConsole.WriteLine(Encoding.Latin1.GetBytes(s).Length); // 1\n```\n\n### Encode at a specific error correction level\n```csharp\nvar qrCodeEncodingOptions = new QrCodeEncodingOptions\n{\n    ErrorCorrectionLevel = ErrorCorrectionLevel.H\n};\nvar qrCode = QrCode.Create(\"Hello, World!\", qrCodeEncodingOptions);\n```\n\n### Encode using a specific version\n```csharp\nvar qrCodeEncodingOptions = new QrCodeEncodingOptions\n{\n    Version = QrVersion.GetVersion(5)\n    ErrorCorrectionLevel = ErrorCorrectionLevel.M\n};\nvar qrCode = QrCode.Create(\"Hello, World!\", qrCodeEncodingOptions);\n```\n\n### Encode binary data\n```csharp\nvar qrCode = QrCode.Create([0xFE, 0xED, 0xCA, 0xFE]);\n```\n\n### ECI support\n```csharp\n// 26 is the ECI code for UTF-8\nvar eciCode = new EciCode(26);\nvar data = Encoding.UTF8.GetBytes(\"Hello, World!\");\nvar qrCodeEncodingOptions = new QrCodeEncodingOptions\n{\n    ErrorCorrectionLevel = ErrorCorrectionLevel.M\n    EciCode = eciCode\n};\nvar qrCode = QrCode.Create(data, qrCodeEncodingOptions);\n```\n\n## Advanced Usage\n\nThe entire toolset used to encode a QR Code is exposed publicly. This allows for more advanced use cases, for example, choosing a specific mask level or inspecting parts of the QR Code creation process.\n\nFor example, encoding a QR code using a specific mask pattern:\n```csharp\nusing System.Text;\nusing Quarer;\n\nvar str = \"ABC123\";\nvar data = Encoding.Latin1.GetBytes(str);\nvar errorCorrectionLevel = ErrorCorrectionLevel.M;\nvar eciCode = EciCode.Empty;\nvar analysisResult = QrDataEncoder.AnalyzeSimple(, errorCorrectionLevel, eciCode);\nif (!analysisResult.Success)\n{\n    throw new InvalidOperationException(\"Data too large to fit into QR code.\");\n}\n\nvar maskPattern = MaskPattern.PatternThree_DiagonalLines;\nvar qrCodeEncodingInfo = analysisResult.Value;\nvar dataCodewords = QrDataEncoder.EncodeDataBits(qrCodeEncodingInfo, data);\nvar withErrorCodewords = QrDataEncoder.EncodeAndInterleaveErrorCorrectionBlocks(dataCodewords, qrCodeEncodingInfo.Version, qrCodeEncodingInfo.ErrorCorrectionLevel);\n// passing in a specific mask pattern here skips all the mask pattern analysis logic\nvar (matrix, _) = QrSymbolBuilder.BuildSymbol(withErrorCodewords, qrCodeEncodingInfo.Version, qrCodeEncodingInfo.ErrorCorrectionLevel, maskPattern);\n// matrix contains the complete QR code.\n```\n\n## Roadmap\n- Micro QR Codes\n- rMQR Codes\n- QR code Decoding\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakeyallop%2Fquarer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjakeyallop%2Fquarer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakeyallop%2Fquarer/lists"}