Skip to content

UI: Define criteria for a stable 1.0 release #82611

Open

Description

@aduth

Discussion outcome: Decide the initial scope and criteria to release a 1.0 version of the @wordpress/ui package.

Background:

Starting with the limitations and requirements outlined in #71196, the @WordPress/gutenberg-components team has been building the @wordpress/ui package as a set of low-level UI primitives of the WordPress Design System. The design system's "Introduction" Storybook page and "Working with WordPress Design System packages" developer documentation have more context about how this package relates to existing packages like @wordpress/components.

Until now, the package has been built as "Experimental", with an accompanying warning notice on the package documentation, and incremental releases being published as 0.x releases following semantic versioning specification on "initial development", non-"stable" releases.

The @wordpress/ui package is a "bundled" package, which means that its version carries significance in how changes are communicated. And unlike other packages, it is not "externalized" as a window.wp global.

The purpose of this ticket is to come to agreement on the specific criteria that need to be reached to be confident in publishing the 1.0.0 release of the package and removing the experimental banner from the package.

Related issues:

Proposal:

The following should be achieved to consider a 1.0 stable release:

  • An initial set of components that fulfills baseline expectations of a general-purpose design system component library for building administrative interfaces, and which is also informed by usage of existing components in Gutenberg.
  • All @wordpress/ui components should be recommended, as indicated by inclusion in the @wordpress/use-recommended-components ESLint rule's implementation allowlist and use of the 'manifest' Storybook tag to indicate that a component is the canonical recommended design system component to be used for a given use-case

The following is a proposed list of components and their current implementation and recommended status, with logical groupings for readability. The groupings don't currently carry any significance in how the components are currently implemented or documented.

  • Actions
  • Content
  • Feedback
  • Overlays
    • AlertDialog
      • Implementation: #76847
      • Recommended
    • Dialog
      • Implementation: #75183
      • Recommended
    • Drawer
      • Implementation: #76690
      • Recommended
    • Menu
      • Implementation: #79560
      • Recommended
    • Popover
      • Implementation: #76438
      • Recommended
    • Tooltip
  • Layout and structure
  • Date
  • Form primitives
    • Autocomplete
    • Checkbox
    • CheckboxGroup
    • Combobox
      • Implementation: #78399
      • Recommended
    • ControlWithError
      • Implementation: #81574
      • Recommended
    • Field
    • Fieldset
    • Input
    • InputLayout
    • Radio
    • RadioGroup
    • SearchableChipSelect
    • SearchableSelect
      • Implementation: #80961
      • Recommended
    • Select
    • Slider
      • Implementation
      • Recommended
    • Switch
    • Textarea
    • ToggleGroup
      • Implementation
      • Recommended
    • ValidityIndicator
  • Form controls
    • AutocompleteControl
      • Implementation
      • Recommended
    • CheckboxControl
    • ComboboxControl
      • Implementation
      • Recommended
    • InputControl
    • RadioGroupControl
    • SearchableChipSelectControl
    • SearchableSelectControl
      • Implementation: #80979
      • Recommended
    • SelectControl
    • SliderControl
      • Implementation
      • Recommended
    • SwitchControl
    • TextareaControl
    • ToggleGroupControl
      • Implementation
      • Recommended
    • ValidatedInputControl
      • Implementation: #81627
      • Recommended
    • ValidatedTextareaControl
      • Implementation: #81984
      • Recommended
  • Utilities
    • KeyboardShortcutDisplay, KeyboardShortcutDescription, useKeyboardShortcutProps
    • VisuallyHidden

cc @WordPress/gutenberg-components

Activity

  1. added theissue type on Sep 8, 2026
  2. added
    [Type] DiscussionFor issues that are high-level and not yet ready to implement.
    Design SystemIssues related to the system of combining components according to best practices.
    on Sep 8, 2026
  3. mirka commented on Sep 8, 2026

    @mirka
    Member

    The "recommended" status currently covers somewhat of a range of "recommended-ness":

    1. Allowlisted for use in the repo, and marked as recommended in Storybook, but not confidently stable. (The legacy equivalent is usually not linted, and migration is on a "if desired" basis.)
    2. Assumed stable, and we actually lint the respective legacy component to actively encourage migration within the repo.

    I would explicitly define 2 as the lowest possible bar for a 1.0.

    I also remember we discussed that there may be a bar that is yet another level higher:

    1. We actually migrated a sufficient number of use cases in Gutenberg without needing API changes, which proves some level of real stability.
  4. aduth commented on Sep 9, 2026

    @aduth
    MemberAuthor

    3. We actually migrated a sufficient number of use cases in Gutenberg without needing API changes, which proves some level of real stability.

    Can we quantify this so that it's actionable?

  5. mirka commented on Sep 9, 2026

    @mirka
    Member

    Can we quantify this so that it's actionable?

    Setting a number across the board ("5 instances" or "20% of instances") doesn't really make sense since every component and call site has a different risk profile. I mean, we could set a minimum number of instances to the migrated, but in reality it would probably be more of a "use your best judgment for each component".

    Not sure if you're looking for a hard quantification here, but if somewhat flexible language is fine, we could say something like "a reasonable number of use cases in Gutenberg has been migrated to confirm API sufficiency" and leave it at that.

  6. aduth commented on Sep 9, 2026

    @aduth
    MemberAuthor

    I guess my point is less about putting a number to it, and more about establishing a clear expectation around what done looks like, since the purpose of the issue is in setting achievable criteria. Part of the "gut check" I would expect to happen at the component's recommendation itself, with Tooltip being an example of where we migrated a large chunk of existing usage before marking it as recommended, or more recently Menu (not yet recommended) and its migrations (example).

  7. mirka commented on Sep 9, 2026

    @mirka
    Member

    At least I wasn't treating the recommended status as an indicator for stability per se. A lot of the ones I marked, I haven't personally overseen migrations to confidently say that they're stable. I saw it more as an invitation for contributors to start adopting the components. Which is good to do early, because otherwise they would be bottlenecked by me.

    I don't have a strong opinion about how stable exactly the 1.0 should be, but I would err on the side of less stable, than more stable 😄 One goal of @wordpress/ui is to shed some fear of breaking changes, which was a factor contributing to slow decision making and shipping.

  8. jameskoster commented on Sep 14, 2026

    @jameskoster
    Contributor

    Here are a couple of components that feel like potential gaps for a v1. They already show up as multiple one-off implementations across admin/editor UI, so a shared primitive would pay for itself as a source of truth:

    • Divider / Separator
    • Avatar
    • ScrollArea
    • Pagination
    • DropZone

    Not arguing these must all block 1.0, more that they’re worth an explicit in/out call beforehand.

  9. ciampo commented on Sep 14, 2026

    @ciampo
    Contributor
    • Divider / Separator

    We already offer (or plan to) dedicated subcomponents where applicable (eg Menu).

    Do you think we'd need a standalone component, here? Especially since the main value would be styles, and we already espose WDPS tokens for the color?

    • Avatar

    This one should be relatively simple, especially if we're ok with matching base ui's features and behaviour

    • ScrollArea

    Last time this was discussed, I remember there wasn't a strong agreement around having / using such a component instead of native scrollbars. We should make sure we have alignment here

    • Pagination

    Would that be something similar to this?

    • DropZone

    This may require some technical planning, mostly around understanding if and how @wordpress/ui should support drag and drop interactions.


    In short: we may want to include Avatar in the initial list, but otherwise every other component doesn't feel necessarily ready for development, and would therefore delay the release further.

    This is not to say that we shouldn't discuss / plan / work on them, though.

  10. ciampo commented on Sep 24, 2026

    @ciampo
    Contributor

    Another thought: component naming. I think we're not 100% consistent at the moment: for example, we have IconButton to describe a button with only an icon, but then we have LinkButton to describe a link that looks like a button; in other words, if we had to follow the IconButton naming scheme, we should call it ButtonLink, and not LinkButton. Thoughts? Or maybe I'm just paying attention to unimportant details.

  11. mirka commented on Sep 25, 2026

    @mirka
    Member

    we should call it ButtonLink, and not LinkButton

    Right, that makes sense! Now is the time to change it.

  12. simison commented on Sep 29, 2026

    @simison
    Member

    to describe a link that looks like a button

    In my mind, they're all "Buttons" (they look like such, visually), and the prefix is "Link-" or "Icon-" ("specialises as Icon/Link but looks like Button"), and with that mental model they're consistent with each other and similarly named as form controls. I can see them grouped closer to Icon or Link as per their semantics, too. Or both named ButtonLink and ButtonIcon to stick closer to buttons.

    Not a strong opinion which way around to go. Overall, I don't think consumers think about semantics as often, and they go by visual appearance instead. :-)

  13. ciampo commented on Sep 29, 2026

    @ciampo
    Contributor

    I know they do, and that to them it won't make a big difference, but I think (and hope) that consistent naming can also contribute to greater clarity on the consumer side, in this case hopefully realizing that they're reaching out for a link that looks like a button, but is ultimately a link.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Design SystemIssues related to the system of combining components according to best practices.[Package] UI/packages/ui[Type] DiscussionFor issues that are high-level and not yet ready to implement.

    Type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions