An app to create beautiful QR codes and scan various QR code types.
Review of 'MiniQR' that makes it easy to create good-looking QR codes - Gigazine, an Osaka based tech news website, one of the top 25 news sites by TIME.com
- β 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 MiniQR's website
- Click the install icon (β) in the address bar
- Click "Install" in the prompt
-
Mobile (Android):
- Visit MiniQR's website
- Tap the "Add to Home Screen" option in your browser menu
- Tap "Install" or "Add"
-
iOS (Safari):
- Visit MiniQR's website
- 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.
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.
To 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
You can also simply compile the application directly using NPM and Vite like follows:
git clone https://github.com/lyqht/mini-qr.git
cd mini-qr
npm install
npm run build
From there, the application will be build into dist
folder and this folder can simply be hosted from any kind of web server.
An example using PHP's built-in web server:
cd dist
php -S localhost:8080
An example of a self-hosted website with a modified MiniQR app with specific language and preset: https://qrcode.outils.restosducoeur.org/
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 π§‘