* Enhance email data template for cc/bcc * test(dataEncoding.test.ts): add test case for handling multiple emails in CC/BCC fields correctly in generateEmailData function test(dataEncoding.test.ts): add test case for identifying email links with multiple CC/BCC addresses in detectDataType function * Docs: Add @olvier as a contributor
Mini QR
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
-
Desktop (Chrome/Edge):
- Visit mini-qr.vercel.app
- Click the install icon (➕) in the address bar
- Click "Install" in the prompt
-
Mobile (Android):
- Visit mini-qr.vercel.app
- Tap the "Add to Home Screen" option in your browser menu
- Tap "Install" or "Add"
-
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 thevolumes
section indocker-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 atdomain.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
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 💻 📖 |
tecking 🌍 |
Patipat Chewprecha 🌍 💻 📖 |
Rahul Somasundaram 💻 |
Johan Ekström 💻 |
Zain Fathoni 🎨 |
Francesco 🌍 |
Klemens Graf 💻 |
林都 💻 🌍 |
seals187 👀 |
olvier 👀 |
|
|