Skip to main content
POS Offline Mode Pro — A build-to-order Odoo POS extension that keeps checkout running through internet outages with resilien — 1/1Illustrative preview

A build-to-order Odoo POS extension that keeps checkout running through internet outages with resilient local

caching, a durable local order queue, and conflict-safe reconciliation on reconnect. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.

What is POS Offline Mode Pro?

A build-to-order Odoo POS extension that keeps checkout running through internet outages with resilient local caching, a durable local order queue, and conflict-safe reconciliation on reconnect. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Durable local order persistence in IndexedDB — in-flight `pos.order` state survives tab refresh, browser crash, or device reboot instead of living in volatile memory
Live connection-status indicator in the POS header (online / degraded / offline-queuing) driven by heartbeat pings, so cashiers always know the current mode
Local order queue that continues ringing up sales, discounts, and tax lines with the last-cached product, pricelist, and fiscal-position data during an outage
Deterministic queued-sync engine that replays offline orders in original creation order against the backend on reconnect
Idempotency keys stamped on every queued order to prevent duplicate `pos.order` creation when a retry or double-flush occurs
Conflict-safe stock reconciliation for `stock.move` / quantities changed by other registers while a terminal was offline, with exceptions surfaced rather than silently overwritten
POS sequence-collision handling so two registers that went offline don't produce clashing order references
Offline receipt printing from a locally cached QWeb receipt template, independent of a live backend render call
Offline payment logging for cash and terminal-recorded methods, capturing the metadata needed for later reconciliation and journal posting
New backend models (`models.Model` with `@api.depends` computes) tracking each order's sync state, queue age, and reconciliation status
Sync-exception queue with dedicated XML list/form views for managers to review, retry, or resolve failed replays
`ir.model.access.csv` + record rules restricting queue and reconciliation data to POS managers, matching native POS permissions
Optional `base.automation` automated action to alert a manager when a reconciliation exception is created
Configurable outage thresholds and retry/backoff policy per POS config, editable from Settings without code changes
Built and tested against Odoo 17.0, 18.0, and 19.0, with edition-aware offline-payment behavior for Community vs Enterprise IoT terminals

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Retail and restaurant operators in areas with unreliable connectivity lose real money every time the link drops: cashiers stop, queues back up, and staff resort to paper or "come back later." Odoo's Point of Sale already keeps a session partly usable offline — the browser client caches the loaded product catalog and can ring up orders while the connection is down — but its guarantees end at the edges. Payment terminals that need a live call, receipt printing tied to backend report rendering, tax or price rules that depend on a server round-trip, and multi-register stock all become fragile once the outage is more than momentary. When the connection returns, orders push back in a burst with no conflict handling, and a browser refresh or a closed tab during a long outage can silently strand unsynced tickets. Native Odoo runs out of road exactly where these stores need it most: sustained, real-world outages across several terminals.

POS Offline Mode Pro is a build-to-order module ECOSIRE designs, builds, installs, and supports on top of your existing Odoo POS. Technically, it hardens the offline path on both sides of the wire. On the client, it extends the OWL/JS POS frontend to persist every in-flight order to durable local storage (IndexedDB) rather than volatile memory, so a refresh, crash, or shift change never loses a ticket, and it surfaces a live connection-status indicator so cashiers always know whether they are online, degraded, or queuing locally. Offline receipts print from a locally cached QWeb template, and offline payment lines (cash and terminal-logged) are recorded with the metadata needed to reconcile later. On reconnect, a queued-sync engine replays orders in deterministic order against the backend pos.order models, and a reconciliation layer we build into new models.Model classes handles the hard cases — duplicate submission (idempotency keys on each queued order), sequence collisions, and stock movements that other registers changed while you were offline — instead of letting them fail silently.

Under the hood we ship real Odoo server-side code, not just a browser hack. The module declares its dependencies and assets bundles in __manifest__.py, adds new models with fields, compute methods and @api.depends where sync state and reconciliation status need to be tracked and reported, and locks every new model and menu down with ir.model.access.csv plus record rules so offline queue data respects the same POS-manager permissions as the rest of the system. Sync status and exception queues get their own backend list/form views (XML) and, where useful, an OWL widget in the POS UI; reconciliation exceptions can trigger automated actions (base.automation) to alert a manager. The re-sync transport uses Odoo's standard JSON-RPC/XML-RPC calls the POS client already speaks, so nothing bypasses your access rules or audit trail. We build against your edition — the offline-payment behavior differs between Community and the Enterprise IoT/terminal integrations, and we scope that explicitly during discovery — and target Odoo 17.0, 18.0, or 19.0 to match your deployment.

Because this is build-to-order, you are not downloading a pre-canned app and hoping it fits. After a short scoping call we confirm your Odoo version and edition, register topology, payment methods, and what "acceptable" offline behavior means for your business (e.g. offline card handling, receipt legal requirements, stock policy). We build the module to that scope, validate it on a staging copy of your database through UAT, and deploy with a documented rollback. Typical delivery is one working week from confirmed scope, and you receive the full installable source and git repository so the work is yours to keep. ECOSIRE then supports it through a post-go-live window and remains available for version upgrades as you move across Odoo releases.

What you get

  • Installable Odoo module source code for your confirmed version (17.0 / 18.0 / 19.0) and edition
  • Installation and configuration on your environment, including POS config, asset bundles, and access-rule setup
  • Technical documentation — `__manifest__.py` and dependency notes, model/field reference, security matrix, and the sync/reconciliation flow
  • End-user guide plus a live training session for cashiers and POS managers covering offline mode, the status indicator, and exception handling
  • UAT on a staging copy of your database with a signed-off test plan and a documented rollback procedure
  • Post-go-live support window for defect fixes and configuration adjustments
  • Git repository handover with full commit history so the code is yours to keep and extend
  • Version-upgrade guidance for moving the module across Odoo releases

Who this is for

Multi-Register Retail Store in a Low-Connectivity Area

Runs several POS terminals where the ISP or mobile link drops daily. Cannot afford queues stalling at checkout, and needs sales, receipts, and stock to stay coherent across registers when one or all of them go offline.

Quick-Service Restaurant / Cafe Chain

High-throughput counters where a 10-minute outage means lost covers and angry lines. Needs uninterrupted order-taking, offline receipt printing, and clean reconciliation once the kitchen and till reconnect, without duplicate tickets.

Odoo Administrator / IT Manager

Owns the Odoo deployment and must trust the offline path. Wants real server-side code with proper `ir.model.access.csv` rules, an auditable sync queue, staging UAT, a rollback plan, and the git repo in-house — not a black-box browser hack.

Operations / Finance Lead

Accountable for revenue integrity and daily closing. Needs assurance that offline cash and payment lines reconcile correctly into journals, that no order is lost or double-counted, and that reconciliation exceptions are visible and actionable.

How POS Offline Mode Pro Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Offline durabilityOrders persisted to IndexedDB — survive refresh, crash, rebootDepends on your team's implementation and testing depthOften relies on Odoo's default in-memory cacheBrowser cache only; long outages or refresh can strand tickets
Reconnect syncDeterministic queued replay with idempotency keysMust be designed and hardened from scratchBasic re-push, usually no duplicate protectionBulk re-push on reconnect, no conflict handling
Stock / order conflict handlingServer-side reconciliation layer with a manager exception queuePossible but expensive to get rightRarely addressedNone — last write can silently win
Offline payments & receiptsLogged payment lines + cached QWeb receipt printingBuild-your-own; easy to miss journal edge casesPartial or receipt-onlyReceipt/payment can fail when backend is unreachable
Security model`ir.model.access.csv` + record rules matching POS-manager rolesOnly as strong as the developer appliesVaries; sometimes over-permissiveStandard POS ACLs, no offline-queue concept
Version & edition fitBuilt to your Odoo 17/18/19 and Community vs Enterprise editionTied to whoever wrote itOne build; may lag Odoo releasesShips with core; behavior set by Odoo
Delivery & validationScoped build, staging UAT, documented rollback (one working week)Timeline and QA depend on internal capacityInstant install, self-tested by youAlready present, no project
Ownership & supportFull source + git repo handover + post-go-live support windowYou own it but also own all maintenanceVendor-locked; support varies by authorCovered by your Odoo support/edition

Frequently Asked Questions about POS Offline Mode Pro

Doesn't Odoo POS already work offline?

Partly. Native Odoo caches the loaded catalog and lets the browser client ring up orders during a brief drop, but its guarantees break down on sustained outages, offline payments, receipt rendering, and multi-register conflicts. When the link returns, native pushes orders back with no idempotency or reconciliation, and a refresh during a long outage can strand unsynced tickets. POS Offline Mode Pro hardens exactly those edges with durable local storage, idempotent queued sync, and conflict-safe reconciliation.

How long does delivery take?

This is a build-to-order module, not an instant download. After a short scoping call to confirm your Odoo version, edition, register topology, and payment methods, typical delivery is one working week from confirmed scope. That window includes the build, UAT on a staging copy of your database, and a documented rollback before go-live.

Which Odoo versions and editions do you support?

We build against Odoo 17.0, 18.0, and 19.0. Offline-payment behavior differs between Community and Enterprise (the Enterprise IoT box and integrated terminals change what can happen offline), so we scope your edition explicitly during discovery and build the module to match.

What about offline card payments? Can a terminal charge without internet?

We cannot make a payment processor authorize a card without a network — no software can. What the module does is let cashiers continue the sale, record the payment line and method, print a receipt, and flag the payment for reconciliation when connectivity returns. During scoping we map your exact payment methods (cash, integrated terminal, external terminal) and define the correct, honest offline behavior for each.

How do you make sure orders aren't lost or duplicated when everything reconnects?

Every offline order is persisted to IndexedDB (surviving refresh or crash) and stamped with an idempotency key. The queued-sync engine replays orders in their original order, and the backend rejects duplicate submissions by key. Stock and sequence conflicts caused by other registers are reconciled by a dedicated server-side layer that surfaces true exceptions to a manager queue instead of silently overwriting data.

Do I get the source code, and how does ongoing support work?

Yes. You receive the full installable module source and the git repository with commit history — the code is yours to keep and extend. ECOSIRE provides a post-go-live support window for defect fixes and configuration adjustments, and remains available for paid version upgrades as you move across Odoo 17/18/19 releases.

Will this respect our existing POS permissions and audit trail?

Yes. New models and menus are locked down with `ir.model.access.csv` and record rules so queue and reconciliation data follow the same POS-manager permissions as the rest of your system. Re-sync uses Odoo's standard JSON-RPC/XML-RPC path the POS client already speaks, so nothing bypasses your access rules or audit logging.

Request a quote

POS Offline Mode Pro

A build-to-order Odoo POS extension that keeps checkout running through internet outages with resilient local caching, a durable local order queue, and conflict-safe reconciliation on reconnect. ECOSIRE builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.

  • Durable local order persistence in IndexedDB — in-flight `pos.order` state survives tab refresh, browser crash, or device reboot instead of living in volatile memory
  • Live connection-status indicator in the POS header (online / degraded / offline-queuing) driven by heartbeat pings, so cashiers always know the current mode
  • Local order queue that continues ringing up sales, discounts, and tax lines with the last-cached product, pricelist, and fiscal-position data during an outage
  • Deterministic queued-sync engine that replays offline orders in original creation order against the backend on reconnect

Request a Quotation

Tell us about your POS Offline Mode Pro requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.