# Material UI: what changed from 7 to 9 - Product: Material UI (https://whatsnew.fyi/product/material-ui) - Vendor: MUI - Range: changelog entries numbered after v7.3.11 up to and including v9.4.0, stable releases only - Entries below: 9 releases (newest first) - Resolved: 7 is v7.3.11 and 9 is v9.4.0, the newest stable release of each major we track - Carrying security changes: 1 · CVEs mentioned: 0 · Mentioning breaking changes: 0 · Removing or deprecating something: 3 - Page: https://whatsnew.fyi/product/material-ui/compare/7...9 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (100 changes, grouped by kind) ### Added #### v9.4.0 (2026-08-28) - Add theme.focusVisible opt-in keyboard focus ring across components - Complete Traditional Chinese localization #### v9.3.1 (2026-08-06) - Add more unit tests for pagination #### v9.3.0 (2026-08-05) - Autocomplete announces its loading and no options messages through a new status slot - Form Control Label has missing labelPlacementEnd class - Menu Item includes aria-checked attribute for checkbox and radio menu items - Table Pagination adds focus style to default InputBase used in Select #### v9.2.0 (2026-07-03) - Add support for data-* attributes on slotProps - Add missing MuiPagination localization to zh-CN locale - Add opt-in DataAttributesOverrides augmentation for slot props #### v9.1.1 (2026-06-23) - Support turbopack for docs #### v9.1.0 (2026-06-08) - Support for the prefers-reduced-motion setting - Improved support for Windows High Contrast mode with the enhanceHighContrast theme wrapper - Custom Transition component support in transitions #### v9.0.1 (2026-05-07) - Add internal useFormControlState hook #### v9.0.0 (2026-04-08) - Add border to switch component to make it visible in high contrast mode ### Changed #### v9.4.0 (2026-08-28) - Replace deprecated clip CSS property with clip-path - Use and document the row header cells in table #### v9.3.0 (2026-08-05) - Toggle Button Group keyboard navigation now follows the roving tabindex pattern - Button Group respects global disableRipple and disableFocusRipple settings in grouped buttons - Checkbox and Radio respect global disableRipple from MuiButtonBase defaultProps - Modal replaces custom findIndexOf with findIndex - v5.0.0/path-imports codemod transforms all style exports #### v9.2.0 (2026-07-03) - Improve Icon Dialog responsiveness on small screens #### v9.1.1 (2026-06-23) - Update Autocomplete fullWidth prop documentation - Server-render InitColorSchemeScript in tests for React 19.3 - Update dependencies to resolve Dependabot security alerts - Pin StackBlitz demo vite to v7 and plugin-react to v5 - Port codebase to use tsgo - Run link checker during docs build instead of as separate CI step #### v9.1.0 (2026-06-08) - Badge now uses inline CSS variables for anchorOrigin and overlap positioning - StepConnector is now included inside Step element - Stepper now has proper support for vertical alternativeLabel - Select now allows spacebar to select elements - Select now supports typeahead when closed - StepButton now chooses higher contrast ripple color for dark mode focus #### v9.0.0 (2026-04-08) - Use pointer events instead of mouse events in slider component - Improve transitions performance and apply miscellaneous fixes ### Fixed #### v9.4.0 (2026-08-28) - Prevent sticky hover border on touch devices in buttongroup - Preserve custom list padding when adjusting for the scrollbar in menulist - Manage focus whenever first, last, next, or previous buttons become disabled in pagination - Improve support for disabled button triggers in tooltip - Fix resolveProps to correctly merge slotProps defined as functions - Fix types for components extended with styled in styled-engine-sc - Remove the aria-owns reference in autocomplete - Fix wrong number of rows reported to screen readers in table - Make tab panel focusable and show keep mounted examples in tabs - Remove focusable links from hidden carousel slides in templates - Manage focus on Open in Chat button click in docs - Move focus to the main content with the skip link in docs #### v9.3.1 (2026-08-06) - Prevent exit transitions from getting stuck in transitions - Include transforms in published package for codemod #### v9.3.0 (2026-08-05) - Fix typos in List Item Button component code - Modal and Dialog fix scrollbar compensation in Shadow DOM - Select fixes endAdornment overlapping the open indicator - Prevent prototype pollution in cssVarsParser - Codemod v5.0.0/path-imports does not leak state between files #### v9.2.0 (2026-07-03) - Guard display ref during mouse down in select component - Fix invalid UTF-8 in skill references #### v9.1.2 (2026-06-23) - Don't submit forms when committing freeSolo value with Enter key in autocomplete - Fix RTG import in ESM for transitions - Fix script tag warning in Next.js 16 dev mode in InitColorSchemeScript - Fix code-block copy button broken on direct page load #### v9.1.1 (2026-06-23) - Fix focus ripple lingering after blur in ButtonBase - Mount child in Transition in same commit when opening from unmounted - Prevent enableCssLayer styles from being overridden by unlayered styles in styled-engine - Fix immutable cache headers for /_next/static assets in docs-infra #### v9.1.0 (2026-06-08) - Autocomplete now clears highlight when mouse leaves popup - Autocomplete freeSolo controlled values no longer cleared by initial null - Autocomplete item removal when it receives focus from VoiceOver before using Backspace - Autocomplete guard against null inputRef during unmount - Button customized flex gap styles - Dialog unwanted DialogPaper focus ring - Focus trap incorrect tab order when tabIndex is greater than or equal to 1 - Progress show runtime errors only once - Tabs React 18 roving tabindex and dedupe invalid-value warning - Timeline item extra ::before spacing when TimelineOppositeContent is present - Tooltip prevent stuck-open tooltip when child becomes disabled #### v9.0.1 (2026-05-07) - Fix highlight sync and scroll preservation in Autocomplete - Fix input value and clear in Autocomplete - Fix iOS group scrollbar overflow in Autocomplete - Fix popper rendering issues in Autocomplete - Improve highlight tracking and selection state in Autocomplete - Fix startIcon alignment in Button - Remove duplicated className entries in Button, Button Base, FAB, Menu Item, and List Item Button - Set aria-checked=mixed when Checkbox is indeterminate - Fix initial focus target in Dialog, Drawer, and Focus Trap - Fix swipe close flicker in Drawer - Fix transition jump in Drawer - Fix layout shift with display: flex in Input - Prevent notched prop leaking into DOM in Input - Place aria-label on the input element in Input Base - Fix autofocus in SSR environment in Inputs - Fix sticky subheader overlapping iOS scrollbar in List - Persist positioning styles when popperOptions changes reference in Popper - Stop using combobox element for labeling in Select ### Removed #### v9.3.0 (2026-08-05) - Codemod removes use of eval() #### v9.0.1 (2026-05-07) - Remove IE 11-specific focus safety check from FocusTrap cleanup #### v9.0.0 (2026-04-08) - Remove unnecessary overridesResolvers from styled components ### Security #### v9.1.0 (2026-06-08) - Prevent prototype pollution in fastDeepAssign ## Release notes ### v9.4.0 - Date: 2026-08-28 - Version: v9.4.0 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.4.0 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.4.0 - **added** — Add theme.focusVisible opt-in keyboard focus ring across components - **fixed** — Prevent sticky hover border on touch devices in buttongroup - **added** — Complete Traditional Chinese localization - **fixed** — Preserve custom list padding when adjusting for the scrollbar in menulist - **fixed** — Manage focus whenever first, last, next, or previous buttons become disabled in pagination - **fixed** — Improve support for disabled button triggers in tooltip - **fixed** — Fix resolveProps to correctly merge slotProps defined as functions - **changed** — Replace deprecated clip CSS property with clip-path - **fixed** — Fix types for components extended with styled in styled-engine-sc - **fixed** — Remove the aria-owns reference in autocomplete - **fixed** — Fix wrong number of rows reported to screen readers in table - **changed** — Use and document the row header cells in table - **fixed** — Make tab panel focusable and show keep mounted examples in tabs - **fixed** — Remove focusable links from hidden carousel slides in templates - **fixed** — Manage focus on Open in Chat button click in docs - **fixed** — Move focus to the main content with the skip link in docs A big thanks to the 19 contributors who made this release possible. Here are some highlights ✨: - ♿️ Opt in to a consistent [keyboard focus ring](https://mui.com/material-ui/customization/focus-visible/) across components with the new `theme.focusVisible`. - ♿️ The [Tooltip](https://mui.com/material-ui/react-tooltip/) now supports disabled button triggers without an extra wrapper element. ###### `@mui/material@9.4.0` - [theme] Add `theme.focusVisible` opt-in keyboard focus ring (#48743) @siriwatknp - [buttongroup] Prevent sticky hover border on touch devices (#48993) @petr-kratochvil - [l10n] Complete Traditional Chinese localization (#48946) @nrps9909 - [menulist] Preserve custom list padding when adjusting for the scrollbar (#48707) @creazyfrog - [pagination] Manage focus whenever first / last / next / previous buttons become disabled (#48877) @silviuaavram - [tooltip] Improve support for disabled button triggers (#48622) @mayank99 ###### `@mui/utils@9.4.0` - Fix resolveProps to correctly merge slotProps defined as functions (#48955) @mnajdova - Replace deprecated `clip` CSS property with `clip-path` (#48966) @ZeeshanTamboli ###### `@mui/styled-engine-sc@9.4.0` - Fix types for components extended with styled (#45988) @megos ###### Docs - Bump @docsearch/react to ^4.7.0 (#48886) @LukasTy - Fix broken links reported by Ahrefs (#48949) @brijeshb42 - Manage focus on Open in Chat button click (#48942) @silviuaavram - Move focus to the main content with the skip link (#48944) @lazerg - Use relative link for LICENSE in README (#49040) @loulanyue - [autocomplete] Remove the "aria-owns" reference (#48958) @silviuaavram - [table] Fix wrong number of rows reported to screen readers (#47653) @seomsoo - [table] Reference DataGrid link in the row header section (#48988) @silviuaavram - [table] Use and document the row header cells (#48965) @silviuaavram - [tabs] Make tab panel focusable and show keep mounted examples (#48939) @silviuaavram - [templates] Remove focusable links from hidden carousel slides (#49003) @gonzoblasco ###### Core - [code-infra] Fix team sync review requests (#48914) @brijeshb42 - [code-infra] Import the test globals from vitest (#49033) @JCQuintas - [code-infra] Point the support validator link at frontend-public (#49041) @Janpot - [code-infra] Update CircleCI orb (#49030) @Janpot - [code-infra] Use ESM current directory syntax for Vitest config (#49032) @ZeeshanTamboli - [core] Use @typescript/typescript6 for the docs tooling (#49025) @Janpot - [core-docs] Remove the `globalSelector` stylis middleware (#49029) @Janpot - [test] Add an `assertions` mode to the axe regression harness (#48915) @michelengelen - [test] Automate the CSS-dependent WCAG criteria (#48936) @michelengelen - [test] Fail the regression run when a webfont does not load (#48948) @LukasTy - [test] Fix typo 'overriden' -> 'overridden' in Alert test comment (#48987) @FirmaSpring - [test] Replace webfontloader with the CSS Font Loading API (#48995) @LukasTy - [test] Skip the CrudDashboard VRT on React 18 (#49027) @Janpot - [test] Use the shared loadFonts from @mui/internal-test-utils (#49007) @LukasTy - [test] Use the Vitest global expect instead of importing chai (#48996) @JCQuintas - [test][tooltip] Keep the disabled trigger away from the real pointer (#48947) @LukasTy All contributors of this release in alphabetical order: @brijeshb42, @creazyfrog, @FirmaSpring, @gonzoblasco, @Janpot, @JCQuintas, @lazerg, @loulanyue, @LukasTy, @mayank99, @megos, @michelengelen, @mnajdova, @nrps9909, @petr-kratochvil, @seomsoo, @silviuaavram, @siriwatknp, @ZeeshanTamboli ### v9.3.1 - Date: 2026-08-06 - Version: v9.3.1 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.3.1 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.3.1 - **fixed** — Prevent exit transitions from getting stuck in transitions - **fixed** — Include transforms in published package for codemod - **added** — Add more unit tests for pagination A big thanks to the 4 contributors who made this release possible. ###### `@mui/material@9.3.1` - [transitions] Prevent exit transitions from getting stuck (#48881) @ZeeshanTamboli ###### `@mui/codemod@9.3.1` - Include transforms in published package (#48934) @brijeshb42 ###### Core - [blog] Clarify early bird renewal discount scope (#48906) @DanailH - [test][pagination] Add more unit tests (#48927) @silviuaavram All contributors of this release in alphabetical order: @brijeshb42, @DanailH, @silviuaavram, @ZeeshanTamboli ### v9.3.0 - Date: 2026-08-05 - Version: v9.3.0 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.3.0 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.3.0 - **added** — Autocomplete announces its loading and no options messages through a new status slot - **changed** — Toggle Button Group keyboard navigation now follows the roving tabindex pattern - **changed** — Button Group respects global disableRipple and disableFocusRipple settings in grouped buttons - **changed** — Checkbox and Radio respect global disableRipple from MuiButtonBase defaultProps - **added** — Form Control Label has missing labelPlacementEnd class - **fixed** — Fix typos in List Item Button component code - **added** — Menu Item includes aria-checked attribute for checkbox and radio menu items - **changed** — Modal replaces custom findIndexOf with findIndex - **fixed** — Modal and Dialog fix scrollbar compensation in Shadow DOM - **fixed** — Select fixes endAdornment overlapping the open indicator - **added** — Table Pagination adds focus style to default InputBase used in Select - **fixed** — Prevent prototype pollution in cssVarsParser - **fixed** — Codemod v5.0.0/path-imports does not leak state between files - **removed** — Codemod removes use of eval() - **changed** — v5.0.0/path-imports codemod transforms all style exports A big thanks to the 18 contributors who made this release possible. Here are some highlights ✨: - ♿️ Keyboard navigation in the [Toggle Button Group](https://mui.com/material-ui/react-toggle-button/) now follows the roving tabindex pattern. - ♿️ The [Autocomplete](https://mui.com/material-ui/react-autocomplete/) announces its loading and no options messages through a new `status` slot. ###### `@mui/material@9.3.0` - [autocomplete] Wrap the no results and loading messages in an aria live region (#48690) @silviuaavram - [buttongroup] Respect global disableRipple / disableFocusRipple in grouped buttons (#48762) @siriwatknp - [checkbox][radio] Respect global disableRipple from MuiButtonBase defaultProps (#48795) @siriwatknp - [formcontrollabel] Add missing `labelPlacementEnd` class (#48843) @siriwatknp - [listitembutton] Fix typos in component code (#48868) @ZeeshanTamboli - [menuitem] Add `aria-checked` for checkbox and radio menu items (#48651) @siriwatknp - [modal] Replace custom findIndexOf with findIndex (#48827) @ZeeshanTamboli - [modal][dialog] Fix scrollbar compensation in Shadow DOM (#48826) @ZeeshanTamboli - [select] Fix endAdornment overlapping the open indicator (#48723) @siriwatknp - [tablepagination] Add focus style to default InputBase used in Select (#48871) @silviuaavram - [togglebuttongroup] Add roving tabindex keyboard navigation (#48849) @silviuaavram ###### `@mui/system@9.3.0` - Prevent prototype pollution in cssVarsParser (#48822) @Janpot ###### `@mui/codemod@9.3.0` - Don't leak state between files in v5.0.0/path-imports (#48797) @manbearwiz - Remove use of eval() (#48701) @oliviertassinari - Transform all style exports in `v5.0.0/path-imports` codemod (#48800) @manbearwiz ###### Docs - Clarify `container` prop inheritance for Shadow DOM (#48670) @Juan-C-Ceballos - Clarify third-party script risk in CSP unsafe-inline note (#48787) @Janpot - Document `box-sx-prop` codemod (#48888) @SR0725 - Document Grid direction column removal in v9 upgrade guide (#48880) @kalayciburak - Fix color contrast in GitHub labels example (#48844) @silviuaavram - Fix per-page canonical URL and stale SEO link (#48789) @brijeshb42 - Fix redirect loop on the Design Kits page (#48869) @Janpot - Fix typo 'overriden' -> 'overridden' in CHANGELOG (#48785) @ZhouYinLong-lab - Improve TransferList examples (#48845) @silviuaavram - Link a new theme generator tool (#48847) @mansourcodes - Remove broken learning resource links (#48598) @morning-verlu - Update the 9.2.0 changelog (#48763) @silviuaavram - [autocomplete] Clarify how to render custom start and end adornments (#48883) @DebadityaHait - [drawer] Clarify clipped AppBar spacing (#48887) @rushijagani-dev - [menu] Fix stale `selected` prop reference in Selected menu section (#48879) @LukasTy - [skeleton] Document preserving typography sizing with custom border radius (#48596) @meaqua9420 ###### Core - [blog] Fix caret annotation broken by Prettier wrapping (#48884) @bernardobelchior - [code-infra] Automate team sync on about page (#48794) @brijeshb42 - [code-infra] Bump @mui/internal-code-infra to 0.0.4-canary.101 (#48878) @Janpot - [code-infra] Fix Dependabot alerts (#48756) @Janpot - [code-infra] Fix team sync PR creation (#48911) @brijeshb42 - [code-infra] Pin node version in publish CI (#48799) @brijeshb42 - [core-docs] Tighten service worker host check (#48581) @Janpot - [docs-infra] Change branch name to the allowed one (#48910) @brijeshb42 All contributors of this release in alphabetical order: @bernardobelchior, @brijeshb42, @DebadityaHait, @Janpot, @Juan-C-Ceballos, @kalayciburak, @LukasTy, @manbearwiz, @mansourcodes, @meaqua9420, @morning-verlu, @oliviertassinari, @rushijagani-dev, @silviuaavram, @siriwatknp, @SR0725, @ZeeshanTamboli, @ZhouYinLong-lab ### v9.2.0 - Date: 2026-07-03 - Version: v9.2.0 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.2.0 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.2.0 - **added** — Add support for data-* attributes on slotProps - **added** — Add missing MuiPagination localization to zh-CN locale - **added** — Add opt-in DataAttributesOverrides augmentation for slot props - **fixed** — Guard display ref during mouse down in select component - **changed** — Improve Icon Dialog responsiveness on small screens - **fixed** — Fix invalid UTF-8 in skill references A big thanks to the 9 contributors who made this release possible. - ⚙️ Add support for [`data-*` attributes on `slotProps`](https://mui.com/material-ui/guides/typescript/#allowing-data-attributes-on-slotprops). ###### `@mui/material@9.1.3` - [l10n] Add missing MuiPagination localization to zh-CN locale (#48741) @greymoth-jp - [select] Guard display ref during mouse down (#48744) @michelengelen ###### `@mui/utils@9.1.3` - [utils] Add opt-in `DataAttributesOverrides` augmentation for slot props (#48554) @LukasTy ###### Docs - [docs] Improve Icon Dialog responsiveness on small screens (#48639) @Prakash1185 - [docs] Fix invalid UTF-8 in skill references (#48739) @mturac ###### Core - [code-infra] Resolve Renovate dashboard warnings (#48700) @Sushantplive - [code-infra] Validate npm publishing through dry run (#48691) @brijeshb42 - [code-infra] Run prettier after renovate update (#48754) @Janpot - [code-infra] Fix 'A11y results committed?' check on react-pinned nightly jobs (#48740) @Janpot - [core] Remove leftover Joy UI references (#48719) @siriwatknp - [code-infra] Bump react-router to 7.15.1 (#48725) @Janpot - [docs-infra] Drive docs analytics IDs via ANALYTICS_ENV (#48694) @Janpot - [docs-infra] Pre-render API page descriptions (#48693) @brijeshb42 - [code-infra][icons-material] Build lib/package.json with code-infra --no-expand (#48689) @Janpot - [code-infra] Fix react@18/next nightly workflow (#48635) @Janpot All contributors of this release in alphabetical order: @brijeshb42, @greymoth-jp, @Janpot, @LukasTy, @michelengelen, @mturac, @Prakash1185, @siriwatknp, @Sushantplive ### v9.1.2 - Date: 2026-06-23 - Version: v9.1.2 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.1.2 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.1.2 - **fixed** — Don't submit forms when committing freeSolo value with Enter key in autocomplete - **fixed** — Fix RTG import in ESM for transitions - **fixed** — Fix script tag warning in Next.js 16 dev mode in InitColorSchemeScript - **fixed** — Fix code-block copy button broken on direct page load A big thanks to the 5 contributors who made this release possible. ###### `@mui/material@9.1.2` - [autocomplete] Don't submit forms when committing `freeSolo` value with Enter key (#48679) @mj12albert - [transitions] Fix RTG import in ESM (#48645) @mj12albert ###### `@mui/system@9.1.2` - [InitColorSchemeScript] Fix script tag warning in Next.js 16 dev mode (#48671) @siriwatknp ###### Docs - Fix typos in release instructions (#48687) @brijeshb42 - Update @mui/x-* packages to latest (#48661) @Janpot ###### Core - [code-infra] Convert leaf @mui/system .js+.d.ts pairs to TypeScript (part 1) (#48578) @Janpot - [code-infra] Bump to latest code-infra packages (#48672) @brijeshb42 - [code-infra] Resolve remaining minimatch advisory (#48662) @Janpot - [code-infra] Bump nx to resolve minimatch advisory (#48658) @Janpot - [core] Drop @babel/* pnpm overrides (#48710) @Janpot - [docs-infra] Revert "Pin StackBlitz demo vite to v7 and plugin-react to v5" (#48709) @Janpot - [docs-infra] Fix code-block copy button broken on direct page load (#48653) @brijeshb42 - [test] Stabilize Data Grid demo data in Argos screenshots (#48654) @LukasTy All contributors of this release in alphabetical order: @brijeshb42, @Janpot, @LukasTy, @mj12albert, @siriwatknp ### v9.1.1 - Date: 2026-06-23 - Version: v9.1.1 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.1.1 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.1.1 - **changed** — Update Autocomplete fullWidth prop documentation - **fixed** — Fix focus ripple lingering after blur in ButtonBase - **changed** — Server-render InitColorSchemeScript in tests for React 19.3 - **fixed** — Mount child in Transition in same commit when opening from unmounted - **fixed** — Prevent enableCssLayer styles from being overridden by unlayered styles in styled-engine - **changed** — Update dependencies to resolve Dependabot security alerts - **changed** — Pin StackBlitz demo vite to v7 and plugin-react to v5 - **changed** — Port codebase to use tsgo - **fixed** — Fix immutable cache headers for /_next/static assets in docs-infra - **changed** — Run link checker during docs build instead of as separate CI step - **added** — Support turbopack for docs A big thanks to the 9 contributors who made this release possible. ###### `@mui/material@9.1.1` - [Autocomplete] Update fullWidth prop documentation (#48626) @vipin8797 - [ButtonBase] Fix focus ripple lingering after blur (#48650) @siriwatknp - [InitColorSchemeScript] Server-render in tests for React 19.3 (#48604) @Janpot - [Transition] Mount child in same commit when opening from unmounted (#48649) @siriwatknp ###### `@mui/styled-engine@9.1.1` - [styled-engine] Prevent enableCssLayer styles from being overridden by unlayered styles (#48603) @Janpot ###### Docs - Send SOURCE to Brevo on newsletter subscribe (#48633) @aemartos - fix TypeScript heading capitalization (#48619) @ifer47 - Remove outdated security section (#48628) @oliviertassinari - [legal] Update EULA links on website (#48642) @rluzists1 ###### Core - Update dependencies to resolve Dependabot security alerts (#48641) @Janpot - [core-docs] Pin StackBlitz demo vite to v7 and plugin-react to v5 (#48643) @Janpot - [code-infra] Port codebase to use tsgo (#48616) @brijeshb42 - [docs-infra] Fix immutable cache headers for /\_next/static assets (#48655) @brijeshb42 - [docs-infra] Run link checker during docs build instead of as separate CI step (#48634) @Janpot - [docs-infra] Support turbopack for docs (#48569) @brijeshb42 - [test] Cover docs landing-page composites with Argos (#48589) @LukasTy All contributors of this release in alphabetical order: @aemartos, @brijeshb42, @ifer47, @Janpot, @LukasTy, @oliviertassinari, @rluzists1, @siriwatknp, @vipin8797 ### v9.1.0 - Date: 2026-06-08 - Version: v9.1.0 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.1.0 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.1.0 - **added** — Support for the prefers-reduced-motion setting - **added** — Improved support for Windows High Contrast mode with the enhanceHighContrast theme wrapper - **added** — Custom Transition component support in transitions - **changed** — Badge now uses inline CSS variables for anchorOrigin and overlap positioning - **changed** — StepConnector is now included inside Step element - **changed** — Stepper now has proper support for vertical alternativeLabel - **changed** — Select now allows spacebar to select elements - **changed** — Select now supports typeahead when closed - **changed** — StepButton now chooses higher contrast ripple color for dark mode focus - **fixed** — Autocomplete now clears highlight when mouse leaves popup - **fixed** — Autocomplete freeSolo controlled values no longer cleared by initial null - **fixed** — Autocomplete item removal when it receives focus from VoiceOver before using Backspace - **fixed** — Autocomplete guard against null inputRef during unmount - **fixed** — Button customized flex gap styles - **fixed** — Dialog unwanted DialogPaper focus ring - **fixed** — Focus trap incorrect tab order when tabIndex is greater than or equal to 1 - **fixed** — Progress show runtime errors only once - **fixed** — Tabs React 18 roving tabindex and dedupe invalid-value warning - **fixed** — Timeline item extra ::before spacing when TimelineOppositeContent is present - **fixed** — Tooltip prevent stuck-open tooltip when child becomes disabled - **security** — Prevent prototype pollution in fastDeepAssign A big thanks to the 15 contributors who made this release possible. Here are some highlights ✨: - ⚙️ Support for the [prefers-reduced-motion](https://mui.com/material-ui/transitions/#reduced-motion) setting. - ♿️ Improved support for Windows High Contrast mode with the [enhanceHighContrast](https://mui.com/material-ui/customization/palette/#windows-high-contrast-mode) theme wrapper. ###### `@mui/material@9.1.0` - [autocomplete] Enable clearing highlight when mouse leaves popup (#48354) @mj12albert - [autocomplete] Fix `freeSolo` controlled values cleared by initial `null` (#48611) @mj12albert - [autocomplete] Fix item removal when it receives focus from VoiceOver before using Backspace (#48572) @silviuaavram - [autocomplete] Fix `resetHighlightOnMouseLeave` JSdoc (#48536) @mj12albert - [autocomplete] Guard against null inputRef during unmount (#48617) @noam3127 - [badge] Add `aria-hidden` to badge content and polish docs demos (#48471) @mj12albert - [badge] Use inline CSS variables for anchorOrigin/overlap positioning (#48549) @siriwatknp - [button] Fix customized flex gap styles (#48542) @mj12albert - [dialog] Fix unwanted `DialogPaper` focus ring (#48535) @mj12albert - [focus trap] Fix incorrect tab order when `tabIndex >= 1` (#48546) @mj12albert - [progress] Show runtime errors only once (#48591) @silviuaavram - [select] Allow spacebar to select elements (#48615) @silviuaavram - [select] Support typeahead when closed (#48563) @mj12albert - [step button] Choose higher contrast ripple color for dark mode focus (#48612) @silviuaavram - [stepper] Include StepConnector inside Step element (#48492) @silviuaavram - [stepper] Proper support for vertical alternativeLabel (#48485) @silviuaavram - [tabs] Fix React 18 roving tabindex and dedupe invalid-value warning (#48605) @Janpot - [theme] Add HighContrast theme enhancer (#48319) @silviuaavram - [timeline item] Fix extra ::before spacing when TimelineOppositeContent is present (#46663) @tyalau - [tooltip] Prevent stuck-open tooltip when child becomes disabled (#48606) @Janpot - [transitions] Custom `Transition` component (#48325) @mj12albert - [transitions] Support `prefers-reduced-motion` (#48357) @mj12albert ###### `@mui/utils@9.1.0` - [utils] Prevent prototype pollution in fastDeepAssign (#48580) @Janpot ###### Docs - [docs] Add function `slotProps` documentation (#48574) @mj12albert - [docs] Clarify styled-components version compatibility (#48533) @nightt5879 - [docs] Fix broken URLs (#48520) @oliviertassinari - [docs] Fix invalid JSON in Zed MCP setup example (#48490) @pavan-sh - [docs] Mention release version for enhanceHighContrast (#48609) @silviuaavram - [docs] Remove outdated MUI X v8 notification (#48600) @cherniavskii - [docs] Remove redundant enhanceHighContrast information (#48632) @silviuaavram - [docs-infra] Decrease loaded bundle size on docs (#48584) @brijeshb42 - [docs-infra] Drop multi-locale plumbing from API pages (#48370) @brijeshb42 - [docs-infra] Fix Cookie banner heading (#48529) @oliviertassinari - [docs-infra] Infinitely cache all static assets (#48627) @brijeshb42 - [docs-infra] Remove outdated noSEOadvantage entries (#48527) @oliviertassinari - [docs-infra] Restore build-only invariant throws via `NEXT_RUNTIME` guard (#48475) @Janpot - [docs-infra] Test HTML validation in broken links checker (#48088) @Janpot - [docs][icons] Fix Font Awesome Chip demo in dark mode (#48576) @siriwatknp - [docs][icons] Remove redundant font awesome demo (#48493) @ZeeshanTamboli - [docs][modal] Add nested modal guidance (#46507) @JakeSaterlay - [docs][stepper] Fix focus management in examples (#48494) @silviuaavram ###### Core - Eslint markdown (#48371) @Janpot - [agents] Fix some docs links (#48561) @silviuaavram - [blog] Copy editing improvement on v9 announcement blog posts (#48543) @joserodolfofreitas - [code-infra] Cleanup unused jss packages (#48590) @brijeshb42 - [code-infra] Collapse canary workf _[Truncated at 4000 characters — full notes: https://github.com/mui/material-ui/releases/tag/v9.1.0]_ ### v9.0.1 - Date: 2026-05-07 - Version: v9.0.1 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.0.1 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.0.1 - **fixed** — Fix highlight sync and scroll preservation in Autocomplete - **fixed** — Fix input value and clear in Autocomplete - **fixed** — Fix iOS group scrollbar overflow in Autocomplete - **fixed** — Fix popper rendering issues in Autocomplete - **fixed** — Improve highlight tracking and selection state in Autocomplete - **fixed** — Fix startIcon alignment in Button - **fixed** — Remove duplicated className entries in Button, Button Base, FAB, Menu Item, and List Item Button - **fixed** — Set aria-checked=mixed when Checkbox is indeterminate - **fixed** — Fix initial focus target in Dialog, Drawer, and Focus Trap - **fixed** — Fix swipe close flicker in Drawer - **fixed** — Fix transition jump in Drawer - **removed** — Remove IE 11-specific focus safety check from FocusTrap cleanup - **added** — Add internal useFormControlState hook - **fixed** — Fix layout shift with display: flex in Input - **fixed** — Prevent notched prop leaking into DOM in Input - **fixed** — Place aria-label on the input element in Input Base - **fixed** — Fix autofocus in SSR environment in Inputs - **fixed** — Fix sticky subheader overlapping iOS scrollbar in List - **fixed** — Persist positioning styles when popperOptions changes reference in Popper - **fixed** — Stop using combobox element for labeling in Select A big thanks to the 25 contributors who made this release possible. ###### `@mui/material@9.0.1` - [accessibility] HighContrast mode on Avatar, Badge, Slider and Switch (#48320) @silviuaavram - [autocomplete] Fix highlight sync and scroll preservation (#48322) @mj12albert - [autocomplete] Fix input value and clear (#48263) @mj12albert - [autocomplete] Fix iOS group scrollbar overflow (#48400) @oliviertassinari - [autocomplete] Fix popper rendering issues (#48327) @mj12albert - [autocomplete] Improve highlight tracking and selection state (#48219) @mj12albert - [button] Fix `startIcon` alignment (#48332) @mj12albert - [button][button base] Document `type` attribute (#48146) @mj12albert - [button][fab][menu item][list item button] Remove duplicated className entries (#48213) @silviuaavram - [checkbox] Set `aria-checked=mixed` when indeterminate (#48147) @mj12albert - [circularprogress][linearprogress] Improve accessibility (#48172) @silviuaavram - [dialog][drawer][focus trap] Fix initial focus target (#48280) @mj12albert - [drawer] Fix swipe close flicker (#48372) @mj12albert - [drawer] Fix transition jump (#48308) @mj12albert - [focus trap] Remove IE 11-specific focus safety check from FocusTrap cleanup (#48368) @ZeeshanTamboli - [form controls] Add internal `useFormControlState` hook (#48344) @mj12albert - [icon button] Remove unused color palette mapping in styles (#48353) @sai6855 - [icons] Revert to using wildcard export paths (#48381) @brijeshb42 - [input] Fix layout shift with display: flex (#43839) @oliviertassinari - [input] Prevent `notched` prop leaking into DOM (#48281) @mj12albert - [input base] Place aria-label on the input element (#48283) @silviuaavram - [inputs] Fix autofocus in SSR environment (#48290) @mj12albert - [List] Fix sticky subheader overlapping iOS scrollbar (#48375) @sandeshdamkondwar - [popper] Persist positioning styles when popperOptions changes reference (#48121) @mj12albert - [select] Stop using combobox element for labeling (#48251) @silviuaavram - [select] Support single-pointer-cycle selection and pointer cancellation (#48328) @mj12albert - [switch] Fix incorrect `role` with `slotProps.input` (#48469) @mj12albert - [tabs] Fix scrollable tabs blocking pointer events (#48166) @mj12albert - [textfield] Fix autofill styles always in dark mode when CSS variables is used (#48244) @ZeeshanTamboli - [tooltip] Simplify RTL styles using CSS logical properties (#48351) @sai6855 - [tooltip] Close Tooltip when its child becomes disabled (#44507) @chudesno - [typography] Fix `h4` variant when using `responsiveFontSizes()` (#48314) @mj12albert - [useMediaQuery] Fix crash in Firefox extension (#45196) @Mr-Quin ###### `@mui/system@9.0.1` - [system] Fix theme mutation when using responsive typography shorthand in sx (#48266) @tomups ###### `@mui/codemod@9.0.1` - [codemod] Add --jsx option to `v9.0.0/system-props` codemod (#48315) @siriwatknp - [codemod] Add packageName support to the v9 system props codemod (#48253) @franco-dias ###### `@mui/utils@9.0.1` - [utils] Add shadow dom utils (#48256) @mj12albert - [utils] Fix `resolveProps` receiving empty string className (#48289) @SAY-5 - [utils] Remove unnecessary `excludeKeys` from `extractEventHandlers` (#48481) @ZeeshanTamboli ###### Docs - [docs][autocomplete] Add demo with Tanstack Query `useInfiniteQuery` (#48356) @mj12albert - [docs] Add agent skills for styling, theming, Next.js, and Tailwind CSS integrations (#48187) @mapache-salvaje - [docs] Cleanup `@mui/base` (#48278) @mj12albert - [docs] Fix create-playground script (#48380) @imazizbohra - [docs] Fix date range calendar demo after MUI X v9 update (#48262) @LukasTy - [docs] Fix icon search modal (#48255) @mj12albert - [docs] Fix Material UI and MUI system "Upgrade to v9" docs (#48245) @ZeeshanTamboli - [docs] Fix Popover JSdoc (#48310) @nitzan-treg - [docs] Fix RTL toggle highlight in docs settings drawer (#48476) @sai6855 - [do _[Truncated at 4000 characters — full notes: https://github.com/mui/material-ui/releases/tag/v9.0.1]_ ### v9.0.0 - Date: 2026-04-08 - Version: v9.0.0 - Original notes: https://github.com/mui/material-ui/releases/tag/v9.0.0 - Permalink: https://whatsnew.fyi/product/material-ui/releases/v9.0.0 - **changed** — Use pointer events instead of mouse events in slider component - **added** — Add border to switch component to make it visible in high contrast mode - **changed** — Improve transitions performance and apply miscellaneous fixes - **removed** — Remove unnecessary overridesResolvers from styled components 🥳 We're excited to announce the stable release of Material UI v9.0! This major release focuses on accessibility improvements, sx prop performance, and cleanup of deprecated APIs. See the [Material UI v9.0 announcement](https://mui.com/blog/introducing-material-ui-v9/) blog posts for more details. Also see the [MUI v9 announcement](https://mui.com/blog/introducing-mui-v9/) blog posts for the broad ecosystem updates. Check out the [upgrade guide](https://mui.com/material-ui/migration/upgrade-to-v9/) to see how you can move to this version. ###### `@mui/material@9.0.0` - [slider] Use pointer events instead of mouse events (#48164) @mj12albert - [switch] Add border to make it visible in high contrast mode (#48180) @silviuaavram - [transitions] Performance improvements & misc fixes (#48151) @mj12albert - Remove unnecessary overridesResolvers from styled components (#48204) @sai6855 ###### Core - [code-infra] Setup workflow to publish internal packages (#47952) @brijeshb42 - [core-docs] Add `x-scheduler` to `MuiProductId` type (#48185) @rita-codes - [docs-infra] Add scheduler to product switcher (#48208) @rita-codes - [internal] Prepare libraries for v9 stable release (#48206) @siriwatknp 🙇‍♂️ We'd like to extend a big thank you to everyone involved who made this major release possible.