PatternFly Elements v6 Migration Plan
Ordered PR plan for issue #3110 . UPDATE PRs first (rename existing v5 elements
to v6 and port APIs), then CREATE PRs (new elements not in v5).
CRITICAL : All PRs MUST target staging/pfv6 branch, NOT main
Phase 0: Infrastructure (do first)
These PRs unblock everything else.
PR 0.1: Remove/replace dev server with cem serve (#3102 )
Issue #3110 calls out hardcoded tag names in dev server
cem serve handles import maps, CSS transforms, chromeless testing
Remove tools/pfe-tools/dev-server/ and wire up cem serve
Update npm run dev / npm start scripts
PR 0.2: Rename tooling and config for v6 prefix (#3130 )
Update eslint.config.js ignore globs (icon demo path) to include pf-v6 as
well as pf-v5 paths
Update commitlint.config.js to handle pf- prefix (no v5)
Audit elements/package.json exports for orphaned entries
Update tsconfig paths if needed
Update web-test-runner.config.js and playwright.config.ts globs
Keep v5 prefix until all elements are updated.
PR 0.3: Update docs scaffolding (#3131 )
Update docs/_snippets/ for v6 element names
Update docs/framework-integration/ examples
Update docs/components/ templates
Phase 1: UPDATE PRs (rename v5 -> v6, port to v6 API)
Existing v5 elements renamed to pf-v6-{name} and updated to v6 PatternFly
design tokens, CSS, and React API parity. Order by dependency graph:
leaf components first, then composites.
Tier 1: Zero-dependency leaf elements
These elements don't depend on other PF elements. Port first.
#
Element
v5 name
Notes
Issue
1.1
pf-v6-spinner
pf-v5-spinner
Pure CSS animation, simplest possible port
#3037
1.2
pf-v6-badge
pf-v5-badge
Simple text + count
#2982
1.3
pf-v6-avatar
pf-v5-avatar
Image with fallback
#2979
1.4
pf-v6-banner
pf-v5-banner
Simple status bar
#2983
1.5
pf-v6-icon
pf-v5-icon
Icon loading, used by many others
#3014
1.6
pf-v6-tooltip
pf-v5-tooltip
Floating UI, no PF deps
#3048
1.7
pf-v6-progress
pf-v5-progress
Progress bar, ARIA managed internally
#3031
1.8
pf-v6-switch
pf-v5-switch
FACE element, toggle
#3038
1.9
pf-v6-text-input
pf-v5-text-input
FACE element
#3043
1.10
pf-v6-text-area
pf-v5-text-area
FACE element
#3041
1.11
pf-v6-timestamp
pf-v5-timestamp
Date formatting
#3045
1.12
pf-v6-back-to-top
pf-v5-back-to-top
Scroll button
#2981
1.13
pf-v6-background-image
pf-v5-background-image
Background container
#2980
1.14
pf-v6-helper-text
pf-v5-helper-text
Form helper text
#3012
Tier 2: Single-dependency elements
Depend on one or more Tier 1 elements.
#
Element
v5 name
Depends on
Issue
2.1
pf-v6-button
pf-v5-button
icon, spinner
#2984
2.2
pf-v6-label
pf-v5-label
icon, button
#3017
2.3
pf-v6-chip
pf-v5-chip
icon, button
2.4
pf-v6-hint
pf-v5-hint
(light deps)
#3013
2.5
pf-v6-panel
pf-v5-panel
(light deps)
#3029
2.6
pf-v6-code-block
pf-v5-code-block
button (copy)
#3002
2.7
pf-v6-clipboard-copy
pf-v5-clipboard-copy
button, tooltip
#3001
2.8
pf-v6-progress-stepper
pf-v5-progress-stepper
icon
#3032
2.9
pf-v6-tile
pf-v5-tile
icon
Tier 3: Composite elements
Depend on multiple Tier 1-2 elements.
#
Element
v5 name
Depends on
Issue
3.1
pf-v6-alert
pf-v5-alert
icon, button
#2978
3.2
pf-v6-card
pf-v5-card
(slots-heavy)
#2986
3.3
pf-v6-accordion
pf-v5-accordion
expandable pattern
#2976
3.4
pf-v6-tabs
pf-v5-tabs
RTI controller
#3040
3.5
pf-v6-label-group
pf-v5-label-group
label, chip
3.6
pf-v6-popover
pf-v5-popover
floating UI, button
#3030
3.7
pf-v6-modal
pf-v5-modal
native dialog, button
#3022
3.8
pf-v6-table
pf-v5-table
complex, many sub-elements
#3039
3.9
pf-v6-jump-links
pf-v5-jump-links
navigation pattern
#3016
3.10
pf-v6-search-input
pf-v5-search-input
text-input, button
#3033
3.11
pf-v6-dropdown
pf-v5-dropdown
floating UI, menu pattern
#3008
3.12
pf-v6-select
pf-v5-select
floating UI, FACE, menu
#3034
Phase 2: CREATE PRs (new elements not in v5)
Components that exist in React v6 but have no v5 web component equivalent.
Order by dependency and complexity.
Tier 4: Simple new elements
#
Element
React source
Notes
Issue
4.1
pf-v6-divider
Divider
<hr> with variants, very simple
4.2
pf-v6-skeleton
Skeleton
Loading placeholder, CSS-only
#2940
4.3
pf-v6-truncate
Truncate
Text truncation with tooltip
#3050
4.4
pf-v6-content
Content
Typography wrapper
4.5
pf-v6-title
Title
Heading with size variants
4.6
pf-v6-radio
Radio
FACE element
#2566
4.7
pf-v6-checkbox
Checkbox
FACE element
#2574
4.8
pf-v6-skip-to-content
SkipToContent
A11y skip link
#2941
4.9
pf-v6-brand
Brand
Logo/brand image
4.10
pf-v6-backdrop
Backdrop
Modal overlay
Tier 5: Medium complexity new elements
#
Element
React source
Notes
Issue
5.1
pf-v6-expandable-section
ExpandableSection
<details> based
#2932
5.2
pf-v6-description-list
DescriptionList
<dl> semantic
#2931
5.3
pf-v6-breadcrumb
Breadcrumb
Navigation with <nav>
#2688
5.4
pf-v6-list
List
Ordered/unordered with variants
5.5
pf-v6-notification-badge
NotificationBadge
Badge with icon
#2937
5.6
pf-v6-number-input
NumberInput
FACE, stepper
#3026
5.7
pf-v6-form-select
FormSelect
Native <select> wrapper, FACE
#3011
5.8
pf-v6-slider
Slider
Range input, FACE
#3036
5.9
pf-v6-simple-list
SimpleList
Selection list
#3035
5.10
pf-v6-action-list
ActionList
Button group layout
#2977
5.11
pf-v6-input-group
InputGroup
Form input composition
#3015
5.12
pf-v6-toggle-group
ToggleGroup
Segmented control
#3046
5.13
pf-v6-empty-state
EmptyState
Empty content placeholder
#3010
5.14
pf-v6-hero
Hero
Hero banner section
Tier 6: Complex new elements
#
Element
React source
Notes
Issue
6.1
pf-v6-menu
Menu
Complex, foundation for dropdown/select
#3020
6.2
pf-v6-menu-toggle
MenuToggle
Toggle for menu/dropdown
#3021
6.3
pf-v6-nav
Nav
Navigation sidebar
#3024
6.4
pf-v6-pagination
Pagination
Page navigation controls
#2938
6.5
pf-v6-toolbar
Toolbar
Action bar with groups
#3047
6.6
pf-v6-drawer
Drawer
Sliding panel
#3007
6.7
pf-v6-sidebar
Sidebar
Layout sidebar
6.8
pf-v6-notification-drawer
NotificationDrawer
Notifications panel
#3025
6.9
pf-v6-overflow-menu
OverflowMenu
Responsive menu overflow
#3027
6.10
pf-v6-data-list
DataList
Flexible data display
#3005
6.11
pf-v6-masthead
Masthead
App header bar
#3019
6.12
pf-v6-page
Page
App page layout
#3028
6.13
pf-v6-form
Form
Form layout and validation
#1663
6.14
pf-v6-text-input-group
TextInputGroup
Composite input
#3042
6.15
pf-v6-dual-list-selector
DualListSelector
Two-list transfer
#3009
Tier 7: High-complexity
#
Element
React source
Notes
Issue
7.1
pf-v6-calendar-month
CalendarMonth
Date picker calendar
#2985
7.2
pf-v6-date-picker
DatePicker
Full date picker
#2536
7.3
pf-v6-time-picker
TimePicker
Time selection
#3044
7.4
pf-v6-file-upload
FileUpload
File upload with preview
#2693
7.5
pf-v6-multiple-file-upload
MultipleFileUpload
Multi-file upload
#3023
7.6
pf-v6-wizard
Wizard
Multi-step flow
#3051
7.7
pf-v6-tree-view
TreeView
Hierarchical tree
#3049
7.8
pf-v6-login-page
LoginPage
Full login pattern
#3018
7.9
pf-v6-about-modal
AboutModal
Branded about dialog
#2926
Layout Components (NOT converted to custom elements)
These use PatternFly CSS layout classes directly. Document usage, don't wrap.
Bullseye, Flex, Gallery, Grid, Level, Split, Stack, List, Simple List, Divider
Per-PR Checklist
Use /update-element for Phase 1 PRs, /create-element for Phase 2 PRs.
For each PR:
API designed per .claude/ADVICE.md rules
CSS custom properties match computed CSS and Stylesheets of react demos on patternfly.org via chrome MCP
Element source with @summary, JSDoc
CSS with tokens, logical properties, nesting
Demos matching patternfly.org (name parity)
Tests (public API, a11ySnapshot, form submission if FACE)
/review-api audit
/review-demos audit
/review-a11y audit
Lint passes (eslint, stylelint)
Visual parity verified via Chrome MCP
Checklist for v6 rename (beyond element source files):
Dev Server
Important
NB: likely remove dev server altogether in favour of cem serve
tools/pfe-tools/dev-server/plugins/templates/index.html - element tag names hardcoded in shell UI (nav button, card). Update alongside rename.
tools/pfe-tools/dev-server/bundle.ts - icon export hardcoded. Update.
Repo
eslint.config.js ignore glob - icon demo path hardcoded with element name. Update.
elements/package.json exports - orphaned entries from renamed elements linger silently. no-missing-package-exports catches missing but not extra. Audit manually.
Docs
docs/_snippets/ - independent of component docs, easy to miss.
docs/framework-integration/ - inline code examples with element names.
PatternFly Elements v6 Migration Plan
Ordered PR plan for issue #3110. UPDATE PRs first (rename existing v5 elements
to v6 and port APIs), then CREATE PRs (new elements not in v5).
CRITICAL: All PRs MUST target
staging/pfv6branch, NOTmainPhase 0: Infrastructure (do first)
These PRs unblock everything else.
PR 0.1: Remove/replace dev server with
cem serve(#3102)cem servehandles import maps, CSS transforms, chromeless testingtools/pfe-tools/dev-server/and wire upcem servenpm run dev/npm startscriptsPR 0.2: Rename tooling and config for v6 prefix (#3130)
eslint.config.jsignore globs (icon demo path) to include pf-v6 aswell as pf-v5 paths
commitlint.config.jsto handlepf-prefix (nov5)elements/package.jsonexports for orphaned entriestsconfigpaths if neededweb-test-runner.config.jsandplaywright.config.tsglobsKeep v5 prefix until all elements are updated.
PR 0.3: Update docs scaffolding (#3131)
docs/_snippets/for v6 element namesdocs/framework-integration/examplesdocs/components/templatesPhase 1: UPDATE PRs (rename v5 -> v6, port to v6 API)
Existing v5 elements renamed to
pf-v6-{name}and updated to v6 PatternFlydesign tokens, CSS, and React API parity. Order by dependency graph:
leaf components first, then composites.
Tier 1: Zero-dependency leaf elements
These elements don't depend on other PF elements. Port first.
pf-v6-spinnerpf-v5-spinnerpf-v6-badgepf-v5-badgepf-v6-avatarpf-v5-avatarpf-v6-bannerpf-v5-bannerpf-v6-iconpf-v5-iconpf-v6-tooltippf-v5-tooltippf-v6-progresspf-v5-progresspf-v6-switchpf-v5-switchpf-v6-text-inputpf-v5-text-inputpf-v6-text-areapf-v5-text-areapf-v6-timestamppf-v5-timestamppf-v6-back-to-toppf-v5-back-to-toppf-v6-background-imagepf-v5-background-imagepf-v6-helper-textpf-v5-helper-textTier 2: Single-dependency elements
Depend on one or more Tier 1 elements.
pf-v6-buttonpf-v5-buttonpf-v6-labelpf-v5-labelpf-v6-chippf-v5-chippf-v6-hintpf-v5-hintpf-v6-panelpf-v5-panelpf-v6-code-blockpf-v5-code-blockpf-v6-clipboard-copypf-v5-clipboard-copypf-v6-progress-stepperpf-v5-progress-stepperpf-v6-tilepf-v5-tileTier 3: Composite elements
Depend on multiple Tier 1-2 elements.
pf-v6-alertpf-v5-alertpf-v6-cardpf-v5-cardpf-v6-accordionpf-v5-accordionpf-v6-tabspf-v5-tabspf-v6-label-grouppf-v5-label-grouppf-v6-popoverpf-v5-popoverpf-v6-modalpf-v5-modalpf-v6-tablepf-v5-tablepf-v6-jump-linkspf-v5-jump-linkspf-v6-search-inputpf-v5-search-inputpf-v6-dropdownpf-v5-dropdownpf-v6-selectpf-v5-selectPhase 2: CREATE PRs (new elements not in v5)
Components that exist in React v6 but have no v5 web component equivalent.
Order by dependency and complexity.
Tier 4: Simple new elements
pf-v6-divider<hr>with variants, very simplepf-v6-skeletonpf-v6-truncatepf-v6-contentpf-v6-titlepf-v6-radiopf-v6-checkboxpf-v6-skip-to-contentpf-v6-brandpf-v6-backdropTier 5: Medium complexity new elements
pf-v6-expandable-section<details>basedpf-v6-description-list<dl>semanticpf-v6-breadcrumb<nav>pf-v6-listpf-v6-notification-badgepf-v6-number-inputpf-v6-form-select<select>wrapper, FACEpf-v6-sliderpf-v6-simple-listpf-v6-action-listpf-v6-input-grouppf-v6-toggle-grouppf-v6-empty-statepf-v6-heroTier 6: Complex new elements
pf-v6-menupf-v6-menu-togglepf-v6-navpf-v6-paginationpf-v6-toolbarpf-v6-drawerpf-v6-sidebarpf-v6-notification-drawerpf-v6-overflow-menupf-v6-data-listpf-v6-mastheadpf-v6-pagepf-v6-formpf-v6-text-input-grouppf-v6-dual-list-selectorTier 7: High-complexity
pf-v6-calendar-monthpf-v6-date-pickerpf-v6-time-pickerpf-v6-file-uploadpf-v6-multiple-file-uploadpf-v6-wizardpf-v6-tree-viewpf-v6-login-pagepf-v6-about-modalLayout Components (NOT converted to custom elements)
These use PatternFly CSS layout classes directly. Document usage, don't wrap.
Per-PR Checklist
Use
/update-elementfor Phase 1 PRs,/create-elementfor Phase 2 PRs.For each PR:
.claude/ADVICE.mdrules@summary, JSDoc/review-apiaudit/review-demosaudit/review-a11yauditChecklist for v6 rename (beyond element source files):
Dev Server
Important
NB: likely remove dev server altogether in favour of
cem servetools/pfe-tools/dev-server/plugins/templates/index.html- element tag names hardcoded in shell UI (nav button, card). Update alongside rename.tools/pfe-tools/dev-server/bundle.ts- icon export hardcoded. Update.Repo
eslint.config.jsignore glob - icon demo path hardcoded with element name. Update.elements/package.jsonexports - orphaned entries from renamed elements linger silently.no-missing-package-exportscatches missing but not extra. Audit manually.Docs
docs/_snippets/- independent of component docs, easy to miss.docs/framework-integration/- inline code examples with element names.