{"_id":"@cyberace/n8n-nodes-qr","_rev":"4-b3889df238dfebc3eef182802e454197","name":"@cyberace/n8n-nodes-qr","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@cyberace/n8n-nodes-qr","version":"0.1.0","keywords":["n8n-community-node-package","n8n","qr-code","qrcode","automation"],"author":{"url":"https://enriqueite.com","name":"Enrique Serrano Aparicio","email":"hello@enriqueite.com"},"license":"MIT","_id":"@cyberace/n8n-nodes-qr@0.1.0","maintainers":[{"name":"enriqueite","email":"hello@enriqueite.com"}],"homepage":"https://github.com/EnriqueITE/QR-Toolkit-N8N#readme","bugs":{"url":"https://github.com/EnriqueITE/QR-Toolkit-N8N/issues"},"n8n":{"nodes":["dist/nodes/QrToolkit/QrToolkit.node.js"],"strict":true,"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"22dd9579717e44bac57ff27cdfd0c5e18e09b2dc","tarball":"https://registry.npmjs.org/@cyberace/n8n-nodes-qr/-/n8n-nodes-qr-0.1.0.tgz","fileCount":23,"integrity":"sha512-qiSH1pmSSnezoY/1KOVtH+H76OHwhtTdnOCYCe48YaqVTzBlgkR+T3dzQzYkd/C5sZzLpnDcZn6wa+4BxRVc9g==","signatures":[{"sig":"MEUCIGWOjuAGGlvEFffbI7r2Z7LIM9vWOT1e4JvWYzEt5uLbAiEAz6bUn8hs+Zj9HE11h5drSnDB6IvDR+7nXRy9xjpM9QA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyberace%2fn8n-nodes-qr@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178903},"engines":{"node":">=22.0.0"},"funding":{"url":"https://buymeacoffee.com/enriqueite","type":"buymeacoffee"},"gitHead":"6892d42938d3c9f845bf600a5b971fd4624dc299","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","verify":"npm run format:check && npm run lint && npm run typecheck && npm test && npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","build:watch":"tsc --watch","format:check":"prettier --check .","prepublishOnly":"npm run verify"},"_npmUser":{"name":"enriqueite","email":"hello@enriqueite.com"},"repository":{"url":"git+https://github.com/EnriqueITE/QR-Toolkit-N8N.git","type":"git"},"_npmVersion":"11.6.1","description":"Generate and read PNG QR codes locally in n8n workflows.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jsqr":"^1.4.0","pngjs":"^7.0.0","eslint":"9.39.4","vitest":"^3.2.7","prettier":"3.8.3","release-it":"^20.2.1","typescript":"5.9.3","@types/node":"24.0.15","@types/pngjs":"^6.0.5","@n8n/node-cli":"^0.39.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-qr_0.1.0_1784594045896_0.25207904705493656","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cyberace/n8n-nodes-qr","version":"0.1.1","keywords":["n8n-community-node-package","n8n","qr-code","qrcode","automation"],"author":{"url":"https://enriqueite.com","name":"Enrique Serrano Aparicio","email":"hello@enriqueite.com"},"license":"MIT","_id":"@cyberace/n8n-nodes-qr@0.1.1","maintainers":[{"name":"enriqueite","email":"hello@enriqueite.com"}],"homepage":"https://github.com/EnriqueITE/QR-Toolkit-N8N#readme","bugs":{"url":"https://github.com/EnriqueITE/QR-Toolkit-N8N/issues"},"n8n":{"nodes":["dist/nodes/QrToolkit/QrToolkit.node.js"],"strict":true,"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"544dee830053e3f9d4241af504e959c6ceee4fa4","tarball":"https://registry.npmjs.org/@cyberace/n8n-nodes-qr/-/n8n-nodes-qr-0.1.1.tgz","fileCount":23,"integrity":"sha512-3M0EoQsEMT4NPmlEyY1ZnewjBEY2LMgn0LhrZQ7cnXNxBR/gy10GFDwgXYy8JBOctTEFCL4muJ9XNWShOqhG3g==","signatures":[{"sig":"MEYCIQCmFmmlPzy8cFZ5dWDEApk6e+4/IQcs1b1Z+IbbFNKRhAIhAKMNzsFIxthOQAQQGDeMR3HsBj500301IpXn/u4YBToW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyberace%2fn8n-nodes-qr@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179130},"engines":{"node":">=22.0.0"},"funding":{"url":"https://buymeacoffee.com/enriqueite","type":"buymeacoffee"},"gitHead":"b03ef8898e0d3afddd8154dfaed7bb03e05c0ebf","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","verify":"npm run format:check && npm run lint && npm run typecheck && npm test && npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","build:watch":"tsc --watch","format:check":"prettier --check .","prepublishOnly":"npm run verify"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:18e3ed0e-6734-4e94-b1ea-e1c353b98b75"}},"repository":{"url":"git+https://github.com/EnriqueITE/QR-Toolkit-N8N.git","type":"git"},"_npmVersion":"11.6.1","description":"Generate and read PNG QR codes locally in n8n workflows.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jsqr":"^1.4.0","pngjs":"^7.0.0","eslint":"9.39.4","vitest":"^3.2.7","prettier":"3.8.3","release-it":"^20.2.1","typescript":"5.9.3","@types/node":"24.0.15","@types/pngjs":"^6.0.5","@n8n/node-cli":"^0.39.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-qr_0.1.1_1784596581814_0.5095240128336918","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyberace/n8n-nodes-qr","version":"0.1.2","keywords":["n8n-community-node-package","n8n","qr-code","qrcode","automation"],"author":{"url":"https://enriqueite.com","name":"Enrique Serrano Aparicio","email":"hello@enriqueite.com"},"license":"MIT","_id":"@cyberace/n8n-nodes-qr@0.1.2","maintainers":[{"name":"enriqueite","email":"hello@enriqueite.com"}],"homepage":"https://github.com/EnriqueITE/QR-Toolkit-N8N#readme","bugs":{"url":"https://github.com/EnriqueITE/QR-Toolkit-N8N/issues"},"n8n":{"nodes":["dist/nodes/QrToolkit/QrToolkit.node.js"],"strict":true,"credentials":[],"n8nNodesApiVersion":1},"dist":{"shasum":"0819b83a965b6ce180bcea9a100b2dcbe9523a34","tarball":"https://registry.npmjs.org/@cyberace/n8n-nodes-qr/-/n8n-nodes-qr-0.1.2.tgz","fileCount":23,"integrity":"sha512-Up1ynJ9WFiGLYegSmKhCIWgk2TGKpAQWTILvqV3JF37S7NOg643qHi23Vpe/zvZ+vcnPeP8OwtjNod+37V2g/g==","signatures":[{"sig":"MEUCIQDOFZ3an/4kJOoe3Yx+HPy/ZWX4sRqbrk5h6YenlE1EcAIgDjq3WOSLSU1wrbluEJiR7qUCdIYptvx39VcKf9XOgrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyberace%2fn8n-nodes-qr@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":179369},"engines":{"node":">=22.0.0"},"funding":{"url":"https://buymeacoffee.com/enriqueite","type":"buymeacoffee"},"gitHead":"e5c654241f465e383c3d6c3b37c761073677bbc4","scripts":{"dev":"n8n-node dev","lint":"n8n-node lint","test":"vitest run","build":"n8n-node build","format":"prettier --write .","verify":"npm run format:check && npm run lint && npm run typecheck && npm test && npm run build","release":"n8n-node release","lint:fix":"n8n-node lint --fix","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test:watch":"vitest","build:watch":"tsc --watch","format:check":"prettier --check .","prepublishOnly":"npm run verify"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:18e3ed0e-6734-4e94-b1ea-e1c353b98b75"}},"repository":{"url":"git+https://github.com/EnriqueITE/QR-Toolkit-N8N.git","type":"git"},"_npmVersion":"11.6.1","description":"Generate and read PNG QR codes locally in n8n workflows.","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"jsqr":"^1.4.0","pngjs":"^7.0.0","eslint":"9.39.4","vitest":"^3.2.7","prettier":"3.8.3","release-it":"^20.2.1","typescript":"5.9.3","@types/node":"24.0.15","@types/pngjs":"^6.0.5","@n8n/node-cli":"^0.39.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-qr_0.1.2_1784598564302_0.6655526013080568","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyberace/n8n-nodes-qr","version":"0.1.3","description":"Generate and read PNG QR codes locally in n8n workflows.","license":"MIT","homepage":"https://github.com/EnriqueITE/QR-Toolkit-N8N#readme","keywords":["n8n-community-node-package","n8n","qr-code","qrcode","automation"],"author":{"name":"Enrique Serrano Aparicio","email":"hello@enriqueite.com","url":"https://enriqueite.com"},"repository":{"type":"git","url":"git+https://github.com/EnriqueITE/QR-Toolkit-N8N.git"},"bugs":{"url":"https://github.com/EnriqueITE/QR-Toolkit-N8N/issues"},"engines":{"node":">=22.0.0"},"scripts":{"build":"n8n-node build","build:watch":"tsc --watch","dev":"n8n-node dev","format":"prettier --write .","format:check":"prettier --check .","lint":"n8n-node lint","lint:fix":"n8n-node lint --fix","typecheck":"tsc --noEmit -p tsconfig.typecheck.json","test":"vitest run","test:watch":"vitest","verify":"npm run format:check && npm run lint && npm run typecheck && npm test && npm run build","release":"n8n-node release","prepublishOnly":"npm run verify"},"publishConfig":{"access":"public","provenance":true},"n8n":{"n8nNodesApiVersion":1,"strict":true,"credentials":[],"nodes":["dist/nodes/QrToolkit/QrToolkit.node.js"]},"devDependencies":{"@n8n/node-cli":"^0.39.3","@types/node":"24.0.15","@types/pngjs":"^6.0.5","eslint":"9.39.4","jsqr":"^1.4.0","pngjs":"^7.0.0","prettier":"3.8.3","release-it":"^20.2.1","typescript":"5.9.3","vitest":"^3.2.7"},"peerDependencies":{"n8n-workflow":"*"},"funding":{"type":"buymeacoffee","url":"https://buymeacoffee.com/enriqueite"},"gitHead":"a29e7e30017f8e83281efa0bb4243f40ea8c6fa7","_id":"@cyberace/n8n-nodes-qr@0.1.3","_nodeVersion":"24.18.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-PfxCF4bSoafePXFmZ+e+92VU5YmnqAHGbRv1sMXGK4pkSO6I1uofRV6KlCYmyqyh3EEn4s/Ni2ea2GQEhqxtrg==","shasum":"12728662d27bebedaf06b2178f9de2372b54bf13","tarball":"https://registry.npmjs.org/@cyberace/n8n-nodes-qr/-/n8n-nodes-qr-0.1.3.tgz","fileCount":23,"unpackedSize":179579,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cyberace%2fn8n-nodes-qr@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCmbOA7ioY6V6pm/1SxUPjmgwTpKrx8NlAYR9rENDajxgIgBqpsUjb4E+1VA6KjA7QVnmJjEbXVGIFRw1mroVX77f8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:18e3ed0e-6734-4e94-b1ea-e1c353b98b75"}},"directories":{},"maintainers":[{"name":"enriqueite","email":"hello@enriqueite.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-qr_0.1.3_1784631120348_0.9635224011761971"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-21T00:34:05.721Z","modified":"2026-07-21T10:52:00.822Z","0.1.0":"2026-07-21T00:34:06.030Z","0.1.1":"2026-07-21T01:16:21.945Z","0.1.2":"2026-07-21T01:49:24.455Z","0.1.3":"2026-07-21T10:52:00.517Z"},"bugs":{"url":"https://github.com/EnriqueITE/QR-Toolkit-N8N/issues"},"author":{"name":"Enrique Serrano Aparicio","email":"hello@enriqueite.com","url":"https://enriqueite.com"},"license":"MIT","homepage":"https://github.com/EnriqueITE/QR-Toolkit-N8N#readme","keywords":["n8n-community-node-package","n8n","qr-code","qrcode","automation"],"repository":{"type":"git","url":"git+https://github.com/EnriqueITE/QR-Toolkit-N8N.git"},"description":"Generate and read PNG QR codes locally in n8n workflows.","maintainers":[{"name":"enriqueite","email":"hello@enriqueite.com"}],"readme":"# @cyberace/n8n-nodes-qr\n\nGenerate and read QR codes directly inside n8n. QR Toolkit creates PNG, SVG, or Base64 PNG data URL output and reads QR content from PNG binary data or a Base64 PNG data URL, without contacting an external service.\n\nThe encoder, decoder, and renderers are implemented in TypeScript and ship with the node. No Python installation, system executable, canvas library, runtime dependency, API key, or external QR service is required.\n\n```mermaid\nflowchart LR\n    A[\"Incoming n8n items\"] --> B[\"QR Toolkit\"]\n    B --> C[\"Generate QR Code\"]\n    B --> D[\"Read QR Code\"]\n    C --> E[\"PNG or SVG binary\"]\n    C --> F[\"Base64 PNG data URL\"]\n    E --> G[\"Email, messaging, storage, webhook, or QR reader\"]\n    F --> H[\"JSON, HTML, API payload, or QR reader\"]\n    D --> I[\"Decoded content and QR metadata\"]\n```\n\n## Features\n\n- QR Model 2 generation for versions 1-40 with automatic version and mask selection\n- UTF-8 byte-mode encoding and L, M, Q, and H error-correction levels\n- PNG, SVG, and Base64 PNG data URL output\n- Local PNG decoding from n8n binary data or a Base64 data URL\n- Numeric, alphanumeric, byte, Latin-1, and UTF-8 ECI payload decoding\n- Reading of clean, axis-aligned QR images at 0, 90, 180, or 270 degrees, including inverted colors\n- Configurable dimensions, quiet-zone margin, and foreground/background colors\n- Native n8n binary data, metadata, item linking, expressions, and Continue On Fail support\n- Sequential item processing to keep peak memory use predictable\n- Local execution with no network, credential, environment-variable, or file-system access\n- No runtime dependencies\n\n## Requirements\n\n- n8n with community nodes enabled\n- Node.js 22 or newer when installing or developing the package manually\n\nUntil the package is verified by n8n, use it only on a self-hosted n8n instance that permits unverified community nodes. Installation availability on n8n Cloud depends on n8n verification and is not guaranteed.\n\n## Installation\n\n### Self-hosted n8n user interface\n\n1. Open **Settings > Community Nodes** in n8n.\n2. Select **Install**.\n3. Enter **@cyberace/n8n-nodes-qr** as the npm package name.\n4. Accept the community-node risk notice and complete the installation.\n5. Search the node picker for **QR Toolkit**.\n\nRestart n8n if the node does not appear immediately.\n\n### npm installation\n\n```bash\ncd ~/.n8n/nodes\nnpm install @cyberace/n8n-nodes-qr\n```\n\nFor Docker deployments, make the installation part of the image or use the Community Nodes interface with a persistent n8n data volume. This package is an n8n node plugin; it does not expose a separate JavaScript API.\n\n## Quick start\n\n### Generate\n\n1. Add **QR Toolkit** and select **Generate QR Code**.\n2. Set **Content** to text or an expression such as {{ $json.url }}.\n3. Choose an output format and execute the workflow.\n\n### Read\n\n1. Add **QR Toolkit** and select **Read QR Code**.\n2. Choose **Binary Property** for a PNG received from another node, or **Base64 PNG Data URL** for a value such as {{ $json.dataUrl }}.\n3. Execute the workflow and use {{ $json.qrContent }} downstream.\n\nImport [the generation example](examples/generate-qr-code.json) or [the generation-to-decoding round trip](examples/generate-and-read-qr-code.json).\n\n## Generate QR Code fields\n\n| Field                  | Required | Default                    | Description                                                                                      |\n| ---------------------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------ |\n| Content                | Yes      | -                          | Text to encode. Expressions resolve independently for each input item.                           |\n| Output Format          | Yes      | PNG                        | Returns a PNG binary, SVG binary, or Base64 PNG data URL.                                        |\n| Width                  | Yes      | 512                        | Output width and height in pixels, from 64 to 4096.                                              |\n| Margin                 | Yes      | 4                          | Quiet-zone width in QR modules, from 0 to 64. Four modules is recommended for reliable scanning. |\n| Error Correction Level | Yes      | M                          | L, M, Q, or H. Higher levels recover from more damage but reduce capacity.                       |\n| Dark Color             | Yes      | #000000                    | Foreground color in six-digit #RRGGBB format.                                                    |\n| Light Color            | Yes      | #FFFFFF                    | Background color in six-digit #RRGGBB format.                                                    |\n| Binary Property Name   | PNG/SVG  | data                       | n8n binary property that receives the generated file.                                            |\n| File Name              | PNG/SVG  | qr-code.png or qr-code.svg | Safe output name with the selected extension enforced.                                           |\n\n## Read QR Code fields\n\n| Field                | Required | Default             | Description                                                            |\n| -------------------- | -------- | ------------------- | ---------------------------------------------------------------------- |\n| Input Source         | Yes      | Binary Property     | Reads a PNG from n8n binary data or from a Base64 PNG data URL.        |\n| Binary Property Name | Binary   | data                | Binary property containing the PNG image.                              |\n| Data URL             | Data URL | {{ $json.dataUrl }} | A data:image/png;base64,... value. Expressions resolve per input item. |\n\n## Output\n\nFor generated PNG and SVG files, QR Toolkit preserves incoming JSON and binary properties, writes the generated file to the selected binary property, and adds qrContent, qrFormat, qrWidth, qrFileName, and ISO timestamp qrGeneratedAt.\n\nFor generated **Base64 Data URL**, it preserves incoming JSON, adds only dataUrl, and creates no binary property.\n\nReading preserves incoming JSON and binary properties and adds:\n\n- qrContent\n- qrVersion\n- qrErrorCorrectionLevel\n- qrMask\n- qrReadFrom\n- qrReadAt as an ISO 8601 timestamp\n\nEvery output includes n8n item-linking information so downstream expressions resolve against the correct source item.\n\n## Limits and validation\n\n### Generation\n\n- Content must not be empty and is limited to 10,000 JavaScript characters as a safety boundary.\n- Actual QR capacity depends on UTF-8 byte length, error correction, and QR Model 2 version.\n- Width must be an integer from 64 through 4096 pixels and provide at least one pixel per rendered module, including the margin.\n- Margin must be an integer from 0 through 64 modules.\n- Colors must be opaque six-digit hexadecimal values in #RRGGBB format.\n- Binary property names must not be empty.\n- File names are reduced to a safe base name, limited to 128 characters, and forced to the selected extension.\n\n### Reading\n\n- Input must be a PNG. JPEG, SVG, animated or interlaced PNG, camera perspective, and arbitrary-angle images are not supported.\n- PNG input is limited to 16 MiB, and the combined compressed image-data chunks are limited to 8 MiB.\n- Dimensions are limited to 4096 by 4096 pixels and 16,777,216 total pixels.\n- Supported PNG color types are grayscale, RGB, indexed, grayscale with alpha, and RGBA at supported 1, 2, 4, or 8-bit depths.\n- The reader handles clean, axis-aligned QR codes rotated in quarter turns and normal or inverted colors.\n- It verifies Reed-Solomon error-correction data but does not repair damaged codewords. Use a clean source image.\n- Numeric, alphanumeric, and byte payloads are supported. Kanji mode is not supported.\n\n## Integration examples\n\nThe default binary property is data. Change it when a workflow already uses that name.\n\n### Gmail\n\nGenerate PNG or SVG output and attach binary data. To read a PNG attachment, download it and pass its binary property to **Read QR Code**.\n\n### Telegram\n\nGenerate PNG output and send binary data as a document or photo. For an incoming downloaded PNG, point **Read QR Code** at Telegram's binary output property.\n\n### Google Drive\n\nUpload generated binary data. To decode a stored QR, download the file as binary first, then read that property.\n\n### S3\n\nUpload generated binary data; {{ $json.qrFileName }} can be the object key. To read an existing PNG, download it as binary and pass its property name to the reader.\n\n### Respond to Webhook\n\nReturn generated PNG or SVG binary data directly, or a generated Base64 data URL in JSON. After reading a QR, return {{ $json.qrContent }} and the reader metadata as JSON.\n\n## Privacy and security\n\nGeneration and reading happen in the n8n Node.js process. QR Toolkit does not make network requests, read credentials or environment variables, access the file system, start commands, or send telemetry. The SVG renderer draws only generated geometry; it never interpolates encoded content into SVG markup.\n\nInput content and images can still be retained in n8n execution data or transmitted by downstream nodes. Apply your normal n8n data-retention, access-control, and workflow-security policies.\n\n## Development\n\n```bash\nnpm ci\nnpm run dev\n```\n\nBefore submitting a change, run:\n\n```bash\nnpm run format:check\nnpm run lint\nnpm run typecheck\nnpm test\nnpm run build\nnpm run verify\nnpm pack --dry-run\nnpm audit --audit-level=high\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for contribution requirements.\n\n## Publishing\n\nReleases are published from a vX.Y.Z Git tag by GitHub Actions using npm Trusted Publishing and provenance. No release is performed from a local checkout.\n\n## License\n\nMIT. See [LICENSE.md](LICENSE.md).\n\nDeveloped by [Enrique Serrano Aparicio](https://enriqueite.com/) and maintained by [CYBERACE](https://cyberace.tech/).\n\n> QR Toolkit is free and open source. If this node saves you time, you can support its development on [Buy Me a Coffee](https://buymeacoffee.com/enriqueite).\n","readmeFilename":"README.md"}