{"_id":"qr","_rev":"43-f72a95d8a318b4f82b6842130eb78684","name":"qr","dist-tags":{"latest":"0.7.2"},"versions":{"0.1.0":{"name":"qr","version":"0.1.0","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"_id":"qr@0.1.0","dist":{"shasum":"e665b8e58d6d6887ed5ace0f506f5acefb90a622","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.0.tgz","integrity":"sha512-kvBEXlVpYszkjz2pilYis//hU8BuHqFCRpWuz/FeJZ3KE11k2iTWIMcVAfH+pUsn8CwelrVBMxLCSlzdwGhz1Q==","signatures":[{"sig":"MEYCIQClkyNkmEH/bTYXDs/PZOzv81CTPAatzvy97P8ohr57JQIhANn75n6PV9RW9xORL0aHelN9H+1StWb5zsvFRzV5I+Ol","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","files":[""],"engines":{"node":">= 0.4.0"},"descrption":"A small library to generate QR codes with libqrencode.","repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"0.3.7","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.1","dependencies":{"vows":">= 0.5.8"},"_defaultsLoaded":true,"_engineSupported":true},"0.1.1":{"name":"qr","version":"0.1.1","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"_id":"qr@0.1.1","dist":{"shasum":"5b96a62e8566cd5c4cd29dbe8ecbdd33c216ee48","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.1.tgz","integrity":"sha512-y+m5yHYisvDyPR/LWhi1DfmI8uwDk9SjEK8z2uoGc+xXZN/IUim1b7qyIMQk8j0rRDIpBxn9R2XVz/wEcidNmQ==","signatures":[{"sig":"MEUCIEFOl4pCoFk5CBCSmd6MpM9Po4eLGjJpvWfHggHpUx27AiEAo+maH0YJwnTQjcy7Ub0IHWcXZVdBTSw3sIQk1Q1bviY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","files":[""],"engines":{"node":">= 0.4.0"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"0.3.7","description":"A small library to generate QR codes with libqrencode.","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.1","dependencies":{"vows":">= 0.5.8"},"_defaultsLoaded":true,"_engineSupported":true},"0.1.2":{"name":"qr","version":"0.1.2","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.1.2","homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"836b2f1ac5c0fba70295bc0f5135922e1a6f3ecc","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.2.tgz","integrity":"sha512-C2HXmBFhSW4sUUjyRYrZCoTmw15Ec1wzJCFi+wrSLX3VQwrgjXh1OJgX1Dhnoy0zX4Wf4jyynsotM4CPHYLR/g==","signatures":[{"sig":"MEQCIBRf1w3aYBAX0yoH9ves5gnTVdL3Y177LvATXHYGYDDDAiBFe+QF+gXKw7I63U4PqqnYTlTwVbD4GL8L13ouWoNwOw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","files":[""],"engines":{"node":">= 0.4.0"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"0.3.7","description":"A small library to generate QR codes with libqrencode.","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.1","dependencies":{"vows":">= 0.5.8"},"_defaultsLoaded":true,"_engineSupported":true},"0.1.3":{"name":"qr","version":"0.1.3","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.1.3","homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"7e0ad3938c34aa622c86987b701d96e336791ad3","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.3.tgz","integrity":"sha512-7/ruDPlcBtzYRHFqQ4afP+0bFtg99a3xTXc44EicwVt07mGP91y/dyHHT1Aml6bxSBVOxmlDOvR4Qt8yBIKwHA==","signatures":[{"sig":"MEUCIQD6rbVhpVUIqo0ck4m2asgYxgxLRgeGyyTOrcVONB8t1gIgT0HRQwllFFv6+km5jo0fMe7bEdAlPgbl0KSFMJzKE9E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","files":[""],"engines":{"node":">= 0.4.0"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"0.3.7","description":"A small library to generate QR codes with libqrencode.","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.1","dependencies":{"vows":">= 0.5.8"},"_defaultsLoaded":true,"_engineSupported":true},"0.1.4":{"name":"qr","version":"0.1.4","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.1.4","homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"1253d358c8554da815565502ad4fafddce0b5616","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.4.tgz","integrity":"sha512-JmqjiGdK9gdSYsjOqx1mF3VCmrmM+K1d+FdrccZN1hVXhu64hO7O17N2BVWUR5JcJa4hww1fAFDYpGVR+oJGJA==","signatures":[{"sig":"MEUCIANGDoeQHot9fq3xhwJ/baY3PBRu0/6byBuAJQrhIvddAiEA/hactf3mSJ7m7NyVUXfDCalhfv4lh0tnvEWTzIGKhdI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","files":[""],"engines":{"node":">= 0.4.0"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"0.3.7","description":"A small library to generate QR codes with libqrencode.","directories":{"lib":"./lib"},"_nodeVersion":"v0.4.1","dependencies":{"vows":">= 0.5.8"},"_defaultsLoaded":true,"_engineSupported":true},"0.1.5":{"name":"qr","version":"0.1.5","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.1.5","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"9276299c026190c0222da1d7788a3021248d26a0","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.5.tgz","integrity":"sha512-LrZE0Q1xIIGXGH5phjgsiMCzeoS1Yi6R1hlVnrjyn6BXZuiVc5+BvTwieUa7eLhw+PPP5qpX09i99P53dBTTrw==","signatures":[{"sig":"MEYCIQCPIamgbK0xDSSnOZWQCbNh9xj9kBQAWnT62++HQvMn9wIhAMQ7lgY/QR1bAUTJoF+Lktq1V/FhD++yPM3dTbz8wYnJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","engines":{"node":">= 0.4.0"},"scripts":{"test":"vows --spec test/*.js"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.1.6":{"name":"qr","version":"0.1.6","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.1.6","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"fa5512c8981fffe14481dc6836c2a4f050a5d29f","tarball":"https://registry.npmjs.org/qr/-/qr-0.1.6.tgz","integrity":"sha512-hC7+Igon5+DwaKJJjqHhun6ntixtAqmtx/e9QNhEmsOijtkCv5BKy1tQ1IYpZwREeuC5mDT7BkYxqv5/KPQqkQ==","signatures":[{"sig":"MEUCIQD6GqPYZFVSRAfyBcCja+z6hU49+gZs4xngyeb4raj9zAIgUatY20VpN2Hx34xi1U8CO0IDvydFStZ2FXQIgLDV19c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","engines":{"node":">= 0.4.0"},"scripts":{"test":"vows --spec test/*.js"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.2.0":{"name":"qr","version":"0.2.0","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.2.0","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"87f182f426350e56f184e2d6353ec5691c6596a5","tarball":"https://registry.npmjs.org/qr/-/qr-0.2.0.tgz","integrity":"sha512-9pdHCgUs2zm3E2k4vs/nHbvvVJ3iqtIysz1meACVQmNid4UwBT+DUf9b8p3LX2TmxW9hgKvjCN7RjZGTcjbd0w==","signatures":[{"sig":"MEYCIQDLrHDtDOAkGAQlZ+MUqxnAG9tmD/nTmmx2oyxvvthkGQIhAJsg9DcU9VRY/gMLHKVWKPjPjkxqYItSuCa09m+nEeVy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","engines":{"node":">= 0.4.0"},"scripts":{"test":"vows --spec test/*.js"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.2.1":{"name":"qr","version":"0.2.1","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.2.1","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"a6c5bd789f624bc18fa9458bc8515d3bdb9983bd","tarball":"https://registry.npmjs.org/qr/-/qr-0.2.1.tgz","integrity":"sha512-6YmSNfkQVd8mciiuDGz0xRVnCjnqinSeTmAFn+o/o63iROWXM3lLrLwJTkvDWd2uDbH1s4xK+GntLERAyGF69w==","signatures":[{"sig":"MEQCIFHnJnV2aKJZETu7XODAz15oA/mxTTozvADrg7xhOuNUAiB9FC3s4dxk06PaRKVjqDNAVQXXdxhSsWeUmV7U8T6SJQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","_from":".","engines":{"node":">= 0.4.0"},"scripts":{"test":"vows --spec test/*.js"},"_npmUser":{"name":"bcelenza","email":"bcelenza@gmail.com"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"1.2.14","description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.2.2":{"name":"qr","version":"0.2.2","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.2.2","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"af6d62bf51a4cd15bfb90c458e2cbe6c83c31761","tarball":"https://registry.npmjs.org/qr/-/qr-0.2.2.tgz","integrity":"sha512-CacDgvARqsrw9eEm3+TjFtY1ikDisJUE9+mwHeQSWZfhvkQnkSJD6ivb24Ikxk8OBX56+rJNIhISPUH258z0AQ==","signatures":[{"sig":"MEYCIQC1DfN8M7xdtAtAtYr05UBarvsisifdwzVjdztlVehEOgIhAKgckUyJjRpVzwckRa9LDjZmuPgPB+pnkyvkikjMWMLH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","_from":".","engines":{"node":">= 0.4.0"},"scripts":{"test":"vows --spec test/*.js"},"_npmUser":{"name":"bcelenza","email":"bcelenza@gmail.com"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"1.2.14","description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.2.3":{"name":"qr","version":"0.2.3","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.2.3","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/bcelenza/node-qr","dist":{"shasum":"ba5d12f40a7a172b8b6c8d0f830fce0a0a821288","tarball":"https://registry.npmjs.org/qr/-/qr-0.2.3.tgz","integrity":"sha512-96/F0ZAD4yw6Zw6ZbzskFlcbrG7WcQFjUFb2/KcQBGik9PHRRbor5O/TDD44/aDtkp+YLOQshBCcYTQguQD86A==","signatures":[{"sig":"MEUCIHnBsLJ7DeoGQhERPCaPhyhCGiHyrHVWzMDXGiAVPDwkAiEA2p5qMF91RCIaTVwh/iC4SMVDGfcAoL7Fo4tyDUtk7J4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","_from":".","engines":{"node":">= 0.8.0"},"scripts":{"test":"vows --spec test/*.js"},"_npmUser":{"name":"bcelenza","email":"bcelenza@gmail.com"},"repository":{"url":"git://github.com/bcelenza/node-qr.git","type":"git"},"_npmVersion":"1.2.14","description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.2.4":{"name":"qr","version":"0.2.4","keywords":["qr","qrcode","qrencode","qrencoder"],"author":{"name":"Brian Celenza","email":"bcelenza@gmail.com"},"license":{"url":"http://www.opensource.org/licenses/mit-license.php","type":"MIT"},"_id":"qr@0.2.4","maintainers":[{"name":"bcelenza","email":"bcelenza@gmail.com"}],"homepage":"https://github.com/heavyco/node-qr","bugs":{"url":"https://github.com/heavyco/node-qr/issues"},"dist":{"shasum":"abb1397fe284b384e118f5fb7a6a2508ed6217b3","tarball":"https://registry.npmjs.org/qr/-/qr-0.2.4.tgz","integrity":"sha512-VYJPIc6ofakgKX6NC0ZOoLMfMf3sb60DbVYxz+7rV+dv603GY4AZulWPsM7ijNGUTJKVt/QMEwOfdaM7fFPSpg==","signatures":[{"sig":"MEQCIG3GFc9oaYZ28M7s59/uEmxTZ/+0m9nU9zoT/Cnhp7S8AiA9Hitv9/XqfU8ogGtn7ClnYsHFvmXM+ehjf/2Zs+Gebw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./qr.js","_from":".","_shasum":"abb1397fe284b384e118f5fb7a6a2508ed6217b3","engines":{"node":">= 0.8.0"},"gitHead":"fd7f4665ffaf72e4fd71c6956a975eb2758b9e73","scripts":{"test":"vows --spec test/*.js"},"_npmUser":{"name":"bcelenza","email":"bcelenza@gmail.com"},"repository":{"url":"git://github.com/heavyco/node-qr.git","type":"git"},"_npmVersion":"1.5.0-alpha-1","description":"A small library to generate QR codes with libqrencode.","directories":{},"dependencies":{"vows":">= 0.5.8","benchmark":""}},"0.4.0":{"name":"qr","version":"0.4.0","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.4.0","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"505ef6d99eb51f64e13b61c55d14a92b73106099","tarball":"https://registry.npmjs.org/qr/-/qr-0.4.0.tgz","fileCount":26,"integrity":"sha512-Edzwf8GAVJzEIjqPuMHnjwTniwhS92daMuROspUn4ssyYDB1c+AqWSP8Sx+1MJNfBb0+ePykQYWY7PykXZAuuA==","signatures":[{"sig":"MEUCIEmOnzuF8XFHbE5SrjVyMHx26mmX2OhJeOySgFMzecTsAiEA3VFWvWezh5TF0oY1Z5oVEeDwRGZXKvLxr3Fao7Wm1k8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357399},"main":"index.js","types":"index.d.ts","module":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./dom.js":{"import":"./esm/dom.js","require":"./dom.js"},"./decode.js":{"import":"./esm/decode.js","require":"./decode.js"}},"funding":"https://paulmillr.com/funding/","gitHead":"017845e9990f7a752f769ccb6c70fac4f4caa560","scripts":{"lint":"prettier --check src","test":"node test/index.js","build":"tsc && tsc -p tsconfig.cjs.json","format":"prettier --write src","test:bun":"bun test/index.js","test:deno":"deno --allow-env --allow-read test/index.js","build:release":"npx jsbt esbuild test/build"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"10.9.2","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"23.6.1","_hasShrinkwrap":false,"devDependencies":{"omggif":"1.0.10","jpeg-js":"0.4.4","prettier":"3.5.2","typescript":"5.8.2","micro-bmark":"0.4.0","micro-should":"0.5.1","@paulmillr/jsbt":"0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.4.0_1742744065882_0.17909197720571135","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"qr","version":"0.4.2","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.4.2","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"6cc5da4bbe9d1dbc1cb3bf76e3e18abd95e59c98","tarball":"https://registry.npmjs.org/qr/-/qr-0.4.2.tgz","fileCount":26,"integrity":"sha512-wCv4rt7IcPNGT0J8JiTBHx7YrZzYuzpof38y/MFYd5Sp7OTyAFYL1e110In8PrAG/ffIOVl1ha3joJ2zpYxKMQ==","signatures":[{"sig":"MEUCIQCzHybwp+jgR+HnxtLLSvY3Oxdka+bbFu3uQo9zF5zx4gIgUegviSwSWo47My/nGS1SGDYatCTIunJJ57j85aHEgBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":363382},"main":"index.js","types":"index.d.ts","module":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./dom.js":{"import":"./esm/dom.js","require":"./dom.js"},"./decode.js":{"import":"./esm/decode.js","require":"./decode.js"}},"funding":"https://paulmillr.com/funding/","gitHead":"dd9c27219f6743520b5fee8ef1e337d2da472ae6","scripts":{"lint":"prettier --check src","test":"cd test; npm ci; node index.js","build":"tsc && tsc -p tsconfig.cjs.json","format":"prettier --write src","test:bun":"cd test; bun install; bun index.js","test:deno":"cd test; npm install; deno --allow-env --allow-read index.js","build:release":"npx jsbt esbuild test/build"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"10.9.2","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","typescript":"5.8.3","micro-bmark":"0.4.1","micro-should":"0.5.2","@paulmillr/jsbt":"0.3.3"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.4.2_1745590940772_0.7756554223352483","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"qr","version":"0.5.0","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.0","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"fa5712a355b21044073ef63311a18901f70ac6e1","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.0.tgz","fileCount":16,"integrity":"sha512-LtnyJsepKCMzfmHBZKVNo1g29kS+8ZbuxE9294EsRhHgVVpy4x8eFw9o4J9SIolDHoDYuaEIY+z8UjiCv/eudA==","signatures":[{"sig":"MEUCID+7Hi7KYrLfAft6Hi4JBmU6xlhGsCKFMu6272Q/BNMeAiEA0Psa0nUq88ixr8R8vDxvWl3brNLO+7hd/t47+QYRZsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":232271},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"funding":"https://paulmillr.com/funding/","gitHead":"20bae9e7f5c1002619d1276f6c865c7450950be7","scripts":{"lint":"prettier --check src","test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx jsbt esbuild test/build"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"10.9.2","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.5.3","typescript":"5.8.3","@types/node":"22.15.23","micro-bmark":"0.4.1","micro-should":"0.5.3","@paulmillr/jsbt":"0.4.1"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.0_1749061779148_0.3227909867000882","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"qr","version":"0.5.1","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.1","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"49e091b8400ec5e5d347fe3c5133ac5cf0cdef32","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.1.tgz","fileCount":19,"integrity":"sha512-bBqlLzOJFhyj0RoeLTl9wZLUaEmVMlsAp8huBAZnRHJfhfbcIg9n2XWf/Qga3vnyzvfTh9Tqz7OcoOulTAT8RA==","signatures":[{"sig":"MEUCIQDjoKXrpmOqkezqFepkQ2a9Q6QaIxnx5YN3gWmsPMclawIgHgIbJSXELxYkQewKvv8Q8gROqoOb3r2AwS9h0XdF0vQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":339813},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"gitHead":"695bf33196f802ec07661fc07572c3c2d30c6b6a","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx --no @paulmillr/jsbt esbuild test/build"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.5.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"5.9.2","@types/node":"24.2.1","@paulmillr/jsbt":"0.4.3"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.1_1755711834142_0.8653297562593658","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"qr","version":"0.5.2","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.2","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"3568c2e8e159fce07b23c707b000e356f5e3b95b","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.2.tgz","fileCount":19,"integrity":"sha512-91M3sVlA7xCFpkJtYX5xzVH8tDo4rNZ7jr8v+1CRgPVkZ4D+Vl9y8rtZWJ/YkEUM6U/h0FAu5W/JAK7iowOteA==","signatures":[{"sig":"MEUCIQDQl9azFLkboBJXxOb71+HJek7z9yvEgt9U2bDN+qBmeAIgdELol2BTCVw16fMZmVwW4DOm97kLbVuLm8SA54C4zBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":339917},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"7afbebab1187af5176a541a070e5db8f2f008edd","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx --no @paulmillr/jsbt esbuild test/build"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.5.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"5.9.2","@types/node":"24.2.1","@paulmillr/jsbt":"0.4.4"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.2_1758187510147_0.7369158312501032","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"qr","version":"0.5.3","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.3","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"9a76e900b58b45106ec446614a05793e1a29480f","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.3.tgz","fileCount":19,"integrity":"sha512-BSrGdNXa8z6PfEYWtvITV21mQ4asR4UCj38Fa3MUUoFAtYzFK/swEQXF+OeBuNbHPFfs3PzpZuK0BXizWXgFOQ==","signatures":[{"sig":"MEQCICpqNsXLJTR10kbmCOGx9/Lp4TCvvixHFrkhelqXCr5rAiB4qpNTOPZJDP5FdUVxQXDdiz0quNe/JWQ6hBq7bE0w/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":350444},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"6c566c1dc50e6982e57236446a4fd2eb46b45015","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx --no @paulmillr/jsbt esbuild test/build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:605501dc-2a0f-4a0f-bec2-20e93399ff08"}},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.6.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"5.9.2","@types/node":"24.2.1","@paulmillr/jsbt":"0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.3_1764548940475_0.7324248527082518","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"qr","version":"0.5.4","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.4","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"ef1e53b760430cd803c2486d0e11121098b904bc","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.4.tgz","fileCount":19,"integrity":"sha512-gjVMHOt7CX+BQd7JLQ9fnS4kJK4Lj4u+Conq52tcCbW7YH3mATTtBbTMA+7cQ1rKOkDo61olFHJReawe+XFxIA==","signatures":[{"sig":"MEUCID96ZEjICBH10ekr0+vhjg+1DUNF0xyoVHJC7DIkdTWxAiEAjHQv4SUmc2kiYB2WM2RqP4NFs6RePtmrWZM8dm2zRkI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":384526},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"a3abe543cc26a82267960226f235c6b19093d4dc","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx --no @paulmillr/jsbt esbuild test/build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:605501dc-2a0f-4a0f-bec2-20e93399ff08"}},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.6.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"5.9.2","@types/node":"24.2.1","@paulmillr/jsbt":"0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.4_1768104334523_0.752553719848432","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"qr","version":"0.5.5","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.5.5","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"0fbe55a97a8641b04ace23d3a07052f8db7d8827","tarball":"https://registry.npmjs.org/qr/-/qr-0.5.5.tgz","fileCount":19,"integrity":"sha512-iQBvKj7MRKO+co+MY0IZpyLO+ezvttxsmV86WywrgPuAmgBkv0pytyi03wourniSoPgzffeBW6cBgIkpqcvjTg==","signatures":[{"sig":"MEUCIAso9+7or++ZlzkwmQBHqLWBw8YSOkc8FCTbboopznTYAiEA+OzX2FowfT6G670TL0SIrpbEluWOOvWQqDH2pmTzjHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.5.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":429711},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"d1375960745a090d5e59c8d5b86b4d00cf88e883","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","build:release":"npx --no @paulmillr/jsbt esbuild test/build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:605501dc-2a0f-4a0f-bec2-20e93399ff08"}},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.6.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"5.9.2","@types/node":"24.2.1","@paulmillr/jsbt":"0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.5.5_1772884043896_0.19849426895556754","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"qr","version":"0.6.0","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.6.0","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"00c3d080dc76adf5d3754d9ad7ff0f9263dee2e0","tarball":"https://registry.npmjs.org/qr/-/qr-0.6.0.tgz","fileCount":19,"integrity":"sha512-P23VoX7SipHALdiIYG+D+LT/6n22dNKwV92FAb3d+Nlki/5WisSsfLt0UDFz2XEBtuwrECTznvu+chKKFCSYhA==","signatures":[{"sig":"MEYCIQCxuc6SyDm3P7NjVevSHZoSRk4VLccZsspnfkQ1iY/e6wIhAKCjIw3UJAnNJMh65q2UkqCQyZzzSRo5PiTsIFsIO71t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":520808},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"260ea4689bf8921a8585fe3926ec70f11de70fb6","scripts":{"test":"cd test; npm ci; node --experimental-strip-types --no-warnings index.ts","bench":"cd test/benchmark && npm ci && node index.ts","build":"tsc","check":"npx --no @paulmillr/jsbt check package.json","format":"prettier --write src","test:bun":"cd test; bun install; bun index.ts","test:deno":"cd test; npm install; deno --allow-env --allow-read index.ts","check:jsdoc":"npx --no @paulmillr/jsbt tsdoc package.json","test:node20":"cd test; npx tsc; cd compiled/test; npm install; node index.js","check:readme":"npx --no @paulmillr/jsbt readme package.json","build:release":"npx --no @paulmillr/jsbt esbuild test/build","check:treeshake":"npx --no @paulmillr/jsbt treeshake package.json test/build/out-treeshake"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:605501dc-2a0f-4a0f-bec2-20e93399ff08"}},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"11.6.1","description":"Minimal 0-dep QR code generator & reader. Supports ascii, term, gif and svg formats","directories":{},"sideEffects":false,"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"prettier":"3.6.2","typescript":"6.0.2","@types/node":"25.3.0","@paulmillr/jsbt":"0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.6.0_1777369001657_0.18187952970581867","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"qr","version":"0.7.0","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","_id":"qr@0.7.0","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"homepage":"https://github.com/paulmillr/qr","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"2de1a4b32efcdea32009d3ca39046a509e412e05","tarball":"https://registry.npmjs.org/qr/-/qr-0.7.0.tgz","fileCount":13,"integrity":"sha512-/VrrACmOAwZVipuRITwfEwOL5oAMEHH5PTmBWaGtlTom2Thxaa+rhmna4zU9PRN2uLw2wdccbkHOLGZb1Q9SdA==","signatures":[{"sig":"MEYCIQCOuX5yh4JW/AY5cKOVYY5sMw5xhKRoEv8WN+J6GF1RfQIhAL98T5b0sHtnlcNYwsJiy6V7Bk8Ifk56Zd9pHUORtxyR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":485788},"main":"index.js","type":"module","types":"index.d.ts","module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"be475cca488635b8a71e158ac6190a5c78a201a8","scripts":{"test":"node --no-warnings test/index.ts","build":"tsc","check":"jsbt-check","format":"prettier --write src","test:bun":"bun test/index.ts","test:tsc":"cd test; npx tsc; cd compiled/test; node index.js","benchmark":"node benchmark/index.ts","test:deno":"deno --allow-env --allow-read --allow-ffi --allow-sys test/index.ts","benchmark:size":"bismar -bsm","benchmark:batch":"node benchmark/batch.ts","benchmark:quality":"node benchmark/quality.ts","benchmark:thirdparty":"cd benchmark/thirdparty && npm ci && node index.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","approver":{"name":"paulmillr","email":"paul@paulmillr.com"},"trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae3d2dad-650a-4a60-928a-7fefb28cc027"}},"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"12.0.2","description":"Minimal zero-dependency QR generator/reader with terminal, GIF, and SVG output","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","allowScripts":{"canvas@3.2.3":true},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"26.0.0","bismar":"0.1.9","canvas":"3.2.3","jpeg-js":"0.4.4","prettier":"3.9.6","typescript":"7.0.2","@types/node":"26.3.0","@types/jsdom":"21.1.7","global-jsdom":"26.0.0","micro-packed":"0.11.1","@paulmillr/jsbt":"0.7.2"},"_npmOperationalInternal":{"tmp":"tmp/qr_0.7.0_1788169461712_0.8744701084816431","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"_id":"qr@0.7.2","bugs":{"url":"https://github.com/paulmillr/qr/issues"},"dist":{"shasum":"47b4b6b018fdd27331bea034c111fb8db01bbc16","tarball":"https://registry.npmjs.org/qr/-/qr-0.7.2.tgz","integrity":"sha512-yovYRuacJBJkG9fWSwcB2bKZhr58c04DpOXguDU+rAAoJZdi6/J3DtlomkKqdd1MutIptIK+kigWmT7LKz8y7A==","fileCount":13,"unpackedSize":539239,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/qr@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCvwiUaZwtaEkJOO/x4saZnX3BsD05mOeECe7ngnnk74AIhAMLwfUUqymVzbUnrOh60RfwLSrQGkNAdcwTvc6t1B76o"}]},"main":"index.js","name":"qr","type":"module","types":"index.d.ts","author":{"url":"https://paulmillr.com","name":"Paul Miller"},"module":"index.js","engines":{"node":">= 20.19.0"},"exports":{".":"./index.js","./dom.js":"./dom.js","./decode.js":"./decode.js"},"gitHead":"951806df842fb7c9214012a73b00e60b259243d3","license":"(MIT OR Apache-2.0)","scripts":{"test":"node --no-warnings test/index.ts","build":"tsc","check":"jsbt-check","format":"prettier --write src","test:bun":"bun test/index.ts","test:tsc":"cd test; npx tsc; cd compiled/test; node index.js","benchmark":"node benchmark/index.ts","test:deno":"deno --allow-env --allow-read --allow-ffi --allow-sys test/index.ts","benchmark:size":"bismar -bsm","benchmark:batch":"node benchmark/batch.ts","benchmark:quality":"node benchmark/quality.ts","benchmark:thirdparty":"cd benchmark/thirdparty && npm ci && node index.ts"},"version":"0.7.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ae3d2dad-650a-4a60-928a-7fefb28cc027"},"approver":{"name":"paulmillr","email":"paul@paulmillr.com"}},"homepage":"https://github.com/paulmillr/qr","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"_npmVersion":"12.0.2","description":"Minimal zero-dependency QR generator/reader with terminal, GIF, and SVG output","directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"sideEffects":false,"_nodeVersion":"24.19.0","allowScripts":{"canvas@3.2.3":true},"devDependencies":{"jsdom":"26.0.0","bismar":"0.1.9","canvas":"3.2.3","jpeg-js":"0.4.4","prettier":"3.9.6","typescript":"7.0.2","@types/node":"26.3.0","@types/jsdom":"21.1.7","global-jsdom":"26.0.0","micro-packed":"0.11.1","@paulmillr/jsbt":"0.7.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qr_0.7.2_1790601120672_0.19492152642179805"},"_hasShrinkwrap":false}},"time":{"created":"2011-03-31T02:04:09.672Z","modified":"2026-09-28T13:12:01.035Z","0.1.0":"2011-03-31T02:04:09.839Z","0.1.1":"2011-03-31T02:05:30.417Z","0.1.2":"2011-03-31T02:48:15.391Z","0.1.3":"2011-03-31T20:38:34.901Z","0.1.4":"2011-04-01T03:23:33.242Z","0.1.5":"2012-10-04T17:32:05.742Z","0.1.6":"2013-03-17T22:30:48.263Z","0.2.0":"2013-03-17T22:40:44.387Z","0.2.1":"2013-12-05T23:58:15.143Z","0.2.2":"2013-12-06T00:06:13.684Z","0.2.3":"2013-12-14T00:02:34.346Z","0.2.4":"2015-02-10T19:46:14.183Z","0.4.0":"2025-03-23T15:34:26.079Z","0.4.2":"2025-04-25T14:22:20.975Z","0.5.0":"2025-06-04T18:29:39.355Z","0.5.1":"2025-08-20T17:43:54.332Z","0.5.2":"2025-09-18T09:25:10.351Z","0.5.3":"2025-12-01T00:29:00.675Z","0.5.4":"2026-01-11T04:05:34.667Z","0.5.5":"2026-03-07T11:47:24.091Z","0.6.0":"2026-04-28T09:36:41.792Z","0.7.0":"2026-08-31T09:44:21.824Z","0.7.2":"2026-09-28T13:12:00.764Z"},"bugs":{"url":"https://github.com/paulmillr/qr/issues"},"author":{"url":"https://paulmillr.com","name":"Paul Miller"},"license":"(MIT OR Apache-2.0)","homepage":"https://github.com/paulmillr/qr","keywords":["qr","code","qr code","qr pattern","qr generator","qr reader","ascii","gif","svg","camera","file"],"repository":{"url":"git+https://github.com/paulmillr/qr.git","type":"git"},"description":"Minimal zero-dependency QR generator/reader with terminal, GIF, and SVG output","maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"readme":"# qr (paulmillr-qr)\n\nMinimal 0-dependency QR code generator & reader.\n\n- 🔒 Auditable, 0-dependency\n- 🏎 [Fast](#speed): up to 65x faster encoding/decoding than other JS libraries, faster than zxing-wasm\n- 🔍 High-quality: decodes 58% of BoofCV photo vectors\n- 🏞️ Encoding (generating) supports ASCII, term, gif, data-url and svg codes\n- 📷 Decoding (reading) supports camera feed input, files and non-browser environments\n- 🪶 6KB (gzipped) for encoding, 20KB for encoding + decoding\n\nCheck out [Interactive demo](https://paulmillr.com/apps/qr/); also there is [cuer React Component](https://github.com/wevm/cuer).\n\n## Usage\n\n> `npm install qr`\n\n> `jsr add jsr:@paulmillr/qr`\n\nTo produce a standalone file, use **bismar**: `npx bismar -b npm:qr/index.js/encodeQR`.\n\nThree entry points — import only what you use (sizes are esbuild-bundled, minified, gzipped):\n\n| import           | provides                                                        | size                     |\n| ---------------- | --------------------------------------------------------------- | ------------------------ |\n| `qr`             | `encodeQR`                                                      | 5.4KB                    |\n| `qr/decode.js`   | `decodeQR`, `BarcodeDetector`                                   | 7.3KB (11.5KB with `qr`) |\n| `qr/dom.js`      | `QRCanvas`, `rearCamera`, `selfieCamera`, `frameLoop`, `svgToPng`, `gifToPng` | 9.3KB (includes decoder) |\n\n- [Encoding](#encoding)\n- [Decoding](#decoding)\n  - [Scan from webcam](#scan-from-webcam)\n  - [Decode image files](#decode-image-files)\n  - [BarcodeDetector polyfill](#barcodedetector-polyfill)\n- [Documentation](#documentation)\n- [Security](#security)\n- [Speed](#speed)\n\n## Encoding\n\n```js\nimport encodeQR from 'qr';\n\nconst txt = 'Hello world';\nconsole.log(encodeQR(txt, 'term')); // print to terminal; works in every font\nconst svg = encodeQR(txt, 'svg'); // '<svg...' markup string for web pages\nconst gifBytes = encodeQR(txt, 'gif', { scale: 4 }); // Uint8Array, uncompressed GIF file\nconst dataUrl = encodeQR(txt, 'data-url', { scale: 4 }); // 'data:image/gif;base64,...' for <img src>\nconst matrix = encodeQR(txt, 'raw'); // boolean[][] for canvas or custom drawing\nconst ascii = encodeQR(txt, 'ascii'); // 2x denser than 'term', needs a box-drawing font\n```\n\nFor PNG, render the SVG in a browser with `svgToPng` from `qr/dom.js`:\n`const pngDataUrl = await svgToPng(encodeQR(txt, 'svg'), 512, 512);`\n\nAll options:\n\n```ts\ntype QrOpts = {\n  ecc?: 'low' | 'medium' | 'quartile' | 'high'; // error correction: 7%, 15% (default), 25%, 30%\n  encoding?: 'numeric' | 'alphanumeric' | 'byte'; // smallest fit is picked automatically\n  textEncoder?: (text: string) => Uint8Array; // custom text-to-bytes encoder for 'byte' mode\n  version?: number; // 1..40, QR code version; smallest fit is picked automatically\n  mask?: number; // 0..7, mask number; best is picked automatically\n  border?: number; // border (quiet zone) size in modules, default 2\n  scale?: number; // pixels per module, default 1\n  optimize?: boolean; // 'svg' only: merge modules into fewer path elements, default true\n};\ndeclare function encodeQR(text: string, output: 'raw', opts?: QrOpts): boolean[][];\ndeclare function encodeQR(\n  text: string,\n  output: 'ascii' | 'term' | 'svg' | 'data-url',\n  opts?: QrOpts\n): string;\ndeclare function encodeQR(text: string, output: 'gif', opts?: QrOpts): Uint8Array;\n```\n\nExample output:\n\n```text\n█████████████████████████████████\n██ ▄▄▄▄▄ █  ▄ ▄██▄ █▀▀▄█ ▄▄▄▄▄ ██\n██ █   █ █▄ ▄▀███▄ ███▄█ █   █ ██\n██ █▄▄▄█ █▄█   █▄  ▄█▄██ █▄▄▄█ ██\n██▄▄▄▄▄▄▄█▄█▄▀ ▀▄▀ █▄▀▄█▄▄▄▄▄▄▄██\n██ ▀▀  ▄▄  ▄█▄▀ ██▀▄▀   █▀ █  ▄██\n██▀▄▀▀  ▄ ▄ ▀ ▀ █▄ ▀█▀▀▀▀▄ ▀▄█▀██\n███ █▀▀▄▄█ ▄▀   ▀▄  █▄█▄ ▀▀▀▀▀ ██\n██ ▀  ▄ ▄▄▀█ █▀▄█▀▄█ ▄ ██  █ █ ██\n██▀█▀▄█ ▄█ █ ▄▄▀ █ ▀▀█▀███▀▄▀▀███\n██  ▀▀▄ ▄▄█   ▄█▀▄██▄ ▄▄ ▀█ ▀█▄██\n██▄▄▄█▄▄▄█▀▀▄▄▀▄ ▄▄██▄ ▄▄▄  ▄▄███\n██ ▄▄▄▄▄ █ ▄▀▀██ ▀█ ▄  █▄█ ▄██▀██\n██ █   █ █  ▄█▄ ▄██  ▄▄ ▄▄▄▄█▀███\n██ █▄▄▄█ ██ ██ ▀ ▄▀ ▀█▄ ▀  ▀ ▄ ██\n██▄▄▄▄▄▄▄█▄▄▄████▄█▄██▄██▄█▄█████\n▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀\n```\n\n## Decoding\n\n`decodeQR` takes raw RGBA pixels — `{ width, height, data }`, the shape a\ncanvas `ImageData` already has — and returns the decoded string. It **throws**\nwhen no QR code is found: in a camera loop treat that as a frame miss and feed\nit the next frame instead of retrying the failed one.\n\nEffort is controlled by two options. `effort` sets the retry tier: `1` keeps\nonly mandatory work, larger values admit more hypotheses, `Infinity` runs\nevery retry at every resolution up to the image's native one. `timeLimit`\ncaps the milliseconds spent on optional retries and defaults to one 60-FPS\nframe budget, so live camera frames stay fast (a failing 1080p frame returns\nin ~4ms). For photos and file uploads pass\n`{ effort: Infinity, timeLimit: Infinity }`, which lifts [BoofCV accuracy](#quality) from\n~58% to ~61%. Successful decodes cost the same in every tier, since retries\nonly run after a failed strict pass.\n\n### Scan from webcam\n\n`qr/dom.js` ships the camera plumbing: `rearCamera` opens the rear\n(environment-facing) camera into a `<video>` element, `QRCanvas` decodes frames and optionally\ndraws a live finder overlay and a preview of the decoded code, `frameLoop`\nwraps `requestAnimationFrame`:\n\n```js\nimport { QRCanvas, frameLoop, rearCamera } from 'qr/dom.js';\n\nconst video = document.querySelector('video');\nconst overlay = document.querySelector('canvas'); // positioned over the video; optional\nconst canvas = new QRCanvas({ overlay });\nconst camera = await rearCamera(video);\nconst cancel = frameLoop(() => {\n  const decoded = camera.readFrame(canvas); // undefined until a frame decodes\n  if (decoded !== undefined) {\n    console.log(decoded);\n    cancel();\n    camera.stop(); // release the camera\n  }\n});\n```\n\n`selfieCamera` is the same helper for the user-facing camera (e.g. a code\nheld up to a laptop webcam); `camera.listDevices()` and\n`camera.setDevice(deviceId)` switch cameras.\nCamera access requires a secure context: on iOS Safari that means `https:` —\n`file:` and plain `http:` won't work.\n\n### Decode image files\n\nIn browsers, the native image decoder handles any format:\n\n```js\nimport decodeQR from 'qr/decode.js';\n\nasync function decodeImageFile(file) {\n  // file: e.g. from <input type=\"file\"> or fetch(...).blob()\n  const bitmap = await createImageBitmap(file);\n  const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n  const ctx = canvas.getContext('2d');\n  ctx.drawImage(bitmap, 0, 0);\n  return decodeQR(ctx.getImageData(0, 0, bitmap.width, bitmap.height));\n}\n```\n\nOutside browsers, decode image files to RGBA with any image library and pass\n`{ width, height, data }` to `decodeQR`. Clean 1px-per-module rasters (the\nencoder's default `scale: 1`) are too small for run-length finder detection —\nupscale them ≥2× first.\n\n### BarcodeDetector polyfill\n\n`qr/decode.js` ships a\n[BarcodeDetector](https://developer.mozilla.org/en-US/docs/Web/API/BarcodeDetector)\nponyfill on top of `decodeQR`. Importing it has no side effects — use the class\ndirectly, or install it as a drop-in polyfill:\n\n```js\nimport { BarcodeDetector } from 'qr/decode.js';\nglobalThis.BarcodeDetector ??= BarcodeDetector;\n\nconst detector = new BarcodeDetector({ formats: ['qr_code'] });\nconst barcodes = await detector.detect(canvas); // [{ rawValue, boundingBox, cornerPoints, format }]\n```\n\nDifferences from native implementations: only the `qr_code` format is supported,\nat most one barcode per image is returned, and `cornerPoints` reuse the\ndecoder-projected symbol boundary, so they are estimates of the visible barcode\nedges.\n\n## Documentation\n\nSee `docs/encode.md` and `docs/decode.md` for more details.\n\n## Security\n\nThere are multiple ways a single text can be encoded in a QR code, which can lead to potential security implications:\n\n- **Segmentation Differences:** For example, `abc123` can be encoded as:\n  `[{type: 'alphanum', data: 'abc'}, {type: 'num', data: '123'}]` or `[{type: 'alphanum', data: 'abc123'}]`\n- **Mask Selection Algorithms:** Different libraries may use different algorithms for mask selection.\n- **Default Settings:** Variations in error correction levels and how many bits are stored before upgrading versions.\n\nIf an adversary can access multiple QR codes generated from a specific library, they may be able to fingerprint the user. This fingerprinting could be used to exfiltrate data from air-gapped systems. In such cases, the adversary would need to create a library-specific exploit.\n\nWe mitigate these risks by:\n\n- **Cross-Testing:** We currently cross-test against python-qrcode, which is closer to the specification\n  than some JavaScript implementations.\n- **Single Segment Encoding:** We always use single-segment encoding.\n  While this may not be the most optimal for performance, it reduces the amount of fingerprinting data.\n\nTODO: **Testing Against Multiple Libraries:** To further improve security and reduce fingerprinting, we can\ncross-test against three to four popular libraries.\n\n## Speed\n\nMeasured 2026-08 on one idle AMD Zen 5 core, Node 24. Reproduce with\n`npm run benchmark` and `npm run benchmark:thirdparty`.\n\nEncoding (`raw` matrix output, ECC medium), vs other JS encoders:\n\n| payload             | qr         | qrcode | lean-qr | uqr   | qrcode-generator | nuintun |\n| ------------------- | ---------- | ------ | ------- | ----- | ---------------- | ------- |\n| v1, 11 chars        | **4.4µs**  | 40µs   | 40µs    | 145µs | 168µs            | 54µs    |\n| v3, 31 chars        | **7.5µs**  | 90µs   | 95µs    | 302µs | 430µs            | 150µs   |\n| v8, 192 chars       | **23µs**   | 296µs  | 255µs   | 983µs | 1.5ms            | 681µs   |\n| v18, 768 chars      | **65µs**   | 1.2ms  | 977µs   | 3.3ms | 5.2ms            | 2.5ms   |\n\nEncoding + rendering (\"-\" means library doesn't support it):\n\n| format   | qr        | qrcode | lean-qr | uqr   | qrcode-generator | nuintun |\n| -------- | --------- | ------ | ------- | ----- | ---------------- | ------- |\n| ascii    | **4.6µs** | 41µs   | 44µs    | 148µs | 176µs            | —       |\n| svg      | **11µs**  | 43µs   | 118µs   | 153µs | 166µs            | —       |\n| data-url | **5.5µs** | 537µs  | 54µs    | —     | 194µs            | 220µs   |\n\nDecoding, vs JS/WASM alternatives, over 20 different photos:\n\n| workload  | qr         | zxing-wasm | @zxing/library | zbar-wasm | jsqr   |\n| --------- | ---------- | ---------- | -------------- | --------- | ------ |\n| raster v1 | 108µs      | 86µs       | **62µs**       | 254µs     | 417µs  |\n| 720p ok   | **2.4ms**  | **2.4ms**  | 3.6ms          | 16.4ms    | 23.8ms |\n| 1080p ok  | **5.3ms**  | 8.8ms      | 11ms           | 63ms      | 351ms  |\n| 12MP ok   | **25.1ms** | 42ms       | 54ms           | 260ms     | 528ms  |\n\n\n### Quality\n\nWe're measuring accuracy / quality via BoofCV test vectors.\n\nMeasured with `npm run benchmark:quality` on 2026-08:\n\n- qr (this library): 57.5% default, 60.6% with `effort: Infinity, timeLimit: Infinity`\n- zxing-cpp fast mode 50%, slow mode 75%\n\nNot all of the test vectors are equal for webcam decoding:\n\n| category     | why it matters on a webcam                                                 |\n| ------------ | -------------------------------------------------------------------------- |\n| blurred      | P1: focus-hunting is _the_ dominant webcam failure mode                    |\n| bright_spots | P2: LED/spotlight hotspots; overlaps glare, rarer                          |\n| brightness   | P1: webcam auto-exposure constantly over/undershoots                       |\n| close        | P2: codes shoved inside autofocus range — huge blurry modules              |\n| curved       | P2: codes on bottles/packaging held to the camera                          |\n| damaged      | P2: worn prints exist, but webcam scans skew toward screens/fresh prints   |\n| glare        | P1: specular reflections off glossy prints, phone screens, lamination      |\n| high_version | P3: dense v20+ rarely resolves at 720p regardless of decoder               |\n| lots         | P3: many codes on one sheet — a webcam session aims at _one_ code          |\n| monitor      | P1: codes shown on _screens_ (login/pairing/payment) — the top desktop use |\n| nominal      | P1: the baseline \"code held decently in view\" case                         |\n| noncompliant | P3: spec-violating codes are rare in the wild                              |\n| pathological | P3: synthetic stress patterns, not camera reality                          |\n| perspective  | P1: nobody holds paper parallel to the lens                                |\n| rotations    | P1: hand-held codes arrive at arbitrary orientation                        |\n| shadows      | P1: the user's own hand/head shadows the held-up code                      |\n\n## License\n\nCopyright (c) 2023 Paul Miller (paulmillr.com)\n\nCopyright (c) 2019 ZXing authors\n\nThe library paulmillr-qr is dual-licensed under the Apache 2.0 OR MIT license.\nYou can select a license of your choice.\n\nThe library contains code inspired by [ZXing](https://github.com/zxing/zxing), which is licensed under Apache 2.0.\n\nThe license to the use of the QR Code stipulated by JIS (Japanese Industrial Standards) and the ISO are not necessary.\nThe specification for QR Code has been made available for use by any person or organization. (Obtaining QR Code Specification)\nThe word “QR Code” is registered trademark of DENSO WAVE INCORPORATED in Japan and other countries.\nTo use the word “QR Code” in your publications or web site, etc, please indicate a sentence QR Code is registered trademark of DENSO WAVE INCORPORATED.\nThis registered trademark applies only for the word “QR Code”, and not for the QR Code pattern (image).\n(https://www.qrcode.com/en/faq.html)\n","readmeFilename":"README.md","users":{"cliff":true}}