English · Українська ·
Lightweight local printing and scanning for Android — "like AirPrint": no drivers, no accounts, no cloud. KamiDrop finds printers on your Wi-Fi by itself, prints over IPP in the AirPrint raster format and scans over eSCL (AirScan).
- Finds printers and scanners automatically (mDNS / DNS-SD) and remembers them; a printer can also be added by IP. Shows the printer state, color / duplex / resolution and ink or toner levels.
- Prints PDFs and photos: preview with a page strip, page ranges ("3-5, 8"), color, two-sided printing, copies, cancelling a running job.
- Layout editor: orientation; fit / fill / 100 %; exact photo sizes 9×13, 10×15, 13×18, A5 with cropping; margins, or edge-to-edge printing on printers that support it. What you see is exactly what gets printed — sizes on paper were checked with a ruler and a scanner (1:1, 10.0 mm grid).
- Several photos on a sheet: drag, pinch to resize, rotate, exact sizes with cropping, double-tap to adjust the crop, hold a photo and swipe with another finger to move it to another sheet.
- Scanning from the glass or the document feeder: color, grayscale or black & white, 75–600 dpi; save as PDF (one file), JPEG or PNG, share, or print right away (a copier).
- Print from any app: KamiDrop is an Android print service — its printers show up in the system "Print" dialog of Chrome, Photos, Gmail and other apps.
- "Share → KamiDrop" from the gallery, files or any app.
- Updates itself from GitHub releases (checked once a day; installs only when you tap).
- English and Ukrainian — picked from the system language or chosen in Settings.
You need a printer with AirPrint support (most network printers made after ~2013) and an Android 7+ phone on the same Wi-Fi network. Scanning needs a scanner with eSCL / AirScan (or a gateway such as AirSane for scanners without it).
- Download the APK from the latest release:
kamidrop-…-arm64-v8a.apkfits almost all modern phones. - Open it on the phone and allow installing from this source.
- Google Play Protect may warn that the developer isn't verified — that's normal for apps installed outside Google Play. Tap "Install anyway".
After that KamiDrop tells you when a new version is out.
Android is the main platform, but there are desktop builds too (in the same releases as the APK): printing and scanning work, but the interface is still phone-shaped and updates are manual.
- Windows:
kamidrop-…-windows-x64.zip→ unpack →kamidrop.exe. On first launch allow network access in the firewall prompt — otherwise no printers will be found. - Linux:
kamidrop-…-linux-x64.tar.gz→ unpack →./install.sh(adds a menu entry) or just run./kamidrop.
Almost everything is implemented in plain Dart, without printing or scanning libraries:
| Part | What it does |
|---|---|
lib/ipp/ |
A minimal IPP client (RFC 8010/8011): request encoding incl. collections (media-col), response parsing, Print-Job, Get-Job-Attributes, Cancel-Job |
lib/printing/urf.dart |
URF (Apple raster) encoder/decoder with PackBits, back-side flipping for duplex |
lib/printing/compose.dart |
Page layout in millimetres, printer margins from IPP, rotation, cropping, sRGB / gray |
lib/printing/collage.dart |
Photo sheets: frames in mm, auto-arrangement, cropping (zoom/pan), composition in an isolate |
lib/scan/escl.dart |
eSCL scanning client: capabilities, multi-page jobs from the feeder |
lib/scan/pdf_writer.dart |
A tiny PDF writer: scanner JPEGs without re-encoding, 1-bit pages for black & white |
lib/discovery/ |
Printer and scanner discovery: Android NsdManager, mDNS elsewhere; memory of printers |
lib/printservice/ + KamiPrintService.kt |
Android print service: a headless Flutter engine runs the same discovery and print pipeline for the system "Print" dialog |
lib/update/ |
Self-update from GitHub releases via Android PackageInstaller |
Things learned the hard way are worth a look if you write your own client: for example, a Brother DCP-J572DW silently ignores eSCL scan settings if the XML contains line breaks, and hangs on a chunked request body.
You need Flutter (stable) and the Android SDK.
flutter pub get
flutter test
flutter run # on a connected phone
flutter build apk --release --split-per-abi # release APKs
Release builds are signed with the key from android/key.properties (not in the repository, see
Flutter docs); without it the debug key
is used. There is also a Linux build for quick development: flutter run -d linux.
Desktop: flutter build windows (on Windows, with Visual Studio and the "Desktop development with C++"
workload) or flutter build linux (needs clang cmake ninja-build pkg-config libgtk-3-dev); the archive
is made by tool/package_linux.sh. GitHub Actions runs the tests and builds Android, Linux and Windows on
every push, and attaches the desktop archives to a published release.
Translations live in lib/l10n/app_uk.arb (source) and lib/l10n/app_en.arb.
What's done and what's next — see ROADMAP.md. Up next: "More options" inside the system print dialog (fit / fill / 100 %, edge-to-edge) and finding printers on isolated networks.




