QRdx

Library API reference

Every component, function and type exported by the qrdx React library. For HTTP endpoints, see the REST API.

Complete reference for all qrdx components, functions and types.

Components

QRCode

Main component for rendering QR codes.

import { QRCode } from 'qrdx';

<QRCode
  value="https://example.com"
  size={256}
  fgColor="#000000"
  bgColor="#ffffff"
/>

Props

PropTypeDefaultDescription
valuestringrequiredURL or text to encode
sizenumber128Size in pixels
scalenumber1Scale multiplier
fgColorColorConfig#000000QR code color
bgColorColorConfig#ffffffBackground color
eyeColorColorConfigfgColorCorner marker color
dotColorColorConfigfgColorColor of the dot inside each corner eye
bodyPatternBodyPattern'circle'Data dot pattern
cornerEyePatternCornerEyePattern'gear'Corner marker pattern
cornerEyeDotPatternCornerEyeDotPattern'circle'Corner dot pattern
hideLogobooleanfalseHide the logo. No logo is drawn unless logo is set
logostringDefaultLogo URL
templateIdstring'default'Template ID
customTemplateTemplateDefinition—Custom template
levelErrorLevel'Q'Error correction
autoLevelbooleanfalseRaise level to H when the logo covers more than 7% of the code (AUTO_LEVEL_LOGO_COVERAGE)
marginnumber0Margin in modules
imageSettingsImageSettings—Logo settings
eyeColorsEyeColors—Per-eye outer / inner colors for topLeft, topRight and bottomLeft; each overrides eyeColor / dotColor
moduleScalenumber1Data module size, 0.5 to 1. Each pattern stops at the smallest size that still scans (MODULE_SCALE_FLOOR)
frameQRFrame—Call-to-action frame; see Frames & print

All 23 body patterns, 18 eyes, 24 eye centres and 20 frames are shown live in Shapes, eyes and frames.

QRCodeCanvas

Canvas-based rendering.

import { QRCodeCanvas } from 'qrdx';

<QRCodeCanvas
  value="https://example.com"
  size={512}
  fgColor="#000000"
/>

QRCodeSVG

SVG-based rendering.

import { QRCodeSVG } from 'qrdx';

<QRCodeSVG
  value="https://example.com"
  size={512}
/>

Download Functions

downloadQRCode

Download QR codes in multiple formats.

downloadQRCode(
  qrProps: QRProps,
  options: {
    format: 'png' | 'jpg' | 'svg' | 'pdf';
    size: { width: number; height: number };
    filename?: string;
  }
): Promise<void>

getQRCodeDataUrl

Get as data URL.

getQRCodeDataUrl(
  qrProps: QRProps,
  format: DownloadFormat,
  size: DownloadSize
): Promise<string>

copyQRCodeToClipboard

Copy to clipboard.

copyQRCodeToClipboard(
  qrProps: QRProps,
  size?: DownloadSize
): Promise<void>

getSVGString

Get SVG markup.

getSVGString(qrProps: QRProps): Promise<string>

Detection Functions

handleImageLoad

Detect QR codes from images.

handleImageLoad(
  imgElement: HTMLImageElement,
  size: number,
  returnFullData?: boolean
): Promise<string | any>

downloadImageWithBoundingBox

Debug with bounding boxes.

downloadImageWithBoundingBox(
  imgElement: HTMLImageElement,
  boundingBox: { x: number; y: number }[],
  filename: string
): void

Template Functions

getTemplate

Get specific template.

getTemplate(templateId: string): TemplateDefinition | undefined

getAllTemplates

Get all templates.

getAllTemplates(): TemplateDefinition[]

getTemplateIds

Get template IDs.

getTemplateIds(): string[]

Utility Functions

Color & Contrast

getSolidColor(colorConfig: ColorConfig, fallback?: string): string
getContrastRatio(color1: string, color2: string): number
getContrastLevel(ratio: number): ContrastLevel
getLuminance(r: number, g: number, b: number): number
hexToRgb(hex: string): { r: number; g: number; b: number }

Validation

validateSize(width: number, height: number): {
  isValid: boolean;
  error?: string;
}

Feature Detection

SUPPORTS_PATH2D: boolean

Types

Core Types

type QRProps = {
  value: string;
  size?: number;
  level?: ErrorLevel;
  bgColor?: ColorConfig;
  fgColor?: ColorConfig;
  margin?: number;
  imageSettings?: ImageSettings;
  // ...
};

type ColorConfig =
  | string
  | { type: 'solid'; color: string }
  | LinearGradient
  | RadialGradient;

type ErrorLevel = 'L' | 'M' | 'Q' | 'H';

Pattern Types

// The arrays BODY_PATTERN, CORNER_EYE_PATTERNS, CORNER_EYE_DOT_PATTERNS and
// FRAME_STYLES (and their zod schemas) are exported from 'qrdx/types'.

type BodyPattern =
  | 'circle' | 'circle-large' | 'square' | 'diamond' | 'circle-mixed'
  | 'pacman' | 'rounded' | 'small-square' | 'vertical-line'
  | 'horizontal-line' | 'liquid' | 'liquid-horizontal' | 'liquid-vertical'
  | 'classy' | 'classy-rounded' | 'leaf' | 'plus' | 'hexagon' | 'star'
  | 'heart' | 'random-dots' | 'mosaic' | 'octagon';

type CornerEyePattern =
  | 'square' | 'rounded' | 'gear' | 'circle' | 'diya' | 'extra-rounded'
  | 'message' | 'pointy' | 'leaf' | 'drop' | 'octagon' | 'bevel'
  | 'squircle' | 'cushion' | 'shield' | 'petal' | 'leaf-reverse';

type CornerEyeDotPattern =
  | 'square' | 'rounded' | 'circle' | 'message' | 'message-reverse'
  | 'diya' | 'diya-reverse' | 'rounded-triangle' | 'leaf' | 'drop' | 'plus'
  | 'cross-rounded' | 'hexagon' | 'octagon' | 'flower' | 'heart'
  | 'squircle' | 'dots' | 'extra-rounded' | 'leaf-reverse' | 'drop-reverse';

// Retired (deprecated) values still render for saved designs but are not
// offered: RETIRED_CORNER_EYE_PATTERNS, RETIRED_CORNER_EYE_DOT_PATTERNS.

type EyeColors = {
  topLeft?: { outer?: ColorConfig; inner?: ColorConfig };
  topRight?: { outer?: ColorConfig; inner?: ColorConfig };
  bottomLeft?: { outer?: ColorConfig; inner?: ColorConfig };
};

type QRFrame = {
  style: FrameStyle; // 20 styles, see FRAME_STYLES
  text?: string; // up to 24 characters, default "Scan me"
  color?: string;
  textColor?: string;
  secondaryText?: string; // banner-top-bottom, circle, menu-card
  secondaryColor?: string; // gradient-border end color
  fontScale?: number; // 0.5 to 1.5
};

Download Types

type DownloadFormat = 'png' | 'jpg' | 'svg' | 'pdf';

type DownloadSize = {
  width: number;
  height: number;
};

const PRESET_SIZES: Record<string, DownloadSize> = {
  small: { width: 200, height: 200 },
  medium: { width: 400, height: 400 },
  large: { width: 800, height: 800 },
  xlarge: { width: 1200, height: 1200 },
  '2xl': { width: 1600, height: 1600 },
  '3xl': { width: 2000, height: 2000 },
};

Gradient Types

type LinearGradient = {
  type: 'linear';
  stops: GradientStop[];
  x1: number;
  y1: number;
  x2: number;
  y2: number;
};

type RadialGradient = {
  type: 'radial';
  stops: GradientStop[];
  cx: number;
  cy: number;
  r: number;
};

type GradientStop = {
  offset: number;
  color: string;
};

Image Settings

type ImageSettings = {
  src: string;
  height: number;
  width: number;
  excavate?: boolean;
  x?: number;
  y?: number;
  /** Extra clear space around the logo when excavating, in pixels */
  padding?: number;
  opacity?: number;
};

Error Correction Levels

const ERROR_LEVELS = {
  L: 'Low (~7%)',
  M: 'Medium (~15%)',
  Q: 'Quartile (~25%)',
  H: 'High (~30%)',
} as const;

Error Handling

Wrap async functions in try-catch:

try {
  await downloadQRCode(props, options);
} catch (error) {
  console.error('Failed:', error);
}

Common errors:

  • Invalid image URLs
  • Network failures
  • Invalid size parameters
  • Canvas context unavailable

Browser Support

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+

Server Support

Works in Node.js environments:

  • Next.js
  • Remix
  • Express.js
  • Other Node.js frameworks

Some features require browser APIs:

  • Canvas operations
  • Clipboard API
  • File API

Last updated on

On this page