How Offline POS Works
Odoo POS is designed to work offline. When the internet drops, the POS continues processing sales using locally cached data. Orders are stored in the browser and synced to the server when connectivity returns.
What Works Offline
| Feature | Offline | Notes |
|---|---|---|
| Process sales | Yes | Products and prices cached locally |
| Cash payments | Yes | No server needed |
| Card payments | Depends | Terminal may need connection |
| Print receipts | Yes | Direct to local printer |
| Apply discounts | Yes | Pre-configured discounts available |
| Customer lookup | Yes | Customer list cached at session start |
| Loyalty points | Partial | Cached balance, may be stale |
| Inventory check | No | Real-time stock requires server |
| New customer creation | Yes | Synced when back online |
| Refunds | Limited | If original order is cached |
Data Cached at Session Start
# When a POS session opens, Odoo downloads:
# - Product catalog (name, price, barcode, image)
# - Customer list (name, email, loyalty balance)
# - Pricelists and discount rules
# - Payment methods
# - Tax configurations
# - POS configuration settings
# This data lives in browser localStorage/IndexedDB
# Available even if server goes down mid-sessionSync Process
# When internet returns:
# 1. POS detects connectivity
# 2. Queued orders sent to server one by one
# 3. Server processes each order:
# - Creates sale.order
# - Creates account.move (invoice)
# - Updates stock (inventory)
# - Records payment
# 4. POS confirms sync success
# 5. Local queue cleared
# If sync fails for an order:
# - Order stays in queue
# - Retry on next sync attempt
# - Error logged for investigationCommon Sync Issues
| Issue | Cause | Fix |
|---|---|---|
| Orders not syncing | Server unreachable or error | Check server status, Odoo logs |
| "Product not found" on sync | Product archived since session started | Unarchive product, retry sync |
| Duplicate orders | Double sync attempt | Check for duplicate sale orders, delete extra |
| Price mismatch | Pricelist changed during offline period | Orders use cached prices (correct at time of sale) |
| Session won't close | Unsynced orders remain | Force sync or manually create orders from POS data |
Maximizing Offline Reliability
- Use Chrome — best IndexedDB support for POS data
- Don't clear browser cache — POS data is stored there
- Start session with good connection — ensure full data download
- Use local receipt printer — network printers may not work offline
- Train cashiers — they should know POS works offline and orders sync later
- Monitor sync queue — check for stuck orders periodically
Force Sync
# If orders are stuck in the sync queue:
# POS → click sync icon (cloud with arrows)
# Or: close and reopen the POS session
# Or: refresh the browser (F5)
# If still stuck, check browser console (F12):
# Look for sync errors in the Console tab
# Common: "RPC error", "connection refused", "invalid product"Offline Payment Terminals
# Card payment terminals have their own offline capabilities:
# - Stripe Terminal: stores transactions, syncs later
# - Adyen: offline mode with limits
# - SumUp: processes offline with stored keys
# If terminal is offline:
# - Accept cash payment instead
# - Or: write down card details for manual processing (PCI risk!)
# Best: ensure terminal has its own internet connection (4G backup)DeployMonkey + POS
DeployMonkey monitors POS connectivity and sync health. The AI agent alerts when sync queues build up, diagnoses sync failures, and ensures your sales data reaches the server reliably.