Stockio

Design System Naming Conventions for Components

Create component naming conventions that map cleanly between Figma and code, clarify variants, prevent ambiguity, and support safe renaming as your library grows.

By Jonah Weiss

Design Systems Lead ·

On this page

A component name is a search term, an API decision, and a promise about scope. When designers say “primary tile” while developers import “FeaturePanel,” every handoff includes translation work. A naming convention should reduce that work without forcing design tools and programming languages to use identical syntax.

Start with a shared naming model

List the concepts consumers already search for: button, dialog, pagination, navigation, and notification. Prefer established interface vocabulary over internal project nicknames. Record the concept, its public name in code, its design-library label, and a one-sentence definition. Agreement on meaning matters more than capitalization.

Use the JSON to TypeScript tool to turn a draft naming registry into an initial interface. Paste a small JSON record, generate the shape, then review optional fields and constrained values manually. Generated interfaces describe examples; they do not automatically capture your naming policy or all valid cases.

Separate concept identity from display syntax. A design asset called “Navigation / Breadcrumb” can correspond to a code export named Breadcrumb without introducing two different concepts. The mapping should be documented and searchable in both directions.

Name by purpose rather than appearance

“BlueBox” becomes misleading when a theme changes. “CustomerSummary” describes a domain composition but may be too specific for a foundational library. Ask what the component guarantees and which consumers should use it before choosing the noun. Name generic primitives generically and keep business workflows in product-owned packages.

Avoid positional names such as LeftPanel when the same component may move in a responsive layout or a right-to-left interface. “FilterPanel” describes a purpose that survives that change. Likewise, “LargeThing” is not a useful substitute for deciding whether size is a variant or a genuinely separate component.

Use a registry entry that makes relationships visible:

type ComponentName = {
id: string;
codeExport: string;
designLabel: string;
aliases: string[];
};

const breadcrumb: ComponentName = {
id: "navigation.breadcrumb",
codeExport: "Breadcrumb",
designLabel: "Navigation / Breadcrumb",
aliases: ["crumb-trail"]
};

The stable identifier supports cross-references even if the human-facing label changes. The TypeScript handbook explains the typing mechanics; the naming decisions remain a team responsibility.

Separate components, variants, and states

A variant is an intentional supported choice, such as emphasis or size. A state describes a condition, such as loading or invalid. A compound component exposes related parts with a coordinated contract. Mixing these categories produces names like “SmallDangerLoadingButton,” which are difficult to search and harder to maintain.

Choose a few variant axes that consumers can predict. For example, use size values consistently within a component family and document exceptions. Do not promise that “small” has the same pixel height across every platform; promise the actual meaning your library can support, such as a compact presentation within a given component.

Keep boolean names readable at call sites. A property like disabled follows native HTML expectations; a vague property like alternate does not explain what changes. Consult the React documentation on props for component API context, while preserving framework-neutral terminology in the design library.

Document invalid combinations rather than letting names suggest unlimited freedom. If a destructive action cannot use a quiet emphasis in your product context, explain that constraint and enforce it where practical. Naming is useful only when the allowed combinations have a coherent meaning.

Make discovery work in both tools

Create a small glossary with canonical names and common aliases. Search should lead “popup” to the appropriate dialog or popover documentation instead of simply reporting no results. Explain differences between neighboring concepts with concrete examples; avoid treating industry terminology as universally consistent.

In design tools, use grouping to support browsing without creating deeply nested paths that obscure the component name. In code, organize public exports around supported entry points rather than exposing private folder structure. The two systems can share a vocabulary without mirroring every folder.

A public naming policy should cover capitalization, singular versus plural nouns, abbreviations, and reserved suffixes. Keep it short enough to apply during review. Use abbreviations only when the audience reliably knows them, and provide expanded search aliases when needed.

When documenting implementation details, link to the MDN custom properties reference for CSS naming syntax. Do not use an implementation convention, such as a CSS prefix, as the sole organizing principle for all design assets. Related development resources can support platform-specific naming guidance without changing the shared glossary.

Rename without breaking recognition

Renaming an exported component can break imports, documentation links, saved searches, and conversations. Treat it as a migration rather than a cosmetic cleanup. Record the old name, new name, reason, supported transition period, and whether behavior changes at the same time.

Use compatibility aliases where your packaging and maintenance policy allow them. Mark the old name deprecated, update first-party examples immediately, and give consumers an exact replacement. Avoid leaving both names equally prominent forever, which turns a temporary bridge into a permanent ambiguity.

Test a proposed rename with people who did not invent it. Ask them to find the component using realistic tasks, not a list of approved names. If the convention requires repeated explanation, simplify the vocabulary or improve aliases before adding more rules.

Review naming drift during library releases. New terms should extend the glossary intentionally, not appear because the author preferred a different synonym. Keep further governance guidance under Design Systems, and assign one maintainer to resolve terminology conflicts when discussion stalls.

Resolve a naming collision with a task test

Imagine two teams requesting the name Select. One component opens a fixed list of choices; the other accepts text input and filters remote results. Sharing a label would hide meaningful differences in keyboard behavior, loading, and empty results. Start by describing the user task and supported interaction for each, then compare those descriptions with the existing glossary.

Run a discovery check with three realistic prompts: choose a country from a fixed list, find a customer by typing, and choose several labels. Ask contributors which documented component they would open first and why. This is a small usability exercise, not a statistical study; its value is exposing ambiguous terminology before a public API spreads.

Keep the final canonical names, rejected alternatives, and common search aliases together. If the names still require a long explanation, improve the boundary descriptions or reconsider the component split. Avoid solving the collision with arbitrary numeric suffixes or team prefixes, which preserve organizational history without helping consumers choose the correct interaction.

Key takeaways

  • Name components for stable purpose, not color or screen position.
  • Map design labels and code exports through a shared concept registry.
  • Keep variants, states, and component parts distinct.
  • Support search aliases without multiplying canonical names.
  • Treat public renames as migrations with clear ownership and deadlines.
Featured sponsor

Reach designers & developers at work

Put your product next to the tools people use every day. One sponsor per placement, no tracking pixels.

Become a sponsor

Keep reading

Related articles

More in Design Systems
Design Systems

How to Deprecate Design System Components Safely

Plan component deprecations with usage evidence, replacement contracts, migration guidance, compatibility windows, and removal checks that product teams can verify.

Includes: JSON to TSMaya LindqvistMaya Lindqvist
JavaScript & Frameworks

10 Best TypeScript Learning Resources

Choose a practical path into TypeScript with official guides, books, interactive courses, and exercises for JavaScript learners, plus tips for practising types against realistic data.

Includes: JSON to TSSofia MarchettiSofia Marchetti
JavaScript & Frameworks

10 Best Free React Courses (Learn React for Free)

Choose a free React learning path that matches your experience, from official lessons and guided exercises to full projects. See what each resource teaches and what you should know first.

Includes: JSON to TSSofia MarchettiSofia Marchetti
AI Builders & APIs

8 Best AI Agent Frameworks for Developers

Compare eight practical frameworks for building AI agents, from visual workflows to code-first orchestration, and learn what to consider before choosing one for a project.

Includes: JSON to TSDaniel KimDaniel Kim
Backend & APIs

8 Best Databases for Web Apps

Find a database that fits your web app, from familiar relational systems to flexible document and serverless options, with practical strengths, limitations, and selection advice.

Includes: JSON to TSChidi NwosuChidi Nwosu
JavaScript & Frameworks

10 Best React Frameworks

Compare ten React frameworks for websites, web apps, and full-stack projects. Learn which fits your rendering needs, hosting plans, team experience, and appetite for configuration.

Includes: JSON to TSDaniel KimDaniel Kim