# Empty state > There's nothing to show, and the page has to say why and what to do. - Canonical: https://patterns.konigi.com/dashboards/empty-state - Group: Product mechanics - Level: implementation - Status: published - Updated: September 9, 2026 - Also called: no data yet, no results, zero state --- ## Problem The panel has nothing in it. The viewer can't tell whether that means nothing happened, something broke, or they never finished setting it up, and those three call for completely different responses. ## Solution Say which kind of empty this is, then say what to do about it. NN/g frames the job as three things: communicate system status, provide learning cues, and give a direct path to the key task. On a dashboard the first one carries most of the weight, because a dashboard's empty state is a factual claim about the world, and it's frequently wrong. The distinction that matters here and rarely comes up elsewhere: **no data is not zero**. A panel showing 0 errors and a panel whose query returned nothing look nearly identical and mean opposite things. One says the system is healthy. The other says you can't tell. Grafana treats this as a first-class problem on its alerting side, where No Data is its own state with four possible mappings—Set No Data state, Set Alerting state, Set Normal state, Keep last state—and the default refuses to call it normal, creating a `DatasourceNoData` instance instead. The panel side of the same product is less careful. The "No value" standard option defaults to a hyphen. ## Use when Always. Every container that can be empty will be empty for somebody, usually on their first day, and usually at the moment they're deciding whether the tool works. ## Don't use when Never skip the state. Do skip the illustration. A dashboard someone opens forty times a day shouldn't spend viewings five through forty on a friendly graphic explaining a condition they already understand. ## Trade-offs Empty states get written once, by someone who knows exactly why the container is empty, and read by someone who doesn't. They age badly: the copy names a button that was renamed two releases ago, or an integration that no longer exists. And the well-meaning versions absorb real failures. A query that errored, a permission the viewer doesn't hold, and a genuinely empty result all end up behind the same cheerful "Nothing here yet", which converts a fault into a shrug. ## Checklist - Which empty is this: never configured, configured but no data yet, filtered down to nothing, or failed? - Does the copy distinguish "no data" from "zero", and would the viewer read it correctly at a glance? - If a filter caused it, does the state name the filter and offer to clear it? - If a time range caused it, does it say the range? "No records for the selected date range" answers a question a blank panel leaves open. - Is there exactly one obvious next action, and does this viewer have permission to take it? - What does this look like on the fortieth viewing rather than the first? - Can an error ever land here instead of in an error state? - Does the empty state occupy the space the content will, so the layout doesn't jump when data arrives? - Is it real text a screen reader can reach, or a background image? - Who owns this copy when the thing it references gets renamed? ## Compare **Grafana** is two products on this question. Its alerting side treats No Data as a state you have to consciously map, with four options and a default that won't call missing data healthy. Its panel side renders a missing value as a hyphen, which on a wallboard ten feet away is a dash that tells the viewer nothing. **Sentry** makes the empty project *be* the install flow, putting the DSN and the snippet on the page, on the reasonable bet that a project with no events is a project nobody has wired up yet. **Honeycomb** is query-first, so an empty result leaves the query builder in place and the state implicitly reads "your query was fine and matched nothing", which is a different and more useful claim than "there is no data here". **Netdata** mostly sidesteps the first-run version by auto-discovering what's running on the node, which moves the empty state up a level: the question becomes whether the agent is connected, not whether a chart has data. ## Related Loading state is the frame immediately before this one, and confusing the two is the most common bug in the family. Error and stale state is the sibling that should be catching what empty states wrongly absorb. Freshness indicator answers "as of when", which an empty panel makes urgent. Filter bar is the usual cause. Data source badge says where the nothing came from. ## Examples ### Netdata Per-second charts, hundreds per node, with a per-chart anomaly ribbon instead of a band on the series. **Anomalies / Anomaly advisor** — captured September 11, 2026, Netdata Agent, Anomaly advisor (public registry node, signed out). operational, medium density, dark theme, desktop-web. Netdata answers the anomaly problem without drawing a band at all, and the difference is worth recording. Rather than shading an expected range around each series, it scores every metric continuously and plots the result as its own series: the percentage of dimensions currently anomalous, and beneath it the count. Both sit near zero for most of the window and spike to about 0.04% at five separate moments. The trade is clear once you see it. A band tells you whether this metric is behaving, on the same axes as the metric, and needs one per chart. A rate tells you whether anything at all is behaving, in one chart, and cannot tell you which thing without a second step—which is what the panel at the bottom is for, and why it currently reads "You haven't highlighted any timeframe yet." The finding requires a brush selection before it will name a single metric. Hotspots in this capture: - [Anomaly band](https://patterns.konigi.com/dashboards/anomaly-band) — Not a band. An anomaly rate as its own series, so one chart covers every metric instead of one band per chart. - [Explain this metric](https://patterns.konigi.com/dashboards/explain-this-metric) — Every section carries a sentence saying what it counts, directly under its heading rather than behind an icon. - [Cross-filter](https://patterns.konigi.com/dashboards/cross-filter) — Highlight a timeframe and the page names which metrics drove it. The selection is the query. - [Empty state](https://patterns.konigi.com/dashboards/empty-state) *(this pattern)* — "You haven't highlighted any timeframe yet"—the reason for the blank, and the action that fills it. - [Share and embed](https://patterns.konigi.com/dashboards/share-and-embed) — Generate report, top right. Whether the highlighted window travels with it is the question the button raises. ### Grafana (Grafana Labs) The reference implementation for panel grids, template variables, and stat panels; most other tools are defined by how they differ from it. **Linux node / fleet overview** — captured September 9, 2026, Grafana Play (signed out; no version string exposed). operational, medium density, dark theme, desktop-web. Captured while Play's demo data source was returning nothing, which makes this a better example of empty and error states than of the fleet overview it is meant to be. Three things are worth noticing. The top-left tile is red and reads "No metrics received - Check configuration", which is an actual diagnosis and the best thing on the page. The tile beside it exists to report when data last arrived, and it says "No data", so the freshness indicator has no freshness to report and doesn't say why. And every chart below says "No data" while the network panel says "No errors". A viewer scanning this page cannot tell from the words alone whether the network is clean or whether it is as unknown as everything else, which is the exact confusion the empty-state pattern exists to prevent. Hotspots in this capture: - [Header KPI strip](https://patterns.konigi.com/dashboards/header-kpi-strip) — Three status tiles across the top, before any chart. - [Error and stale state](https://patterns.konigi.com/dashboards/error-and-stale-state) — Red, and it names the cause: no metrics received, check configuration. - [Freshness indicator](https://patterns.konigi.com/dashboards/freshness-indicator) — The tile whose job is 'as of when', reporting No data instead. - [Data source badge](https://patterns.konigi.com/dashboards/data-source-badge) — Integration version, the only tile on the row still able to answer. - [Empty state](https://patterns.konigi.com/dashboards/empty-state) *(this pattern)* — No data, centred, with no distinction from a genuine zero. ## Related patterns - [Loading and skeleton state](https://patterns.konigi.com/dashboards/loading-state) — Forty panels are querying and the page shouldn't look broken for two seconds. - [Error and stale state](https://patterns.konigi.com/dashboards/error-and-stale-state) — One panel's query failed and the viewer must not mistake it for a zero. - [Freshness indicator](https://patterns.konigi.com/dashboards/freshness-indicator) — The viewer is about to act on a number and doesn't know how old it is. - [Data source badge](https://patterns.konigi.com/dashboards/data-source-badge) — The viewer needs to know where a panel's data comes from and whether that source is healthy. - [Filter bar](https://patterns.konigi.com/dashboards/filter-bar) — The viewer needs to narrow a large set by several attributes and see what's applied. ## Sources - [Nielsen Norman Group, Designing Empty States in Complex Applications](https://www.nngroup.com/articles/empty-state-interface-design/) - [Grafana, No Data and Error states in alerting](https://grafana.com/docs/grafana/latest/alerting/fundamentals/alert-rule-evaluation/nodata-and-error-states/) - [Grafana, Configure standard options (No value)](https://grafana.com/docs/grafana/latest/visualizations/panels-visualizations/configure-standard-options/) --- Screenshots on patterns.konigi.com are reproduced for commentary and criticism. Product names and marks belong to their owners.