An open API service indexing awesome lists of open source software.

https://github.com/devmehq/react-qr-code

A QRCode React Component ( SVG / Canvas )
https://github.com/devmehq/react-qr-code

qr-code react react-qr-code react-qr-code-generator

Last synced: 9 days ago
JSON representation

A QRCode React Component ( SVG / Canvas )

Awesome Lists containing this project

README

          

# @devmehq/react-qr-code

๐ŸŽฏ Simple & Advanced React component to generate [QR codes](http://en.wikipedia.org/wiki/QR_code) with custom styling, multiple render formats, and image embedding support.

[![NPM version](https://badgen.net/npm/v/@devmehq/react-qr-code)](https://npm.im/@devmehq/react-qr-code)
[![Build Status](https://github.com/devmehq/react-qr-code/workflows/CI/badge.svg)](https://github.com/devmehq/react-qr-code/actions)
[![Downloads](https://img.shields.io/npm/dm/@devmehq/react-qr-code.svg)](https://www.npmjs.com/package/@devmehq/react-qr-code)
[![Bundle Size](https://badgen.net/bundlephobia/minzip/@devmehq/react-qr-code)](https://bundlephobia.com/package/@devmehq/react-qr-code)
[![License](https://badgen.net/npm/license/@devmehq/react-qr-code)](https://github.com/devmehq/react-qr-code/blob/master/LICENSE.md)
[![UNPKG](https://img.shields.io/badge/UNPKG-OK-179BD7.svg)](https://unpkg.com/browse/@devmehq/react-qr-code@latest/)

[![Edit react-qr-code-demo](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/react-qr-code-demo-ccho5l?fontsize=14&hidenavigation=1&theme=dark)

## โœจ Features

- ๐ŸŽจ **Customizable**: Colors, sizes, margins, and styles
- ๐Ÿ–ผ๏ธ **Multiple Formats**: Render as SVG or Canvas
- ๐Ÿ“ฑ **Responsive**: Scales perfectly on all devices
- ๐Ÿž๏ธ **Image Embedding**: Add logos or images to QR codes
- ๐Ÿ›ก๏ธ **Error Correction**: Four levels (L, M, Q, H)
- ๐Ÿ“ฆ **Lightweight**: Zero dependencies, small bundle size
- ๐Ÿ”ง **TypeScript**: Full TypeScript support
- โšก **Performance**: Optimized rendering with React hooks

## ๐Ÿ“ฆ Installation

```bash
# Using npm
npm install @devmehq/react-qr-code

# Using yarn
yarn add @devmehq/react-qr-code

# Using pnpm
pnpm add @devmehq/react-qr-code
```

## ๐Ÿš€ Quick Start

### Basic Usage

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function App() {
return
}
```

### With Custom Styling

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function StyledQRCode() {
return (

)
}
```

### Canvas Rendering

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function CanvasQRCode() {
return (

)
}
```

### With Logo/Image

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function QRCodeWithLogo() {
return (

)
}
```

## ๐Ÿ“– API Reference

### ReactQrCode Props

| Prop | Type | Default | Description |
| ------------ | -------------------------- | ------------ | --------------------------------------- |
| `value` | `string` | **Required** | The value to encode in the QR code |
| `renderAs` | `'svg' \| 'canvas'` | `'svg'` | Render format (SVG or Canvas) |
| `size` | `number` | `256` | Size of the QR code in pixels |
| `bgColor` | `string` | `'#ffffff'` | Background color (CSS color value) |
| `fgColor` | `string` | `'#000000'` | Foreground color (CSS color value) |
| `level` | `'L' \| 'M' \| 'Q' \| 'H'` | `'L'` | Error correction level |
| `marginSize` | `number` | `0` | Margin around the QR code in pixels |
| `style` | `CSSProperties` | `undefined` | React style object |
| `className` | `string` | `undefined` | CSS class name |
| `title` | `string` | `undefined` | Title for SVG accessibility |
| `id` | `string` | `undefined` | HTML id attribute |
| `images` | `ReactQrCodeImageProps[]` | `undefined` | Array of images to embed in the QR code |

### ReactQrCodeImageProps

| Property | Type | Default | Description |
| ---------- | --------- | -------------- | -------------------------------------------- |
| `src` | `string` | **Required** | Image source URL |
| `x` | `number` | Auto-centered | X position of the image |
| `y` | `number` | Auto-centered | Y position of the image |
| `height` | `number` | 10% of QR size | Height of the image |
| `width` | `number` | 10% of QR size | Width of the image |
| `excavate` | `boolean` | `false` | Whether to clear QR modules behind the image |

### Error Correction Levels

| Level | Error Correction | Data Capacity |
| ----- | ---------------- | ------------- |
| `L` | ~7% | High |
| `M` | ~15% | Medium |
| `Q` | ~25% | Medium-Low |
| `H` | ~30% | Low |

## ๐ŸŽจ Styling & Customization

### Responsive Design

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function ResponsiveQRCode() {
return (




)
}
```

### Dark Mode Support

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'

function DarkModeQRCode({ isDarkMode }) {
return (

)
}
```

### Custom CSS Classes

```tsx
import React from 'react'
import { ReactQrCode } from '@devmehq/react-qr-code'
import './styles.css'

function CustomStyledQRCode() {
return (

)
}
```

```css
/* styles.css */
.qr-code-custom {
border-radius: 16px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 16px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
```

**Note:** When using `renderAs="canvas"` on high-density displays, the canvas is scaled for pixel-perfect rendering. Custom styles are merged with internal scaling styles.

## ๐Ÿ’ก Use Cases

### WiFi Password Sharing

```tsx
function WiFiQRCode({ ssid, password, security = 'WPA' }) {
const wifiString = `WIFI:T:${security};S:${ssid};P:${password};;`

return
}
```

### Contact Information (vCard)

```tsx
function ContactQRCode({ name, phone, email }) {
const vCard = `BEGIN:VCARD
VERSION:3.0
FN:${name}
TEL:${phone}
EMAIL:${email}
END:VCARD`

return
}
```

### Two-Factor Authentication

```tsx
function TwoFactorQRCode({ secret, issuer, accountName }) {
const otpauth = `otpauth://totp/${issuer}:${accountName}?secret=${secret}&issuer=${issuer}`

return (

)
}
```

### Payment Links

```tsx
function PaymentQRCode({ amount, recipient, currency = 'USD' }) {
const paymentLink = `https://pay.example.com/?to=${recipient}&amount=${amount}&currency=${currency}`

return
}
```

qrcode-demo

## ๐Ÿงช Testing

```bash
# Run tests
yarn test

# Run tests in watch mode
yarn test:watch

# Generate coverage report
yarn test:coverage
```

## ๐Ÿ”ง Development

```bash
# Install dependencies
yarn install

# Build the library
yarn build

# Run linting
yarn lint-js

# Format code
yarn prettier
```

## ๐Ÿค Contributing

Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## ๐Ÿ“ Roadmap

- [ ] Download QR code as image (PNG/JPEG/SVG)
- [ ] Share QR code functionality
- [ ] Server-side rendering (SSR) support
- [ ] Corner dot customization
- [ ] Gradient color support
- [ ] Custom shape modules (dots, rounded, etc.)
- [ ] Animation support
- [ ] Batch QR code generation
- [ ] QR code scanner component

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details.

## ๐Ÿ™ Acknowledgments

- QR Code is a registered trademark of DENSO WAVE INCORPORATED
- Built with โค๏ธ by the [DEV.ME](https://dev.me) team
- Inspired by the QR code specification and community feedback

## ๐Ÿ“ง Support

For support, email support@dev.me or open an issue on [GitHub](https://github.com/devmehq/react-qr-code/issues).

---


Made with โค๏ธ by DEV.ME