A reusable design component
A design component is a reusable unit of interface, a button, a card, an input field, defined once and used everywhere it appears. It is the smallest thing a team agrees to treat as a shared object rather than a one-off drawing. The tension that gives it weight is that a component has to live in two places at once, the design file and the codebase, and stay the same thing in both. When those two copies drift, the component stops being a single source of truth and becomes two competing ones.
The modern framing comes from Brad Frost's Atomic Design, conceived in 2013 and published as a book in 2016. Frost borrowed chemistry's vocabulary to describe how interfaces compose: atoms (a label, an input, a button) combine into molecules (a search field), molecules into organisms (a header), and organisms into templates and pages. The contribution was less the labels than the claim underneath them, that an interface is a system of recombinable parts rather than a stack of fixed page designs. Frost has since said the labels themselves matter little; the discipline of composition is the point.
The idea has older roots. Frost drew the compositional logic from Christopher Alexander's A Pattern Language (1977), and the engineering side matured in parallel as front-end frameworks (React in 2013, then Vue and others) made the component a literal unit of code, a function returning a piece of UI. The two lineages converged: what a designer calls a component and what an engineer calls a component became, for the first time, plausibly the same object.
That convergence sharpened the problem the concept now exists to solve. A button defined in Figma and re-implemented by hand in code is two artefacts that look identical on the day they ship and diverge by the next releaseReleaseProduct SpecificationA shipped version of the productView reference →. Design systemsDesign SystemDesign SystemThe root design system entityView reference → answered this by treating the component as the contract: documented states, named variantsVariantGrowthA variant in an A/B testView reference →, and increasingly a token-driven styling layer so a single colour change propagates to every instance. The live debate is how tight that coupling should be, with tools generating code from design files at one extreme and hand-built component libraries with rigorous documentation at the other.
A team building a billing dashboardDashboardData & AnalyticsAn analytics dashboardView reference → needsNeedUserA user need, pain, desire, or constraintView reference → a Button. They define it once: three variants (primary, secondary, ghost), four sizes, and the full interaction set, default, hover, focus, disabled, loading. Colour and radius come from tokens, so the button never carries a hard-coded #2563EB; it references colour.action.primary. The same definition exists as a React component consuming the same tokens.
Six weeks later the brand colourBrand ColourBrand IdentityA brand colour definitionView reference → shifts. One token value changes, and every button across forty-one screens updates, in the design file and in production, without anyone touching forty-one screens. A new engineer building the refunds page reaches for the existing Button instead of styling a fresh one, so the refund flow inherits the focus ring and disabled behaviour for free. The component earned its keep the moment reuse beat reinvention.
spacing.4 = 16px, colour.action.primary. A component consumes tokens to style itself. Edit the token and every component that references it moves; the token is the atom of style, the component the atom of structure.In the Unified Product Graph, a design component sits in the Experience, Design & Brand region as a self-nesting hub, the one entity that mirrors atomic design's atom-to-organism nesting directly. A Design SystemcontainsDesign Componenthierarchy edge places it under its system; design_system_contains_design_componentDesign Componentstyled byDesign Tokenhierarchy wires it to the values it consumes; design_component_styled_by_design_tokenDesign ComponentfollowsDesign Patternhierarchy records the solution it embodies; and design_component_follows_design_patternProductbuilt withDesign Componenthierarchy connects it outward to what actually ships. That structure makes the single-source-of-truth claim queryable: a component connected to its tokens, its pattern, and the product is provably the same object across design and code, and a component connected to nothing is visibly orphaned.product_built_with_design_component
Type-specific fields on BaseNode
atomic_levelstringAtomic design level
code_urlstringCode implementation URL
documentation_urlstringDocumentation / usage page URL
component_versionstringComponent version (independent of the wider design system version)
component_statusstringDistribution readiness
accessibility_notesstringComponent-specific accessibility guidance
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
4 phases — initial: alpha · template: MATURITY
21 edge types connected to this entity.
product_built_with_design_componentdesign_component_composes_design_componentdesign_system_contains_design_componentscreen_renders_design_componentdesign_component_styled_by_design_tokendesign_component_follows_design_patterndesign_component_governed_by_design_guidelinedesign_component_specified_by_interaction_specdesign_component_composes_design_componentdesign_component_implements_featuredesign_component_consumes_servicea11y_issue_affects_design_componentproduct_expressed_as_design_componentproduct_manifests_in_design_componentdesign_component_surfaces_insight_insightdesign_component_specifies_for_servicedesign_component_requires_data_from_serviceservice_implements_design_componentservice_constrains_interaction_design_componentservice_enables_pattern_design_componentdecision_affects_design_component1 framework use this entity type.