Open-source logistics software. Free, self-hosted delivery management: orders, warehouses, trucks, a courier app with proof of delivery and barcode scanners, cash on delivery (COD), returns, shipment tracking and an audit log. Arabic and English. A company in Iraq starts with the country's governorates; a company anywhere else adds the regions and warehouses it delivers to.
Version 3.1 · Arabic-first (RTL) · English · .NET 10 · Blazor WebAssembly · PostgreSQL · Flutter mobile app · Apache-2.0
Website · Quick start · What it does · Mobile app · Demand intelligence · Docs · FAQ · Contributing
If Logistico is useful to you or your company, please ⭐ star it: it is how other delivery companies find it.
A delivery company runs the whole day in one console: book a parcel, scan it through hubs, put it on a truck, hand it to a courier, collect the cash, and see why deliveries fail. The interface is light by default (a quiet grey frame and white work panels). Dark mode is one click in the top bar. Arabic is the default language and the layout is right-to-left.
لوجستيكو برنامج لوجستي مفتوح المصدر ومجاني لشركات الشحن والتوصيل في أي بلد: الطلبات، الدفع عند الاستلام، المخازن والرفوف، الشاحنات، تطبيق المندوب مع إثبات التسليم، المرتجعات، تسوية مستحقات المتاجر، وصفحة تتبع للزبون. شركة في العراق تبدأ بمحافظاته؛ وشركة في بلد آخر تضيف مناطقها ومخازنها. الواجهة عربية من اليمين إلى اليسار، مع الإنجليزية.
Most delivery companies still run on spreadsheets, chat groups and closed systems that were not made for Arabic, for cash on delivery, or for an address that is a neighbourhood and a landmark.
Logistico is open-source logistics software for that work: orders, warehouses and trucks, couriers, returns, cash-on-delivery settlements and a public tracking page. A company in Iraq also gets the governorate network, Instagram-shop orders and ASYCUDA customs. Because every order flows through it, it can answer what customers order, where, when, and why deliveries fail. Companies can publish anonymised answers as open data.
| Area | Highlights |
|---|---|
| Delivery orders (Instagram and online shops) | Seller, customer and Iraqi address (governorate, area, nearest landmark), pickup or drop-off, COD in IQD, automatic delivery promise (Fridays skipped), bulk booking, customer risk from past deliveries |
| Order confirmation | Hold risky orders until the customer confirms by call or on the tracking page; a call queue for customer support; auto-cancel unconfirmed ones |
| Warehouses & branches | Each company manages its own sorting hubs, branches and fulfilment stores per governorate: coverage, map position, shelf capacity, live load; routing and labels follow them |
| Dashboard | Period-over-period KPIs (booked, delivered, success, first attempt, on time, delivery time, returns, COD, customer rating), daily volume, pipeline, failure reasons, sellers, governorates, couriers |
| Hubs and trucks | Map of the 18 governorates, each hub's shelves and trucks, scan station, and line-haul manifests between hubs |
| Hub station | Barcode-scanner-first receive / load truck / dispatch / route check, shelves, scan log and live radar, printable command barcodes |
| First run & getting started | A setup page that creates the company and its first administrator with a one-time code from the server log; a guide that walks each role through setting the company up, done when the data says so; installation health that says what to fix before going live |
| Sort plans | Per hub: which parcels go on which shelves (couriers' areas, truck lanes, returns, a seller's own shelf) and how many fit; receive scans pick the shelf, overflow when one is full and show it large; shelves listed in walking order with their load |
| Trucks between hubs | Parcels planned onto the right truck automatically; load, depart and unload by scan; manifests; missing parcels flagged |
| Returns | Start automatically after the last failed attempt or a refusal, travel back by truck, handed over against a manifest |
| Customers | Public tracking without personal data; self-service requests (new day, address, phone, cancel, return, complaint) protected by the phone's last four digits with lockout; ratings that open complaints |
| Automation | Per-company rules (attempts, rescheduling, SLAs); alerts raised and cleared every minute; WhatsApp message queue |
| Demand intelligence | What customers buy, where, when, basket sizes vs refusals, trade lanes, repeat customers, plain-language findings, open-data export (below) |
| Money | Delivery prices per company (own governorate, per destination, weight, seller discounts) quoted on the order form; cash held by couriers, seller COD balances, settlement batches (ZainCash, Qi Card, cash, bank) with CSV statements |
| Courier app | Couriers sign in on their phone and see only their parcels: address and landmark, cash to collect, call or WhatsApp the customer, mark delivered or not delivered with the reason; installable on the home screen |
| Proof of delivery | Who took the parcel (customer, family, neighbour… with a name), an optional finger signature, and the courier's location at every delivery and failed attempt, shown on the order |
| Cash control | Couriers hand in their cash against the parcels it covers, shortages recorded; sellers are paid only from cash the company holds; optional return fee for parcels sent back |
| Shelf checks | Count a hub shelf or a whole hub with a barcode scanner: missing, misplaced and unexpected parcels at once, misplaced ones fixed in one tap |
| Audit log | Who changed what and when — orders, prices, rules, payouts, sellers, staff accounts — with every field before and after; append-only |
| Comments & saved views | Staff notes on every order; each person's named list views and columns |
| Seller portal | Shops book their own orders (paste the customer's message), at the company's prices; follow orders and returns, cancel before pickup, see what they are owed and every payout with its statement |
| Team & roles | Administrators add colleagues and give them one of five office roles (Administrator, Operations, Customer support, Finance, Viewer), or Courier or Seller for the courier app and seller portal; lock, unlock and set new passwords; the API enforces every role and the screens follow it |
| International freight & customs | Bookings by sea/air/road, 4×6" AWB labels with Code-128, ASYCUDA workbench (SAD XML, CoO/invoice e-verification, duty estimate) |
| Speed | Command palette (Ctrl/⌘+K), keyboard shortcuts (?), barcode scanning from any page, phone layouts without sideways scrolling |
![]() |
![]() |
| Hubs and trucks on the Iraq map | Shipments list |
![]() |
![]() |
| Each hub's sort plan: rules, shelf loads, "where would this parcel go?" | The station shows the shelf the plan chose |
One Flutter app for Android and iOS whose screens follow the account that signs in, and whose content the company controls from the web console:
- Senders (shops) — book orders at the company's prices, follow them and their returns, see what they are owed.
- Couriers — the day's run, call or WhatsApp the customer, proof of delivery, cash to hand in; scanning with the built-in scanner of Android handhelds, a Bluetooth/USB scanner gun, or the camera.
- Managers — operations and delivery figures, alerts, hub scanning and shelf checks.
It signs in with the same accounts and roles as the web console. How to run and build it: mobile/README.md; the design: 09 — Client applications.
The Intelligence → Demand intelligence page turns a company's own deliveries into knowledge about the Iraqi market:
- Demand across Iraq: orders, delivery success, basket size and delivery time per governorate, with growth.
- What customers buy: item descriptions typed by sellers in Arabic or English (
فستان سهرة,AirPods case) are recognised as product categories, with success and return rates per category. - When Iraq orders: weekday × hour in Baghdad time, to plan confirmation calls, pickups and couriers.
- Basket size vs refusals: are expensive cash-on-delivery orders refused more? By how much?
- Trade lanes (seller's governorate → customer's governorate) and repeat vs first-time customers.
- Key findings written in plain Arabic or English, e.g. "Orders of 200,000 IQD or more come back 7.9× as often as average. Confirm them with the customer before pickup."
- Open data (CSV): aggregates you can publish, with no names, phones or addresses, and groups under 10 orders left out.
How it works and how the data is protected: docs/16-data-and-insights.md.
# from a clone of this repository
docker compose up --buildOpen http://localhost:5210 and sign in with admin@logistico.local / Logistico#2026. The database is migrated and
filled with realistic demo data (12 Instagram shops, ~600 orders across Iraq, trucks, returns, requests). To see the
other roles, sign in as ops@logistico.local (Operations), support@logistico.local (Customer support),
finance@logistico.local (Finance) or viewer@logistico.local (Viewer) with the same password. This stack is for evaluation: it runs in the Development
environment over plain HTTP. For a real installation, read Production readiness.
Prerequisites: .NET 10 SDK and PostgreSQL 16+.
psql -d postgres -c "CREATE ROLE logistico LOGIN PASSWORD 'logistico_dev' CREATEDB;" # once
dotnet tool restore
dotnet run --project src/Logistico.Web --launch-profile http- App: http://localhost:5210 · Public tracking: http://localhost:5210/track · OpenAPI: http://localhost:5210/openapi/v1.json
- Development signs in as
admin@logistico.local/Logistico#2026with demo data (fromappsettings.Development.json). - The UI is in Arabic by default; switch to English from the top bar. Light theme by default; dark from the top bar.
Started without Seed:AdminEmail, Logistico has nobody to sign in yet. It writes a one-time setup code to its
log and every page leads to /setup: enter the code, your company's name and phone, and the first administrator
(with Docker: docker compose logs app shows the code). The page works once. You land on Getting started, a guide
that walks each role through what to set up (warehouses, prices, team, couriers, sellers, sort plan, the first order
and scan, automation, the mobile app) and is done when the data says so; Installation health lists what to fix
before real customers' data goes in. See First run & getting started.
![]() |
![]() |
| The setup page (once, with the code from the log) | Getting started, step by step |
dotnet test tests/Logistico.Modules.Shipments.Tests # domain rules, product catalogue, open data, formatting, sort plans, paste-to-order (277)
dotnet test tests/Logistico.ArchitectureTests # module boundaries, texts in both languages, RTL/CSS and icon guards, a message for every refusal code (34)
dotnet test tests/Logistico.Web.IntegrationTests # REST API on real PostgreSQL: flows, roles, setup, every endpoint × every role (162)
dotnet test tests/Logistico.Web.Client.Tests # the console: components (bUnit), navigation, plurals, texts (46)
dotnet test tests/Logistico.Qa -c Release # QA: a delivery day by shops, couriers and a hub, then every page in Chrome (9)The QA suite starts the built server on its own port with its own database (build in Release first) and needs Google
Chrome; it writes the time of every endpoint to TestResults/qa/delivery-day.md.
Set LOGISTICO_TEST_DB to point the integration tests at another PostgreSQL server.
CI also measures line coverage of the server code and fails below 85 % (87.7 % today); see CONTRIBUTING to measure it locally.
| Layer | Choice |
|---|---|
| Language / runtime | C# on .NET 10 (LTS) |
| Web UI | Blazor WebAssembly with Logistico's own components. GitLab Pajamas sets the look (light by default, dark on request); Blueprint 6 CSS and icons (Palantir, Apache-2.0) supply tables, menus, dialogs and hotkeys |
| Languages | Arabic (ar-IQ, default, RTL) and English; Almarai font; Western digits; Iraqi month names; Arabic plural forms |
| Backend | ASP.NET Core modular monolith (strict module boundaries, contracts shared with the browser) |
| Database | PostgreSQL with EF Core 10 (schema per module, snake_case, optimistic concurrency) |
| Identity | ASP.NET Core Identity (cookies, roles, 2FA, passkeys), multi-company (tenant) data isolation |
| Mobile | Flutter (Android and iOS), one app for senders, couriers and managers; Riverpod, go_router, dio |
| CI | GitHub Actions: format → build → tests on PostgreSQL → QA (API + Chrome) → Docker image check → container image + migration bundles; the same pipeline on a local Jenkins (Jenkinsfile, scripts/jenkins.sh) |
No paid licences, no map service, no CDN at run time: everything (Blueprint, fonts, the Iraq map) is vendored.
src/
Logistico.Web/ ASP.NET Core host: REST API, sign-in pages, serves the WebAssembly UI
Logistico.Web.Client/ Blazor WebAssembly UI: components (Ui/), pages, typed API clients, ar/en texts
Logistico.SharedKernel/ Tenancy, paging, Iraqi governorates and phone numbers, cultures
Modules/Shipments/ Orders, hubs and trucks, returns, requests, automation, insights, customs, fleet, COD
Modules/Merchants/ Sellers (Instagram / online shops)
Modules/Audit/ Audit log: who changed what, recorded with every change
mobile/ Flutter app for senders, couriers and managers (Android, iOS)
tests/ Domain, architecture and API integration tests
docs/ Architecture, decisions and guides (start with 00)
Dockerfile, docker-compose.yml
| # | Document | |
|---|---|---|
| 00 | Overview | What Logistico is, what is built, key decisions |
| 01 | Research findings | ASYCUDA in Iraq, open-source landscape, licensing |
| 02 | Domain model | Bounded contexts, shipment lifecycle, business rules |
| 03 | System architecture | Components, module structure, performance |
| 04 | Database design | PostgreSQL design, partitioning, HA/DR |
| 05 | Infrastructure & deployment | Hosting in/near Iraq, containers |
| 06 | Device integration | GPS, scanners, label and receipt printers, scales |
| 07 | Customs & ASYCUDA | ASYCUDA World, document e-verification |
| 08 | UI/UX design system | Blueprint, the console theme, Arabic/RTL, keyboard, map |
| 09 | Client applications | Web now; desktop and mobile options |
| 10 | Security & compliance | Identity, authorization, data protection, audit |
| 11 | CI/CD & DevOps | Pipeline, testing, releases, migrations |
| 12 | Observability | Telemetry, SLOs, alerting |
| 13 | Roadmap | What is done, what is next, known limitations |
| 14 | Architecture decisions | ADR log |
| 15 | Production readiness | Configuration, go-live checklist, performance acceptance |
| 16 | Data & demand intelligence | Insights, product recognition, open data and privacy |
| 17 | Release audits | What each release checked and fixed |
| 18 | Ideas from open source | What we took from Fleetbase, OpenBoxes, Karrio, Odoo, VROOM, Traccar |
| 19 | First run & getting started | The setup page, the getting-started guide, installation health |
Logistico is an open-source alternative to closed delivery platforms (Onfleet, Shipday, Tookan) and to general systems adapted for delivery (Odoo, ERPNext). Compared with open-source projects such as Fleetbase or OpenBoxes, it is built around cash on delivery, Arabic and right-to-left first, Iraqi addresses (governorate, area, nearest landmark), line-haul between governorate hubs, and ASYCUDA customs.
Is there a free, open-source delivery management system?
Yes: Logistico is free under Apache-2.0. Run it on your own server, change it, and use it commercially. It covers orders, hubs, trucks, couriers, cash on delivery, returns, tracking and customs in one system.
Does it work in Arabic? / هل يعمل بالعربية؟
Arabic is the default language, right to left, with English one click away; addresses follow how Iraqis give them (governorate, area, nearest landmark). نعم، العربية هي اللغة الافتراضية والواجهة من اليمين إلى اليسار.
Is there a courier app with barcode scanning?
One Flutter app for Android and iOS serves couriers, sellers and managers. Couriers deliver with proof of delivery (receiver, signature, location) and scan with the built-in scanners of Android handhelds, Bluetooth/USB scanner guns or the camera.
How do I install it for a real company?
Start it without demo settings: it writes a one-time setup code to its log, /setup creates your company and its
first administrator, and a getting-started guide takes you through the rest. See
Production readiness and First run.
How is it different from Fleetbase, Odoo or Onfleet?
See Alternatives: cash on delivery, Arabic and right-to-left first, Iraqi addresses, line-haul between governorate hubs, sort plans and ASYCUDA customs are built in, not added on.
Bug reports from real hubs, Arabic and Kurdish product words, new integrations (couriers, payment wallets, WhatsApp), and code are all welcome. Start with a good first issue, ask anything in Discussions, and read CONTRIBUTING.md for setup and house rules, and CODE_OF_CONDUCT.md. Report security issues privately: SECURITY.md. Questions about using it: SUPPORT.md.
Apache License 2.0. Third-party assets and their licences are listed in NOTICE.










