mini qr

Create & scan cute qr codes easily πŸ‘Ύ

1206
156
Vue

Mini QR

License: GPL v3

An app to create beautiful QR codes and scan various QR code types.

Features

  • βœ… Accessible: minimally WCAG A compliant
  • 🎨 Customizable colors and styles
  • πŸ–ΌοΈ Export to PNG, JPG & SVG
  • πŸ“‹ Copy to clipboard
  • πŸŒ“ Light/dark/system-preference mode toggle
  • 🎲 Randomize style button
  • 🌐 Available in 30+ languages
  • πŸ’Ύ Save & Load QR Code config
  • πŸ–ΌοΈ Upload custom image for logo
  • 🎭 Presets: Pre-crafted QR code styles
  • πŸ–ŒοΈ Frame customization: Add text labels and style the frame around your QR code
  • πŸ›‘οΈ Error correction level: affects the size of the QR code and logo within. Use lower correction levels for bigger pieces of data to ensure that it can be read.
  • πŸ“± QR Code Scanner: Scan QR codes using your camera or by uploading images, with intelligent detection for URLs, emails, phone numbers, WiFi credentials, and more
  • πŸ“¦ Batch data export: Import a CSV file with multiple data strings and export QR codes for them all at once.
  • πŸ“² PWA Support: Install MiniQR as a desktop or mobile app
  • πŸ“ Data templates: Support for various data types including text, URLs, emails, phone numbers, SMS, WiFi credentials, vCards, locations, and calendar events

Installation as PWA

MiniQR can also be installed as a Progressive Web App (PWA) on your device
  1. Desktop (Chrome/Edge):

    • Visit mini-qr.vercel.app
    • Click the install icon (βž•) in the address bar
    • Click β€œInstall” in the prompt
  2. Mobile (Android):

    • Visit mini-qr.vercel.app
    • Tap the β€œAdd to Home Screen” option in your browser menu
    • Tap β€œInstall” or β€œAdd”
  3. iOS (Safari):

    • Visit mini-qr.vercel.app
    • Tap the Share button
    • Scroll down and tap β€œAdd to Home Screen”
    • Tap β€œAdd”

Once installed, MiniQR will work offline and provide a native app-like experience.

Demo

Try it out here ✨

Frame text included in batch export (added in v0.17.0)

https://github.com/user-attachments/assets/c6db8fd5-ec36-43be-b6e3-a42e1b7dc3cb

Data templates (added in v0.16.0)

https://github.com/user-attachments/assets/863f9330-2645-4d23-88aa-04f5f5beaa67

Basic frame settings (added in v0.15.0)

https://github.com/user-attachments/assets/e160d60d-3c7f-4bbb-908c-efd11fec20e8

Scanning QR code (added in v0.13.0)

https://github.com/user-attachments/assets/5ad58b35-0a16-43a4-839a-e2197bfc273a

Batch data export (added in v0.9.0)

https://github.com/user-attachments/assets/fef17e6a-c226-4136-9501-8d3e951671e0

MVP - presets, languages, dark/light mode (v0.3.0)

https://github.com/lyqht/mini-qr/assets/35736525/991b2d7e-f168-4354-9091-1678d2c1bddb

Self-hosting with Docker πŸ‹

Mini-QR can easily be self-hosted using Docker. We provide a docker-compose.yml file and a production-ready multi-stage Dockerfile.

Quick Start (using prebuilt image)

wget https://github.com/lyqht/mini-qr/raw/main/docker-compose.yml

docker compose up -d

This will pull the latest production image from GitHub Container Registry and start the app at http://localhost:8081.

Build and run locally (for development or custom builds)

docker compose up -d --build

Or build and run manually:

docker build -t mini-qr .
docker run -d -p 8081:8080 mini-qr

Customization

Environment Variables

Variable Description Default
BASE_PATH Base path for deployment /
VITE_HIDE_CREDITS Set to "true" to hide credits in the footer "false"
VITE_DEFAULT_PRESET Name of the default QR code preset to load (e.g., "lyqht") ""
VITE_DEFAULT_DATA_TO_ENCODE Default data to encode when the app first loads ""
VITE_QR_CODE_PRESETS JSON string defining custom QR code presets. E.g., '[{"name":"c1","data":"hi"}]' "[]"
VITE_FRAME_PRESET Name of the default frame preset to load (e.g., "default") ""
VITE_FRAME_PRESETS JSON string defining custom frame presets. E.g., '[{"name":"fA","text":"QR"}]' "[]"
VITE_DISABLE_LOCAL_STORAGE Set to "true" to disable loading saved settings from local storage on startup "false"

Docker configuration

  • You can edit nginx.conf or mount your own static files by uncommenting the volumes section in docker-compose.yml.
  • The production image uses Nginx for optimal static file serving.
  • The .dockerignore file is included for smaller, faster builds.
  • Set BASE_PATH=/your-path to deploy the app under a subdirectory (e.g., for hosting at domain.com/your-path).
  • If you want to have a default preset to be fixed, you should set VITE_DISABLE_LOCAL_STORAGE=true

Examples

Deploy at root path (default):

docker compose up -d

Deploy at subdirectory /mini-qr:

BASE_PATH=/mini-qr docker compose up -d

For custom builds with specific BASE_PATH:

docker build --build-arg BASE_PATH=/mini-qr -t mini-qr .
docker run -d -p 8081:8080 mini-qr

Contributing

All Contributors Crowdin

Translations and bug fixes are welcome!

[!NOTE]
For other issues, please create an issue/ raise it on the discussion board before working on them, as they may be rejected if they are not aligned with @lyqht’s goals for this project.

See CONTRIBUTING.md for more details.

Contributors

Thank you for everyone here for taking their time out to improve MiniQR 🧑

tenekev
tenekev

πŸ’» πŸ“–
tecking
tecking

🌍
Patipat Chewprecha
Patipat Chewprecha

🌍 πŸ’» πŸ“–
Rahul Somasundaram
Rahul Somasundaram

πŸ’»
Johan EkstrΓΆm
Johan EkstrΓΆm

πŸ’»
Zain Fathoni
Zain Fathoni

🎨
Francesco
Francesco

🌍
Klemens Graf
Klemens Graf

πŸ’»
ζž—ιƒ½
ζž—ιƒ½

πŸ’» 🌍
seals187
seals187

πŸ‘€
olvier
olvier

πŸ‘€
Add your contributions