Empty State

First-run and zero-data moments that point forward.

v1.0.0·Updated Jul 8, 2026 · 10:45
Live Demo — Fully Interactive
No projects yetProjects you create will show up here. Start one to see it appear.
Configuration
Tone
Icon
Actions
Title
No projects yetA short line that says what belongs here and how to fill it.
<EmptyState title="No projects yet" action secondaryAction />
Behavior — The Engineering Contract
PropTypeNotes
iconReactNodeThe 56px glyph tile
title / descriptionstringWhat's missing, and why
toneneutral · warm · errorTints the icon for onboarding vs failure
codestringOptional error code (404, 500)
action / secondaryAction{ label, onClick }A warm primary and optional ghost

An Empty State fills a zero-data or error moment with a way forward. For a transient message use a Snackbar; while data loads use a Skeleton.

Anatomy
No projects yetProjects you create will show up here.
New project
1IconA glyph that names the situation.
2CopyA title and one honest, plain line.
3ActionThe one warm step that moves forward.
Do's and Don'ts
✓ Do
No invoices yetSend your first one to get paid.
New invoice

Always give a way forward — the empty state should point somewhere.

✕ Don't
No data.

Don't leave a bare "No data". That's a dead end, not a state.

✓ Do
Error 500Something went wrong

Own errors plainly, add a code, and offer Retry.

✕ Don't
Uh-oh! 🙈 A wild error appeared!!!

Don't be cutesy about failure. Be clear, calm and useful.

In context: Examples
A · Empty table
No results

Inside a table or list that has no rows to show.

B · 404 page
Error 404Page not found
Home

A full-page 404 with a route back home.

C · First run
Welcome

Onboarding the first time a surface is opened.

Measurements & Tokens
TokenValueRole
--empty-icon56px · radius 15Glyph tile
--empty-bg#0C0D10Stage background
--empty-title#F2F3F5Heading colour
--empty-warmrgba(255,122,0,.07)Onboarding icon tint
--empty-errorrgba(235,74,79,.07)Failure icon tint
--empty-pad42px 26pxColumn padding
Code
<div class="o-empty">
  <span class="o-empty__icon"><BoxIcon /></span>
  <span class="o-empty__title">No projects yet</span>
  <span class="o-empty__text">Projects you create will show up here.</span>
  <div class="o-empty__actions">
    <button class="o-btn o-btn--brand">New project</button>
  </div>
</div>