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
| Prop | Type | Default | Description |
|---|---|---|---|
value | string | required | URL or text to encode |
size | number | 128 | Size in pixels |
scale | number | 1 | Scale multiplier |
fgColor | ColorConfig | #000000 | QR code color |
bgColor | ColorConfig | #ffffff | Background color |
eyeColor | ColorConfig | fgColor | Corner marker color |
dotColor | ColorConfig | fgColor | Color of the dot inside each corner eye |
bodyPattern | BodyPattern | 'circle' | Data dot pattern |
cornerEyePattern | CornerEyePattern | 'gear' | Corner marker pattern |
cornerEyeDotPattern | CornerEyeDotPattern | 'circle' | Corner dot pattern |
hideLogo | boolean | false | Hide the logo. No logo is drawn unless logo is set |
logo | string | Default | Logo URL |
templateId | string | 'default' | Template ID |
customTemplate | TemplateDefinition | — | Custom template |
level | ErrorLevel | 'Q' | Error correction |
autoLevel | boolean | false | Raise level to H when the logo covers more than 7% of the code (AUTO_LEVEL_LOGO_COVERAGE) |
margin | number | 0 | Margin in modules |
imageSettings | ImageSettings | — | Logo settings |
eyeColors | EyeColors | — | Per-eye outer / inner colors for topLeft, topRight and bottomLeft; each overrides eyeColor / dotColor |
moduleScale | number | 1 | Data module size, 0.5 to 1. Each pattern stops at the smallest size that still scans (MODULE_SCALE_FLOOR) |
frame | QRFrame | — | 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
): voidTemplate Functions
getTemplate
Get specific template.
getTemplate(templateId: string): TemplateDefinition | undefinedgetAllTemplates
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: booleanTypes
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