Welcome to Vanilla Breeze
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
Visual state indicator: live, recording, streaming, presence (online/away/busy/offline), system state (running/paused/stopped/error). Variant drives color + animation.
<status-wc> is a presentational primitive that shows the current ongoing state of an entity — a stream, a user, a process, a service. The variant attribute drives color and animation; CSS handles all rendering; prefers-reduced-motion collapses pulse to a steady dot.
Three adjacent VB primitives sit in this neighborhood. Pick the one that matches the shape of what you're showing.
| Use this | When |
|---|---|
<status-wc> | Steady visual indication of an ongoing state — live/recording/online/offline/error. A dot you'd leave on screen indefinitely. |
<status-message> | One-shot prose announcement: Form submitted. Saved.Inline text, not a persistent badge. |
<notification-wc> | Action-bearing banner or panel with stewardship, dismissal, history. |
<toast-msg> | Transient feedback that dismisses on its own. |
Eleven variants ship out of the box, grouped by intent:
| Variant | Color | Animation | Intent |
|---|---|---|---|
live, recording, error | error / red | pulse | Active broadcast / recording / failed. |
streaming | warning / amber | pulse | In-flight stream. |
online | success / green | steady | Available / reachable. |
running | success / green | pulse | Active process. |
away, paused | warning / amber | steady | Idle / suspended. |
busy | error / red | steady | Reachable, do not disturb. |
offline, stopped | muted / gray | steady | Unreachable / halted. |
<status-wc data-variant="live">Live</status-wc><status-wc data-variant="online">Available</status-wc><status-wc data-variant="paused">Drained</status-wc><status-wc data-variant="error">Failing</status-wc>
<status-wc data-variant="online" data-size="xs">xs</status-wc><status-wc data-variant="online" data-size="sm">sm</status-wc><status-wc data-variant="online" data-size="md">md (default)</status-wc><status-wc data-variant="online" data-size="lg">lg</status-wc>
data-position controls where the dot sits relative to the label.
<status-wc data-variant="live" data-position="before">Live</status-wc><status-wc data-variant="live" data-position="after">Live</status-wc><status-wc data-variant="online" data-position="only" aria-label="Online"></status-wc>
Bare dot: data-position="only" visually hides the label but keeps it for screen readers. Required: aria-label or slot text content.
Force or suppress the pulse independent of the variant's default.
<status-wc data-variant="online" data-pulse="on">Online (forced pulse)</status-wc><status-wc data-variant="live" data-pulse="off">Live (suppressed)</status-wc>
Add a CSS rule. No JS change needed — the component reflects data-variant to CSS and any matching rule wins.
status-wc[data-variant="deploying"] { --status-dot-color: var(--color-info); --status-animation: status-pulse var(--status-pulse-duration) ease-in-out infinite;}
<status-wc data-variant="deploying">Deploying</status-wc>
Compose with other VB primitives rather than baking layouts into the component.
<header> <h1>Today's keynote</h1> <status-wc data-variant="live">Live</status-wc></header>
<layout-cluster> <user-avatar src="/ada.jpg" name="Ada Lovelace"></user-avatar> <strong>Ada Lovelace</strong> <status-wc data-variant="online" data-position="only" aria-label="Online"></status-wc></layout-cluster>
<dl> <dt>API</dt> <dd><status-wc data-variant="running">Healthy</status-wc></dd> <dt>Worker queue</dt> <dd><status-wc data-variant="paused">Drained</status-wc></dd> <dt>Webhook delivery</dt><dd><status-wc data-variant="error">Failing</status-wc></dd></dl>
role="status" with aria-live="polite" — screen readers announce variant changes.data-live="off" for decorative use (e.g., dashboards with many static indicators) — this removes the role and live-region.prefers-reduced-motion: reduce collapses pulse to a steady dot; color still conveys state.data-position="only" with aria-label for bare-dot situations.<status-wc data-variant="online" data-live="off">Online</status-wc>
| Attribute | Type | Default | Description |
|---|---|---|---|
data-variant | string | — | Built-in variant name or custom (see above). |
data-size | string | md | xs | sm | md | lg |
data-position | string | before | before | after | only |
data-pulse | string | variant default | on | off |
data-live | string | polite | Set to off to suppress announcements. |
aria-label | string | — | Required when slot has no text. |
| Property | Default | Purpose |
|---|---|---|
--status-dot-size | 0.625rem | Dot diameter (overrides data-size). |
--status-dot-color | variant-default | Dot color (overrides variant default). |
--status-pulse-duration | 2s | Pulse cycle duration. |
--status-animation | variant-default | Direct animation shorthand override. |
--status-gap | --size-2xs | Gap between dot and label. |
| Event | Bubbles | When |
|---|---|---|
status-wc:change | yes | data-variant mutates. detail: { variant, previousVariant }. |
<status-message> — textual one-shot announcement.<notification-wc> — action-bearing notification surface.<toast-msg> — transient feedback.role="status"