Scanly Documentation

Complete documentation for Scanly v1.0.17 — an offline-first Android document scanner.

Website: https://www.usescanly.co.in · Google Play: https://play.google.com/store/apps/details?id=in.c1ph3rj.scanly

If you are new to this project, start here. This folder contains everything needed to understand what Scanly is, how users interact with it, and how the codebase is built.

What is Scanly?

Scanly is a local-only document scanner for Android. Users capture pages with the camera or import images from the gallery, correct page geometry, apply filters, organize multi-page documents into collections, and export PDFs or image archives — all without a backend or cloud sync.

AttributeValue
PlatformAndroid 10+ (API 29), targets API 36
UIJetpack Compose + Material 3
ArchitectureSingle module (:app), clean-architecture-style layers
DataRoom database, app-private files, DataStore preferences
ProcessingLiteRT multi-model corners + semantic gate + OpenCV filters + CameraX capture
Background workWorkManager foreground backup/restore (LibraryArchiveWorker)
Export / backupPDFBox-encrypted PDFs; .scanly library archives to Downloads/Scanly/backup/
DistributiongithubRelease (GitHub updates) and playStoreRelease (Play in-app updates)
LicenseAGPL-3.0-only (LICENSE)
Current version1.0.17 (version code 17)

Core workflow

Capture or import image
  → Optional physical-document gate
  → Detect document corners (selected LiteRT model) or crop-screen AI Detect / manual handles
  → Perspective correction + filter preset + optional fine adjustments
  → Save as page in a local document
  → Organize in library / groups
  → Export PDF or share images (save to Downloads/Scanly or custom folder)
  → Back up entire library as compressed .scanly archive (optional restore)

Design principles: offline-first, preserve raw captures, treat processed output as derived, keep manual controls when automation fails.

Reading paths

Choose a path based on your goal:

I want to…Start with
Understand the product and featuresoverview/what-is-scanly.md → overview/features.md
Learn how users interact with the appoverview/user-guide.md
Understand code structure and layersarchitecture/overview.md
Trace navigation and screen flowsarchitecture/navigation.md
Understand persistence and storagedata/database.md → data/file-storage.md
Understand the scan/processing pipelineprocessing/capture-and-scan.md → processing/image-processing.md
Build, test, or contribute codedevelopment/setup.md → development/running-and-testing.md → development/conventions.md
Look up models, use cases, or dependenciesreference/
See release historyreleases.md

Documentation map

Overview — product context

DocumentContents
what-is-scanly.mdVision, principles, tech summary, repository layout
features.mdComplete feature inventory by area
user-guide.mdEnd-user workflows: scan, edit, organize, export, settings

Architecture — how the app is built

DocumentContents
overview.mdLayers, packages, DI, connection maps
navigation.mdRoutes, transitions, user flow diagrams
screens.mdEvery screen, ViewModel, and responsibility

Data — persistence and storage

DocumentContents
database.mdRoom schema v5, entities, migrations, DAOs
file-storage.mdOn-disk layout, raw/processed/thumbs, export cache
library-backup.md.scanly format, destinations, validation, Replace/Merge restore
settings-and-updates.mdDataStore prefs, FAQs/licenses, GitHub/Google Play update variants

Processing — capture, ML, filters, export

DocumentContents
capture-and-scan.mdCameraX session, quality feedback, finalize flow
image-processing.mdLiteRT corners, warp, filters, adjustments, editor AI detect
export.mdPDF, image archive, group export, FileProvider share

Development — build and contribute

DocumentContents
setup.mdPrerequisites, build commands, release signing
running-and-testing.mdInstall/run the debug app, emulator/adb, JVM flow tests, device UI automation
conventions.mdLayer rules, adding screens, Room migrations
testing.mdTest inventory, gaps, how to run tests
releasing.mdVersion bump checklist, docs to update

Reference — quick lookup

DocumentContents
implementation-snapshot.mdOne-page technical snapshot
tech-stack.mdDependencies and versions from libs.versions.toml
domain-models.mdAll domain model classes
use-cases.mdAll 73 use cases grouped by area
repository-layout.mdRoot repo file and folder guide

Releases

DocumentContents
releases.mdVersion policy, current release, links to changelog

Root-level documents (outside docs/)

These files live at the repository root for GitHub conventions and quick access:

FilePurpose
README.mdPublic landing page with screenshots and quick start
CHANGELOG.mdUser-facing release notes
VERSION.mdVersion metadata and upgrade notes
CONTRIBUTING.mdContribution workflow
SECURITY.mdVulnerability reporting
Agents.mdAI coding agent guidance
LICENSEAGPL-3.0-only

Key source locations

AreaPath
Entry pointapp/src/main/java/in/c1ph3rj/scanly/MainActivity.kt
Navigationapp/src/main/java/in/c1ph3rj/scanly/navigation/
Features (UI)app/src/main/java/in/c1ph3rj/scanly/feature/
Domain logicapp/src/main/java/in/c1ph3rj/scanly/domain/
Data layerapp/src/main/java/in/c1ph3rj/scanly/data/
ML / processingapp/src/main/java/in/c1ph3rj/scanly/core/
Library backupapp/src/main/java/in/c1ph3rj/scanly/data/archive/
Export storageapp/src/main/java/in/c1ph3rj/scanly/data/export/DefaultExportStorageRepository.kt
Build configapp/build.gradle.kts, gradle/libs.versions.toml
ML modelsapp/src/main/assets/models/ (Lite/Standard/High/Accurate corners + document gate)

Screenshots

UI screenshots are in ../screenshots/. The root README.md embeds them for GitHub display.

View source on GitHub · Markdown