The smallest interface object a team treats as one thing in both design file and code: a button, card, or input.
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, living in both the design file and the codebase as the same object.
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 compositionCompositionWorkspaceA published arrangement of graph entities that has an identity of its own: a gallery, a board, a deck. Membership can be derived by running its query, position is authored by a person, and both are stored because both are real.View reference → 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
Composition is the component's own edge. Design ComponentcomposesDesign Componenthierarchy records the atom-to-organism nesting directly, and from 0.39.0 it is authorable across product graphs. The case it exists for is the wrapper: a product keeps its own design_component_composes_design_componentButton that wraps the design system's, adding a default or narrowing an API, while the design system is a separately published package with a separate graph. Until 0.39.0 that relationship could only be written in the wrapper's description, which is where 11 of them were found. The existing edge was widened rather than a second wraps verb minted, because a wrap is composition read across a graph boundary, and one relationship carrying two names is the shape the catalog works to avoid.
0.39.0 also gave the component a second, non-owning parent. feature_area_groups_design_component lets a feature areaFeature AreaProduct SpecificationA grouping of related featuresView reference → group components the way a real catalog does, by product surfaceSurfaceExperience DesignA place inside a screen, the features that occupy it, and the rule that decides who wins itView reference → rather than alphabetically. Ownership does not move with it: a component is still owned by its Design SystemDesign SystemThe root design system entityView reference →, its design_systemProductStrategyThe product being created, the root of the graphView reference →, or a parent component, and the area only groups. One component can sit under several areas without any of them holding it.product
Type-specific fields on BaseNode
atomic_levelenumAtomic design level
code_urlstringCode implementation URL
documentation_urlstringDocumentation / usage page URL
component_versionstringComponent version (independent of the wider design system version)
component_statusenumDistribution 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
26 edge types connected to this entity.
product_built_with_design_componentdesign_component_composes_design_componentdesign_system_contains_design_componentscreen_renders_design_componentsurface_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_componentfeature_uses_design_componentdesign_component_implements_featuredesign_component_consumes_servicea11y_issue_affects_design_componenta11y_annotation_targets_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_componentdesign_component_conforms_to_a11y_standarddesign_component_conforms_to_a11y_guideline1 framework use this entity type.