Skip to main content
Every item on the KDS moves through a defined lifecycle from the moment it’s added to a cart until it’s paid for and archived. Understanding each status is essential for kitchen throughput, waiter coordination, and honest analytics.

The full lifecycle

DishInk uses seven KDS statuses, stored on table_order_items.kds_status: printed is a peer of sent_to_kitchen, not a successor — it’s the path for kitchens that print rather than run a KDS screen. served follows either ready (KDS mode) or printed (paper mode).

Where each status appears

Each status has a distinct visual treatment across DishInk surfaces:

KDS ticket board

Waiter Bill Summary

Floor plan card border

The floor card border encodes the mix of statuses on the table’s active items: This lets a waiter see at a glance whether a table is “all preparing” (uniform amber) vs “some ready, some still cooking” (green/amber split).

Colour coding — the traffic-light rule

Prep timers use a three-band traffic light against each item’s prep_time_target_minutes: Overdue detection is driven by prep_started_at + prep_time_target_minutes — the item must be preparing for the timer to run. Items sitting in sent_to_kitchen don’t count against the prep target, but they do count against the station queue alert (alert_after_minutes).
Kitchen statuses

Kitchen statuses

Not every status can follow every other status. The valid transitions are:
  • pending → sent_to_kitchen — the waiter taps Send to Kitchen.
  • sent_to_kitchen → preparing — the kitchen taps Prepare (per item or bulk).
  • preparing → ready — the kitchen taps Ready.
  • ready → served — the kitchen taps Served, or the waiter serves it.
  • sent_to_kitchen → printed — for stations with thermal_print_enabled, the item skips the KDS screen and goes to the printer.
  • printed → served — the waiter ticks the served checkbox on the Bill Summary as food lands.
  • Any → cancelled — a void by the waiter (with manager PIN) or POS.
Status changes travel two ways: server realtime and LAN broadcast. If you see a status change back-track (e.g. readypreparing), it’s almost always an offline device catching up. Wait a beat before overriding.

Sync fabric — how a status change reaches every screen

Every tap on the KDS goes through the same three-layer sync:
  1. Optimistic local write — the UI updates immediately.
  2. Supabase realtime — the update fans out to every subscribed KDS, POS, and Waiter device via the waiter_kds_${restaurantId} channel.
  3. LAN side-car broadcast — in parallel, a broadcast fires over the local Wi-Fi so on-network devices update even when the cloud is slow.
If both fail (fully offline), the change queues locally and syncs on reconnect. The X QUEUED badge on the KDS header shows the pending count.

Automatic session transitions

Item statuses drive session statuses on the table: See Table Statuses for the parallel table-level lifecycle.

Voids and cancellations

A cancelled item is not deleted — the record is kept for audit and fiscal purposes. It shows on the Bill Summary with a strike-through and does not count toward the “every item served” transition. See Editing Orders for the void workflow.
Cancelled items with a cancel_reason land in the shift report so managers can see what got voided and why.

Tips & best practices

Train the kitchen to update statuses in real time, not in batches. A single tap per item at the right moment gives clean analytics and instant floor visibility. A batch of taps at the end of the rush destroys both.
Read the border colour on the floor plan before walking to a table. A diagonal split means the food is arriving in stages — don’t promise the guest a single arrival.
Set a queue alert on every station. Even a 20-minute threshold is better than none — it catches abandoned tickets before the guest catches you.

Common mistakes

Do not use one status for two purposes. “Ready” means plated and hot — not “almost done” and not “the waiter’s on the way”.
Do not skip preparing. Jumping straight from sent_to_kitchen to ready breaks every prep-time metric and hides slow starts.
Do not treat cancelled as reversible. Once an item is voided, the fiscal record excludes it — if the guest changes their mind, add a fresh line rather than trying to un-void.
Last modified on July 19, 2026