Skip to content
UseQR
ESC

↑↓ MOVE↵ OPEN48 PLACES

Developers & agents

Generate a QR code in JavaScript and React

For a QR code in a browser or React app, either point an <img> at the keyless API — one line, no dependency — or use a client-side library such as qrcode when the payload must not leave the device. Use the API for public URLs, local generation for credentials.

View as MarkdownPaste this page into any AI assistant — it is plain, portable Markdown.

The one-line version

<img
  src={`https://useqr.app/api/v1/qr?data=${encodeURIComponent(url)}&size=512`}
  width={256}
  height={256}
  alt="QR code linking to the download page"
/>

No dependency, no key, and the response is cacheable for a year so repeat renders cost nothing. encodeURIComponent is not optional — a URL with its own query string will break without it.

When to generate locally instead

Anything that is a credential or personal data — a WiFi password, a contact record, a payment identifier — should never be sent to a server just to draw an image. Use a client-side library:

npm install qrcode
import QRCode from "qrcode";

const dataUrl = await QRCode.toDataURL("WIFI:T:WPA;S:CafeGuest;P:espresso;;", {
  errorCorrectionLevel: "M",
  margin: 4,            // the four-module quiet zone
  width: 512,
});

margin: 4 matters. Several libraries default to a smaller margin, and an inadequate quiet zone is the single most common cause of codes that will not scan.

SVG in React without a component library

import QRCode from "qrcode";
import { useEffect, useState } from "react";

export function Qr({ value }) {
  const [svg, setSvg] = useState("");
  useEffect(() => {
    QRCode.toString(value, { type: "svg", margin: 4 }).then(setSvg);
  }, [value]);
  return <div aria-label="QR code" dangerouslySetInnerHTML={{ __html: svg }} />;
}

Dark mode

A QR code with a transparent background inverts on a dark page and becomes unreadable on many scanners. Always give it an explicit light background:

.qr { background: #fff; padding: 12px; border-radius: 12px; }

Accessibility

alt text should describe the destination, not the mechanism. A screen-reader user gets nothing from a QR code, so always render a real anchor alongside:

<a href={url}>{url}</a>

Verify styled codes

If you are colouring or restyling, decode the result before shipping:

const res = await fetch(
  `https://useqr.app/api/v1/verify?data=${encodeURIComponent(url)}&color=cccccc`
).then((r) => r.json());
// → whether it decoded, and a fix if not

FAQ

What is the simplest way to show a QR code in React?

Point an img element at the keyless API with the payload URL-encoded. No package to install and the response caches for a year.

When should I generate QR codes client-side instead?

Whenever the payload is a credential or personal data — WiFi passwords, contact records, payment identifiers. Those should never be sent to a server just to render an image.

Why does my JavaScript-generated QR code not scan?

Most often the quiet zone. Set margin to 4 modules; several libraries default to less, and an inadequate margin stops the scanner finding the code at all.

How do I handle dark mode?

Give the code an explicit light background. A transparent QR code on a dark page renders as an inverted code, which many scanners will not read.

Try it — free, no signup

  • A free QR code API with no keyUseQR's REST API needs no signup, no API key and no SDK. GET /api/v1/qr?data=hello returns a PNG. The shortest form is /q/hello.png, which drops straight…