A privacy-first, free and open-source document scanner.
Scan documents with your camera, auto-crop and dewarp them, and export a PDF — all on-device. No accounts, no cloud, no tracking.
Grab app-arm64-v8a-release.apk from the release's assets — that's the
right build for virtually every phone from the last ~7 years. Prefer a
32-bit or x86 device? Use armeabi-v7a or x86_64 instead.
Captured from the web build, which skips straight to the raw photo (web has no OpenCV support, see below) — native builds additionally show the edge-detection/corner-adjustment and filter screens in between capture and this page list.
- Real document scanning, not just a photo: automatic edge detection with a draggable corner overlay to fine-tune it, then perspective correction (dewarping) into a flat, upright page
- Scan filters — Original, Auto-Enhance, Grayscale, and Black & White — with live thumbnail previews before you confirm
- Re-edit any page after the fact (corners, filter) without re-scanning
- Capture multiple pages in sequence, reorder-free scanning workflow
- Combine captured pages into a single PDF
- Share the PDF via the OS share sheet (or download it directly on web)
- Material 3 UI that follows the system's light/dark theme
- No accounts, no cloud storage, no tracking
Edge detection, perspective correction, and filters run on real OpenCV
(opencv_dart) on Android/iOS/desktop. The web build doesn't support this
(OpenCV bindings are native/FFI-only) — web is a quick preview/testing
target, not the primary one; the raw captured photo is used as-is there.
- All image processing and PDF generation happens on-device.
- Captured photos and the generated PDF are only ever held in memory or short-lived temp storage, and are cleaned up as soon as they're no longer needed (page removed, "clear all", app closed, or right after sharing).
- The app makes no network requests of its own. (The web build's rendering engine, CanvasKit, is fetched from Google's CDN by the Flutter web framework itself — this doesn't apply to the native Android/iOS builds.)
Requires the Flutter SDK (Dart >=3.0.0 <4.0.0).
flutter pub get
flutter run| Command | Purpose |
|---|---|
flutter analyze |
Static analysis / lint |
flutter test |
Run the test suite |
flutter build apk --split-per-abi |
Build signed, per-ABI release APKs |
flutter build web |
Build a release web bundle |
docker-compose.yml provides two services that build against
ghcr.io/cirruslabs/flutter:stable, so you don't need the Flutter/Android
SDKs installed locally:
# Web preview, served on http://localhost:8080
docker compose up flutter-web
# Release Android APKs (one per ABI), output to build/app/outputs/flutter-apk/
docker compose run --rm build-apkIssues and pull requests are welcome — see
CONTRIBUTING.md for the dev workflow and commit message
conventions. CLAUDE.md documents the codebase's architecture, known
gotchas, and the reasoning behind a few non-obvious decisions — worth a
skim before diving into the code.
FOSScanner is licensed under the GNU General Public License v3.0.

