An open-source, Android-first warehouse/inventory scanning app for Odoo — a FOSS alternative to Ventor Pro — plus a thin, OCA-candidate REST module that gives it a stable, versioned server contract.
See PLAN.md for the full architecture and roadmap.
| Path | What | License |
|---|---|---|
app/ |
Flutter app (odoo_scanner) — Riverpod, Drift offline mirror + op queue, mobile_scanner, Zebra DataWedge |
MIT |
odoo/addons/stock_barcode_api/ |
Odoo 18 addon: /scanner/v1/ REST endpoints, Bearer API-key auth, idempotent ops |
AGPL-3 |
The two halves are deliberately decoupled: the app speaks raw JSON-RPC out of
the box (no server module required), and upgrades to the stock_barcode_api
endpoints when they're installed. The addon follows OCA conventions
(manifest, readme fragments, oca-ci test workflow) so it can be proposed to
OCA — likely stock-logistics-barcode — with a
straight copy of the module directory.
cd app
flutter pub get
dart run build_runner build # drift + auto_route codegen
flutter test
flutter run # on an Android device/emulatorOn first launch, enter your server URL, database, login, and an API key (Odoo → Preferences → Account Security → API Keys). The password never leaves Odoo; the key is stored in the Android keystore.
Scanning inputs (all active at once on the picking screen):
- Camera (MLKit via
mobile_scanner) - Zebra DataWedge — configure a DataWedge profile for the app with Intent
output, action
com.ledoweb.odoo_scanner.SCAN, delivery Broadcast intent - Keyboard-wedge scanners — scan into the barcode field
Offline-first: every mutation is appended to a local op queue (Drift) and
applied optimistically; the sync engine drains the queue when connectivity
returns. Server rejections are surfaced as conflicts for re-scan, never
silently overwritten. See app/lib/data/sync/.
# add odoo/addons to your addons_path, then
odoo -d yourdb -i stock_barcode_api
curl -H "Authorization: Bearer <api key>" https://your-odoo/scanner/v1/pingEndpoint reference: readme/USAGE.md.
- Flutter CI (
.github/workflows/flutter.yml): format, committed-codegen check, analyze, tests with coverage, release APK artifact. - Odoo CI (
.github/workflows/odoo.yml): pre-commit (ruff + OCA odoo-module checks), then install + test against Odoo 18 in the official oca-ci container — the same job OCA repos run, so upstream CI holds no surprises. - Pre-commit locally:
pipx install pre-commit && pre-commit run --all-files.
Alpha — MVP flow is "receive a purchase order": list open receipts, scan product barcodes to count, validate (with backorder). Lots/serials, packages, and other operation types are on the roadmap.