> ## Documentation Index
> Fetch the complete documentation index at: https://docs.laportenard.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sync overview

> Real-time, offline-first synchronization for multi-terminal restaurant POS environments.

The sync system enables multiple POS terminals in a restaurant to share orders, table state, and payments in real time through an in-store hub server. It operates in two modes:

* **Direct mode** (default) — Each terminal talks directly to Odoo via HTTP polling and an outbox queue. No additional infrastructure needed.
* **Hub mode** (opt-in) — Terminals connect via WebSocket to a local Node.js hub that coordinates all activity and acts as the sole gateway to Odoo.

Hub mode is designed for high-volume restaurants with 5-15+ terminals where real-time coordination, conflict prevention, and reliable offline operation are critical.

## Package structure

```
rost_pos_restaurant/
├── nu_pos_sync_protocol/     # Shared TypeScript types & Zod validators
├── nu_pos_hub/               # Node.js hub server (runs on Raspberry Pi)
└── nu_pos_react/             # Frontend (Next.js POS app)
    └── src/realtime/         # Transport layer, hub connection, outbox
```

## Enable hub mode

<Steps>
  <Step title="Deploy the hub server">
    See [deployment](/sync/deployment) for Raspberry Pi, Docker, and systemd setup.
  </Step>

  <Step title="Configure Odoo">
    Set these fields on the shared POS config:

    * `nu_hub_enabled` = `True`
    * `nu_hub_url` = `ws://<hub-ip>:8766` (or leave blank for mDNS discovery)
  </Step>

  <Step title="Verify">
    Terminals pick up the config on next bootstrap and connect via WebSocket. Open the hub dashboard at `http://<hub-ip>:8766/` to confirm.
  </Step>
</Steps>
