Skip to main content
<kodo-status> is a drop-in Web Component that renders a live status panel inline in your app’s layout — right where you place it. It shows overall status, active incidents, and each component with its 90-day uptime, updating in real time over Server-Sent Events. It renders inside a Shadow DOM, so your site’s CSS can’t leak in and its styles can’t leak out — yet you can still theme it with a handful of CSS custom properties.
Prefer a floating badge or banner pinned to a corner? Use the Status Widget (widget.js) instead. Need a fully sandboxed embed? The classic iframe at …/status/{slug}/embed still works. The element is the best fit when you want status in the flow of your own UI, styled to match.

Quick start

Replace your-page-slug with the slug of a public status page. The script defines the element once; every <kodo-status> on the page upgrades automatically, even ones already in your HTML before the script loads. You only need the <script> tag once, no matter how many elements you render. The element self-configures its API origin from the script’s own URL, so you don’t need to set base when loading embed.js from kodostatus.com.

What it renders

  • Overall status — a live-pulsing dot + label (e.g. “All Systems Operational”).
  • Active incidents — title + severity for anything unresolved.
  • Components — each service with its status and, when a monitor is attached, its 90-day uptime % and a daily uptime sparkline. Components without a monitor simply show their status (no fabricated uptime).

Attributes

Theming

Set any of these CSS custom properties on the element (or an ancestor) — they inherit through the Shadow DOM boundary. Semantic status colors (green / amber / red) are intentionally fixed so health stays legible.

Events

The element emits two events. Both bubble and are composed, so you can listen on the element itself, on window, or on any ancestor — including from outside a host Shadow DOM.

Properties

Read the latest data off the element at any time:

Headless mode

Add headless and the element renders nothing — it just fetches, subscribes to live updates, and emits events. This is the escape hatch for building a completely custom UI on Kōdo’s live status, with none of the built-in styling:
You get the same real-time SSE stream and the same .data / .status properties — just no DOM from Kōdo. It’s the lightest possible way to wire live status into a design system that owns its own rendering.

Frameworks

Custom elements are just HTML, so they work in any framework.

Live updates & resilience

The element paints instantly from the cached JSON endpoint, then subscribes to the SSE stream for real-time changes. If EventSource isn’t available it falls back to polling. Uptime figures are fetched once and preserved across live status updates, so the panel never flickers its history.
The element only reads public status pages. Keep sensitive components on a private or audience-restricted page and they won’t appear in an embed.