A modern Android scanner for barcodes, QR codes, and text.
Scan codes, look up products, and extract text from images and PDFs — on-device by default, with optional AI for the hard cases.
- Barcode & QR scanning — real-time scanning with CameraX + ML Kit, with smart actions for each result: open URL, connect to Wi-Fi, save contact, add calendar event, send SMS/email, dial, or copy.
- Product lookup — scan a retail barcode (EAN/UPC) or ISBN to fetch product info from Open Food Facts, Open Beauty Facts, Open Pet Food Facts, Google Books, Open Library, and OpenFDA.
- Text recognition (OCR) — on-device text extraction with ML Kit. Works fully offline.
- AI text extraction — optional cloud extraction for complex layouts and handwriting. Bring your own key across many providers (see below).
- Translation — translate scanned text into other languages.
- Document scanner & PDF — capture multi-page documents and import PDFs to extract text.
AI extraction is optional and provider-agnostic. Supported out of the box:
Gemini · OpenAI · Claude · OpenRouter · Groq · Cerebras · Cloudflare Workers AI · NVIDIA NIM · Hugging Face · Mistral OCR · Custom (any OpenAI-compatible endpoint)
Keys are stored on-device and sent in request headers, never in URLs or logs.
| Layer | Choices |
|---|---|
| Language & UI | Kotlin, Jetpack Compose, Material 3 (Expressive) |
| Architecture | MVVM, Hilt |
| Vision | CameraX, ML Kit (barcode, text recognition, document scanner) |
| Networking | Retrofit, OkHttp, Kotlin Coroutines & Flow |
| Other | Coil, DataStore |
git clone https://github.com/Azyrn/Scanly.git
cd Scanly
# Optional: add an AI key for cloud extraction
echo "GEMINI_API_KEY=your_key_here" >> local.properties
./gradlew assembleDebugRequires the Android SDK. Minimum Android 7.0 (API 24), targets API 36.
Apache License 2.0 — see LICENSE.