Skip to content

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Β 
Β 

Latest commit

Β 

History

601 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Paperless Scanner

Native Android App for Paperless-ngx with AI-Powered Document Processing

Version Android Kotlin License

Features β€’ Screenshots β€’ Installation β€’ Setup β€’ FAQ β€’ Contributing


πŸš€ Overview

Paperless Scanner is a modern, native Android client for Paperless-ngx that transforms your phone into a powerful document scanner with optional AI-powered metadata suggestions.

Why Choose Paperless Scanner?

  • πŸ“± Native Android App - Fast, smooth, Material 3 design
  • πŸ€– AI-Powered - Optional AI suggestions for tags, titles, and metadata (Premium)
  • πŸ”’ Privacy-First - No data collection, full control over your data
  • ⚑ Lightning Fast - Scan, tag, and upload in seconds
  • πŸŒ™ Beautiful UI - Dark mode support with Material 3 design
  • πŸ“΄ Offline-Capable - Queue uploads when offline, sync automatically
  • πŸ’° Affordable & Open Source - Full app for just CHF 1.-, optional Premium AI

✨ Features

Core Features (CHF 1.- one-time)

Feature Description
πŸ“Έ Smart Scanner MLKit-powered document scanner with automatic edge detection
⬆️ Direct Upload Upload directly to your Paperless-ngx instance
πŸ“‚ Document Browser Browse, search, and manage all documents with infinite scroll
🏷️ Label Management Manage tags, correspondents, and document types
πŸ“„ Multi-Page Docs Combine multiple scans into a single PDF document
πŸ“ Per-Page Metadata Assign individual metadata (tags, title, type) to each scanned page
🎯 Smart Grouping Pages with identical metadata are automatically merged into single uploads
πŸ“š Batch Import Upload multiple documents in one go
πŸ“‹ Upload Queue Persistent upload queue with retry logic and progress tracking
πŸ—‘οΈ Trash Management Soft delete with restore functionality
πŸ”’ App Lock Biometric/PIN protection with automatic lock
πŸ“± Home Widget Quick scan access from home screen
πŸŒ™ Dark Mode Automatic dark/light theme following system settings
πŸ“΄ Offline Mode Queue uploads when offline, auto-sync when connected
πŸ” Secure Credentials stored securely with Android Keystore

Premium Features 🌟

€4.99/month or €49.99/year (save 2 months)

Feature Description
πŸ€– AI Tag Suggestions Gemini 2.0 Flash analyzes your documents and suggests relevant tags
✨ Smart Metadata Automatic title extraction, date recognition, correspondent matching
🎯 Intelligent Matching AI matches against your existing tags for consistency
πŸ’‘ New Tag Proposals AI suggests new tags when existing ones don't fit
⚑ Time Saver Save 30-60 seconds per document
πŸ”„ Unlimited Usage Fair use policy - scan as much as you need
🎁 Priority Support Get help faster

Power-User Features (Self-Hosted)

For advanced users who want to run their own AI:

  • πŸ› οΈ Paperless-GPT Integration - Connect your own AI instance
  • 🏠 Self-Hosted - Full control over your AI infrastructure
  • πŸ’° Free Alternative - No subscription needed if you host your own
  • πŸ”“ Open API - Use any OpenAI-compatible endpoint

πŸ“Έ Screenshots

Login Scan Upload Multi-Page
Login Scan Upload Multi-Page
Batch Import
Batch

πŸ“² Installation

Google Play Store (Recommended)

Coming Soon! The app is currently in internal testing.

GitHub Releases

Download the latest APK from our Releases page.

Note: APKs from GitHub are signed with a development certificate. For production use, wait for the Play Store release.

Build from Source

# Clone the repository
git clone https://github.com/napoleonmm83/paperless-scanner.git
cd "paperless client"

# Build debug APK
./gradlew assembleDebug

# APK location:
# app/build/outputs/apk/debug/app-debug.apk

βš™οΈ Setup

Quick Start

  1. Install the app on your Android device (Android 8.0+)
  2. Open the app and tap "Login"
  3. Enter your Paperless-ngx details:
    • Server URL (e.g., https://paperless.example.com)
    • Username
    • Password
  4. Start scanning! πŸ“Έ

Network Configuration

The app supports:

  • βœ… HTTPS (recommended for remote access)
  • βœ… HTTP for local networks only:
    • 10.x.x.x (Class A private)
    • 172.16.x.x - 172.31.x.x (Class B private)
    • 192.168.x.x (Class C private)
    • localhost / 127.0.0.1

Self-Signed Certificates: Install your CA certificate in Android's trusted certificates.

Paperless-ngx Requirements

Your Paperless-ngx instance must support these API endpoints:

  • POST /api/token/ - Authentication
  • GET /api/tags/ - Fetch tags
  • GET /api/correspondents/ - Fetch correspondents
  • GET /api/document_types/ - Fetch document types
  • POST /api/documents/post_document/ - Upload documents

Minimum Version: Paperless-ngx v1.10.0 or later recommended.

Premium Setup (AI Features)

  1. Tap the settings icon in the app
  2. Navigate to "Subscription"
  3. Choose your plan:
    • Monthly: €4.99/month
    • Yearly: €49.99/year (save 17%)
  4. Complete purchase via Google Play Billing
  5. AI features activate automatically ✨

AI suggestions will now appear when you scan documents!


πŸ› οΈ Tech Stack

Component Technology
Language Kotlin 2.1.10
UI Jetpack Compose + Material 3
Dependency Injection Hilt
Networking Retrofit + OkHttp
Document Scanner MLKit Document Scanner
AI Processing Firebase AI (Gemini 2.0 Flash)
Database Room (offline caching + upload queue)
Background Tasks WorkManager (queue-only uploads)
Analytics Firebase Analytics (opt-in)
Storage DataStore Preferences
Image Loading Coil 3.x
PDF Generation iText 9.x
Pagination Paging 3 (infinite scroll)
Billing Google Play Billing Library 8.3.0

πŸ—οΈ Architecture

app/src/main/java/com/paperless/scanner/
β”œβ”€β”€ di/                          # Dependency Injection (Hilt)
β”‚   └── AppModule.kt
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ api/                     # Retrofit API
β”‚   β”‚   β”œβ”€β”€ PaperlessApi.kt
β”‚   β”‚   └── models/              # DTOs & API Models
β”‚   β”œβ”€β”€ repository/              # Business Logic Layer
β”‚   β”‚   β”œβ”€β”€ AuthRepository.kt
β”‚   β”‚   β”œβ”€β”€ DocumentRepository.kt
β”‚   β”‚   β”œβ”€β”€ TagRepository.kt
β”‚   β”‚   β”œβ”€β”€ CorrespondentRepository.kt
β”‚   β”‚   β”œβ”€β”€ DocumentTypeRepository.kt
β”‚   β”‚   β”œβ”€β”€ UploadQueueRepository.kt
β”‚   β”‚   └── AiRepository.kt
β”‚   β”œβ”€β”€ datastore/               # Preferences & Settings
β”‚   β”‚   └── TokenManager.kt
β”‚   β”œβ”€β”€ database/                # Room Database (Offline-First)
β”‚   β”‚   β”œβ”€β”€ dao/
β”‚   β”‚   β”‚   β”œβ”€β”€ CachedDocumentDao.kt
β”‚   β”‚   β”‚   β”œβ”€β”€ CachedTagDao.kt
β”‚   β”‚   β”‚   β”œβ”€β”€ CachedCorrespondentDao.kt
β”‚   β”‚   β”‚   β”œβ”€β”€ CachedDocumentTypeDao.kt
β”‚   β”‚   β”‚   └── PendingUploadDao.kt
β”‚   β”‚   └── entities/            # Room Entities
β”‚   └── sync/                    # Bidirectional Sync
β”‚       └── SyncManager.kt
β”œβ”€β”€ ui/
β”‚   β”œβ”€β”€ theme/                   # Material 3 Theme
β”‚   β”œβ”€β”€ navigation/              # Navigation Graph
β”‚   └── screens/
β”‚       β”œβ”€β”€ login/               # Login Screen + ViewModel
β”‚       β”œβ”€β”€ home/                # Home Screen (Document List)
β”‚       β”œβ”€β”€ scan/                # Scan Screen + ViewModel
β”‚       β”œβ”€β”€ upload/              # Upload Screen + ViewModel
β”‚       β”œβ”€β”€ documents/           # Document Details + Editor
β”‚       β”œβ”€β”€ labels/              # Tags, Correspondents, Types
β”‚       β”œβ”€β”€ queue/               # Upload Queue Management
β”‚       β”œβ”€β”€ settings/            # Settings Screen + ViewModel
β”‚       └── subscription/        # Subscription Screen + ViewModel
β”œβ”€β”€ util/                        # Utilities & Helpers
β”œβ”€β”€ MainActivity.kt
└── PaperlessApp.kt

Architecture Patterns:

  • MVVM + Repository Pattern + Clean Architecture
  • Offline-First with Room cache as single source of truth
  • Queue-Only Upload via WorkManager (survives process death)
  • Reactive Kotlin Flows for automatic UI updates

πŸ”’ Privacy Model

The base app sends your documents ONLY to your own Paperless-ngx instance.

Component Where data goes
Scanned documents β†’ YOUR Paperless server
Credentials β†’ Android Keystore (local)
Analytics β†’ Nowhere (zero tracking)
Crash reports β†’ Nowhere

No cloud. No LLM. No third parties.

Premium AI Features (Optional)

If you subscribe to Premium (€4.99/month):

  • Document images are sent to Gemini 2.5 Flash Lite for tag suggestions
  • You review and confirm all suggestions before upload
  • Not stored permanently (per Google's API terms)

If you don't subscribe: The app works 100% self-hosted. Zero external services involved.

Security Measures

  • πŸ” Credentials encrypted with Android Keystore
  • πŸ”’ HTTPS enforced for remote connections
  • πŸ›‘οΈ Certificate pinning support
  • πŸ”‘ Token-based authentication (no password storage)
  • πŸ”“ Open source - audit the code yourself

Read our full Privacy Policy | Terms of Service


❓ FAQ

How much does the app cost?

The app costs CHF 1.- (one-time purchase) via Google Play. This includes all core features: scanning, uploading, document management, offline mode, and more. Optional Premium AI features are available as a subscription for power users.

Do I need a subscription?

No, you don't need a subscription to use the app. The one-time purchase (CHF 1.-) gives you full access to all core features. The optional Premium subscription (€4.99/month) adds AI-powered suggestions to save you time.

What is Paperless-ngx?

Paperless-ngx is a community-supported, open-source document management system that helps you scan, index, and archive all your physical documents. You need to host your own instance (or use a hosted solution) to use this app.

Can I use my own AI instead of the Premium subscription?

Yes! If you're technically savvy, you can set up Paperless-GPT or any OpenAI-compatible endpoint and configure it in the app settings. This is the "Power-User" option mentioned in our features.

Why does the scanner require Google Play Services?

The app uses MLKit Document Scanner, which is distributed via Google Play Services. This provides the best scanning experience with automatic edge detection and perspective correction. If you're on a device without Play Services, the app won't work (yet - we're considering alternatives).

Does the app work offline?

Yes! You can scan documents offline, and they'll be queued for upload. Once you're back online, the app will automatically sync them to your Paperless instance.

Can I scan multi-page documents?

Absolutely! After the first scan, tap "Add Page" to scan additional pages. The app will combine them into a single PDF before uploading.

What data does the AI see?

If you subscribe to Premium, the app sends the scanned document image to Google's Gemini AI for analysis. The AI returns suggestions for tags, title, date, and correspondent. Google doesn't permanently store your documents after processing. Read more in our Privacy Policy.

Where can I report bugs or request features?

Open an issue on our GitHub Issues page. We appreciate detailed bug reports with steps to reproduce!

Can I use this with Paperless (old version) instead of Paperless-ngx?

No, this app is designed specifically for Paperless-ngx. The original Paperless project is deprecated. We recommend migrating to Paperless-ngx.


πŸ› Troubleshooting

Login Issues

Problem: "Unable to connect to server"

  • βœ… Check your server URL (must include http:// or https://)
  • βœ… Verify your Paperless-ngx instance is running
  • βœ… Test the connection in a browser: https://yourserver.com/api/
  • βœ… Check firewall rules if using local network
  • βœ… For HTTPS with self-signed certs, install the CA certificate on your device

Problem: "Invalid credentials"

  • βœ… Double-check username and password
  • βœ… Try logging in via web interface to verify credentials
  • βœ… Check for extra spaces in username/password fields

Scanning Issues

Problem: "Scanner not available"

  • βœ… Make sure your device has Google Play Services installed
  • βœ… Update Google Play Services to the latest version
  • βœ… Check device compatibility (Android 8.0+ required)

Problem: "Poor scan quality"

  • βœ… Use good lighting conditions
  • βœ… Place document on contrasting background
  • βœ… Hold device steady and parallel to document
  • βœ… Use the manual crop option if auto-detect fails

Upload Issues

Problem: "Upload failed"

  • βœ… Check your internet connection
  • βœ… Verify you're still logged in (token might have expired)
  • βœ… Check Paperless-ngx server logs for errors
  • βœ… Try uploading a small test document first

Problem: "AI suggestions not appearing"

  • βœ… Verify your Premium subscription is active
  • βœ… Check internet connection (AI requires online access)
  • βœ… Check if you've exceeded the fair use limit (see Settings β†’ Subscription)

Performance Issues

Problem: "App is slow or crashing"

  • βœ… Clear app cache: Settings β†’ Apps β†’ Paperless Scanner β†’ Clear Cache
  • βœ… Check available storage space
  • βœ… Update to the latest version
  • βœ… Restart your device

🀝 Contributing

We welcome contributions! Here's how you can help:

Reporting Bugs

  1. Check existing issues first
  2. Use our Bug Report template
  3. Include:
    • Android version
    • Device model
    • App version
    • Steps to reproduce
    • Expected vs actual behavior
    • Screenshots if applicable

Suggesting Features

  1. Check existing feature requests
  2. Use our Feature Request template
  3. Explain:
    • What problem does it solve?
    • How should it work?
    • Why is it useful for other users?

Contributing Code

  1. Fork the repository
  2. Create a feature branch:
    git checkout -b feature/amazing-feature
  3. Follow our coding standards:
    • Use Kotlin idioms and best practices
    • Follow Material 3 design guidelines
    • Write unit tests for new features
    • Document public APIs
  4. Run local CI checks:
    ./scripts/validate-ci.sh
  5. Commit your changes:
    git commit -m "feat: add amazing feature"
  6. Push to your fork:
    git push origin feature/amazing-feature
  7. Open a Pull Request

Coding Standards:

  • Use data object for sealed class singletons
  • Prefer StateFlow over LiveData
  • All async operations use suspend functions or Flow
  • Repository methods return Result<T>
  • Stateless Composables with state hoisting
  • Follow MVVM + Repository pattern

See docs/BEST_PRACTICES.md for detailed guidelines.


πŸ“š Documentation

Document Description
PRIVACY_POLICY.md Privacy policy (DE/EN)
TERMS_OF_SERVICE.md Terms of service (DE/EN)
TECHNICAL.md Technical documentation & architecture
API_REFERENCE.md Paperless-ngx API reference
QUEUE_ONLY_ARCHITECTURE.md Upload queue architecture
BEST_PRACTICES.md Coding standards & best practices
LOCAL_CI_TESTING.md Local CI validation guide
ROADMAP.md Feature roadmap & future plans

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

MIT License

Copyright (c) 2024-2025 Paperless Scanner

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
...

πŸ’¬ Support


πŸ™ Acknowledgments

  • Paperless-ngx - The amazing document management system this app connects to
  • MLKit - Google's ML Kit for document scanning
  • Jetpack Compose - Modern Android UI toolkit
  • Firebase AI - Gemini AI integration
  • All contributors and users who help improve this app!

🌟 Star History

If you find this project useful, please consider giving it a star ⭐

Star History Chart


Made with ❀️ for the Paperless-ngx community

⬆ Back to Top

About

No description, website, or topics provided.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages