Mantine UI Library
Mantine is a fully-featured React components library with TypeScript support. It provides 100+ hooks and components with native dark mode, CSS-in-JS via CSS modules, and excellent accessibility.
v9.5 Highlights
- New
Cascadercomponent: select a value from hierarchical data by drilling down through cascading columns, withchangeOnSelect, hover-to-expand, search, and a flat-list layout for mobile. @mantine/chartsgainsSunburstChart(hierarchical data as concentric rings) andBulletChart(a value against a target and qualitative ranges); the area/bar/line/composite charts addwithBrushfor a draggable range-selector, and every chart component now shipsaccessibilityLayer(arrow-key navigation, Enter for tooltips) enabled by default.- Calendar-based date components gain
withNativeLevelSelect, replacing the calendar header's level button with native<select>elements, paired withyearsSelectRange. Timeline.Itemgainsopposite(content on the other side of the line, switching to a centered two-sided layout) andalternate(flips sides per item);FloatingWindowgains aResizeHandlecompound component with adimensionsprop and keyboard resizing;Modal/DrawergainkeepMountedMode('activity'or'display-none');AccordiongainsdisableCollapseto keep one item always open.@mantine/scheduleResourcesDayView/ResourcesWeekViewacceptintervalMinutesgreater than 60 for multi-hour slot columns.9.5.0fixes anautoClosetimer leak in the notifications container.- The official Vite template replaced ESLint/Prettier/
eslint-config-mantinewithoxlint/oxfmtvia the newoxc-config-mantinepackage (internal tooling migration);eslint-config-mantineremains available for projects that keep ESLint.
v9.4 Highlights
- New components:
ComboboxPopover(low-level popover built on the Combobox engine),DataList(key/value description lists),EmptyState(empty/placeholder screens), andMenubar(desktop-style application menu bar). @mantine/schedulegainsResourcesDayViewandResourcesWeekViewfor resource-grouped scheduling layouts.9.4.1patch fixes:@mantine/formcompatibility with the React compiler, Heatmap rendering, and assorted component fixes.
v9.3 Highlights
- New
Splittercomponent (withuse-splitterhook): declarative resizable split-pane layout with horizontal/vertical orientation, collapsible panes, and keyboard navigation.Splitter.Panemust be a direct child ofSplitter. - New component props:
Paginationgainslayout="responsive"(CSS container queries),Text/BlockquotegaintextWrap,CodeHighlightgainswithLineNumbers,OverflowListgainscollapseFrom("start"/"end"),TextareagainsbottomSection(character counters), and the Combobox family (Select,MultiSelect,Autocomplete,TagsInput) supportsfloatingHeight="viewport". DateInputgainspresetsfor quick value selection;Menu.Subsupports controlled open state.9.3.1patch fixes: notification DOM cleanup on close,CollapsekeepMounted,SegmentedControlindicator radius,PinInputplaceholder centering,Treearrow-key navigation skipping hidden nodes,MaskInputwith uncontrolleduse-form, and stableuse-idunder anActivitywrapper.
v9.2.2 Highlights
- Accessibility fixes landed across selection controls and sliders:
Checkbox,Radio, andSwitchnow wire error ids intoaria-describedby, whileSliderandRangeSlidersupportaria-valuetext. - Overlay/input behavior was refined with submenu safe polygon support, duplicate modal-id fixes, PinInput keyboard fixes, and ScrollArea/TreeSelect interaction fixes.
- Patch fixes in
9.2.2coverPilloverflow,Inputsections under localdiroverrides,Selectclear buttons for falsy primitive values, Modal/Drawer/Spotlight attribute types, and saferMenu.Subsafe-area polygon option forwarding. @mantine/hooksuse-masknow preserves undo and cursor position across paste/cut flows, and@mantine/tiptapcontrols avoid errors after the editor is destroyed or not initialized.- Forms and theming were hardened:
@mantine/formhandlers are more stable, default validators no longer force async results unexpectedly, andmergeMantineThemeno longer mutatesDEFAULT_THEME.headings. @mantine/schedulecontinues to mature with better multi-day overlap rendering and corrected positioning forintervalMinutes={60}.
v9.0 Breaking Changes
- React 19.2+ required for all
@mantine/*packages - Tiptap 3+ required for
@mantine/tiptap - Recharts 3+ required for
@mantine/charts(no migration needed) - Follow the official 8.x → 9.x migration guide for full details
Focus
This skill focuses on:
- Vite + TypeScript setup (not Next.js or CRA)
- CSS modules with PostCSS preset
- Vitest for testing
- Oxlint/Oxfmt (
oxc-config-mantine) for linting and formatting, matching the current official Vite template; ESLint (eslint-config-mantine) remains a supported alternative
Installation
See references/getting-started.md for Vite template setup, manual installation, and optional packages.
PostCSS Configuration
Create postcss.config.cjs:
module.exports = {
plugins: {
"postcss-preset-mantine": {},
"postcss-simple-vars": {
variables: {
"mantine-breakpoint-xs": "36em",
"mantine-breakpoint-sm": "48em",
"mantine-breakpoint-md": "62em",
"mantine-breakpoint-lg": "75em",
"mantine-breakpoint-xl": "88em",
},
},
},
};
App Setup
// src/App.tsx
import "@mantine/core/styles.css";
// Other style imports as needed:
// import '@mantine/dates/styles.css';
// import '@mantine/notifications/styles.css';
import { MantineProvider, createTheme } from "@mantine/core";
const theme = createTheme({
// Theme customization here
});
function App() {
return <MantineProvider theme={theme}>{/* Your app */}</MantineProvider>;
}
Critical Prohibitions
- Do NOT skip MantineProvider wrapper — all components require it
- Do NOT forget to import
@mantine/core/styles.css— components won't style without it - Do NOT mix Mantine with other UI libraries (e.g., Chakra, MUI) in same project
- Do NOT use inline styles for theme values — use CSS variables or theme object
- Do NOT skip PostCSS setup — responsive mixins won't work
- Do NOT forget
key={form.key('path')}when using uncontrolled forms
Core Concepts
1. MantineProvider
Wraps your app, provides theme context and color scheme management.
2. Theme Object
Customize colors, typography, spacing, component default props.
3. Style Props
All components accept style props like mt, p, c, bg, etc.
4. CSS Variables
All theme values exposed as CSS variables (e.g., --mantine-color-blue-6).
5. Polymorphic Components
Many components support component prop to render as different elements.
Definition of Done
- [ ] MantineProvider wraps the app
- [ ] Styles imported (
@mantine/core/styles.css) - [ ] PostCSS configured with mantine-preset
- [ ] Theme customization in createTheme
- [ ] Color scheme (light/dark) handled
- [ ] TypeScript types working
- [ ] Tests pass with Vitest + custom render
References (Detailed Guides)
Setup & Configuration
- getting-started.md — Installation, Vite setup, project structure
- styling.md — MantineProvider, theme, CSS modules, style props, dark mode
Core Features
- components.md — Core UI components patterns
- hooks.md — @mantine/hooks utility hooks
- forms.md — @mantine/form, useForm, validation
- schedule.md — @mantine/schedule calendar scheduling
Development
- testing.md — Vitest setup, custom render, mocking
- eslint.md — Oxlint/Oxfmt (oxc-config-mantine) setup, plus legacy eslint-config-mantine option