# Display rules

> Hide the widget on paths, mobile or checkout, and how the widget behaves when the assistant is unavailable.

Source: https://shopassist.coec.dk/docs/widget/display-rules · Updated 2026-10-01

The loader decides on every page whether to show the launcher, in this order:

1. The store's widget status (switched off, paused or disconnected → hidden).
2. **Checkout:** hidden on checkout pages unless **Show on checkout** is on. Plugins also never render it on checkout; on Shopify it never runs on checkout at all.
3. **Hide on paths:** up to 50 patterns such as `/account/*` or `/b2b/**` (`*` = anything except `/`, `**` = anything, `?` = one character; case-sensitive; patterns start with `/`).
4. **Show on mobile:** off hides it on touch devices narrower than 768 px.
5. **Assistant unavailable:** see below.
6. **Launcher "none"** (`data-launcher="none"`): no launcher, but `ShopAssist.open()` works for your own button.

Rules are re-evaluated on single-page navigation and on `ShopAssist.setPageContext()`. An open chat stays open until the shopper closes it.

## When the assistant is unavailable [#unavailable]

If the AI can't answer (provider down without fallback, a plan limit, the daily cost guard), the widget becomes a contact surface instead of a broken chat: it opens with your contact form or a "talk to a person" option, depending on your handoff settings, and hides the composer unless a live agent is available. It never mentions plans or billing to shoppers. Without any contact option, the launcher is hidden.
