✦ Open Source · MIT / Apache-2.0

The QR Code Dashboard
built for production

Encode, decode, and batch-generate QR codes through a fast Rust + Axum REST API paired with a beautiful dark/light dashboard. Zero Node.js required.

View on GitHub Download Binary
localhost:8080 — QR Tools Dashboard
Text / URL
Format
Error Correction
Foreground
Background
Rust
Powered by memory safety
Axum 0.8
Latest async HTTP framework
<50MB
Docker image size
6
API endpoints
MIT
Open source license

✦ What you get

Everything you need
for QR code workflows

A full-stack Rust application — no separate frontend build step, no Node.js, no npm. One binary, one command.

QR Encode (PNG & SVG)
Generate QR codes in PNG or vector SVG. Customize module size, quiet zone, foreground and background colors via CSS color strings.
🔍
QR Decode
Decode QR codes from uploaded images (PNG, JPEG, WEBP, GIF, BMP) or from base64 JSON payloads. Powered by the rxing multi-format scanner.
📦
Batch Encode
Encode up to 50 items in a single request. Download all generated QR codes individually straight from the dashboard.
🎨
Dark & Light Mode
The dashboard ships with a polished dark theme (default) and a full light mode — toggled with one click and persisted to localStorage.
Operation History
In-memory LRU cache (moka) records the last 500 encode / decode operations. Browse, preview thumbnails, and clear from the UI.
🛡️
Production Hardened
Request size limits, 30 s timeout, Gzip/Brotli compression, configurable CORS, structured JSON logging, health + readiness probes.
🐳
Docker Ready
Multi-stage Dockerfile produces a minimal Debian-slim image under 50 MB. docker-compose.yml included with resource limits and healthchecks.
🚀
GitHub Actions CI/CD
Automated lint, test, cargo-audit security scan, Docker build on every push. Release workflow cross-compiles binaries for Linux, macOS, and Windows.
⚙️
12-Factor Config
All settings via environment variables — HOST, PORT, LOG_LEVEL, JSON_LOGGING, CORS_ORIGINS, MAX_UPLOAD_BYTES, HISTORY_CAPACITY.

Clean JSON API,
ready to integrate

All endpoints return JSON. No authentication required by default — add your own middleware as needed.

POST
/api/encode
Generate PNG or SVG QR code from text/URL
POST
/api/decode/json
Decode QR from base64-encoded image in JSON body
POST
/api/decode/upload
Decode QR from multipart image file upload
GET
/api/history
List last 100 encode / decode operations
DEL
/api/history
Clear all cached history entries
GET
/api/health/ready
Readiness probe with ops counter & cache stats
// POST /api/encode { "data": "https://example.com", "format": "png", // or "svg" "ec_level": "M", // L / M / Q / H "module_size": 10, "quiet_zone": 4, "foreground": "#000000", "background": "#ffffff" } // Response { "id": "3fa85f64-...", "mime_type": "image/png", "data": "iVBORw0KGgo...", // base64 "width": 290, "height": 290, "timestamp": "2026-03-10T..." }

✦ Run it

Up in 30 seconds

Choose your preferred method — from source or Docker.

Rust 1.82+ Docker optional Linux · macOS · Windows MIT / Apache-2.0
From source
# Clone & run git clone https://github.com/vedLinuxian/qrtools-rust.git cd qrtools-rust cp .env.example .env cargo run --release # Open http://localhost:8080
Docker
docker compose up -d # Dashboard → http://localhost:8080
Quick API test
curl -s -X POST http://localhost:8080/api/encode \ -H 'Content-Type: application/json' \ -d '{"data":"Hello QR Tools!"}' \ | jq .mime_type

Ready to encode your first QR?

Star the project on GitHub, clone it, and have the dashboard running in under a minute.

Star on GitHub Download Binary