An app to create beautiful QR codes and scan various QR code types.
- β 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
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.
Try it out here β¨
Frame text included in batch export (added in v0.17.0)
BatchExportWithFrameText.mp4
Data templates (added in v0.16.0)
DataToEncodeModal.mp4
Basic frame settings (added in v0.15.0)
Frame.settings.mp4
Scanning QR code (added in v0.13.0)
Demo-QRScan.mp4
Batch data export (added in v0.9.0)
batch_data_export.mp4
MVP - presets, languages, dark/light mode (v0.3.0)
MiniQR-demo.mp4
Mini-QR can easily be self-hosted using Docker. We provide a docker-compose.yml file and a production-ready multi-stage Dockerfile.
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.
docker compose up -d --build
Or build and run manually:
docker build -t mini-qr .
docker run -d -p 8081:8080 mini-qr
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" |
- 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
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
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.
Thank you for everyone here for taking their time out to improve MiniQR π§‘