@material-ui/core is the legacy v4 version of the popular Material-UI library, providing React components that implement Google's Material Design. It is widely known but now in maintenance mode. carbon-components is the core CSS package for IBM's Carbon Design System, typically paired with carbon-components-react to build enterprise-grade interfaces. While one is a complete React component library (v4) and the other is a styling foundation (often used with React wrappers), both represent mature design systems with distinct visual languages and architectural approaches.
Both @material-ui/core and carbon-components serve as foundations for building user interfaces, but they come from different philosophies and serve different stages of a project's lifecycle. @material-ui/core represents the mature but legacy v4 of the Material-UI ecosystem, while carbon-components is the styling engine for IBM's Carbon Design System. Let's compare how they handle common development tasks.
@material-ui/core is the legacy package for MUI v4.
@mui/material for v5 and beyond.// @material-ui/core: Legacy import path
import Button from '@material-ui/core/Button';
import { createMuiTheme } from '@material-ui/core/styles';
// ⚠️ Warning: This package is deprecated for new work
carbon-components is the active CSS foundation for Carbon.
carbon-components-react for React apps.// carbon-components: Importing the styles
import 'carbon-components/css/carbon-components.min.css';
// Paired with React components (separate package)
import { Button } from 'carbon-components-react';
@material-ui/core uses JSS (JavaScript Styles) by default.
// @material-ui/core: JSS styling
import { makeStyles } from '@material-ui/core/styles';
const useStyles = makeStyles({
root: {
background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
borderRadius: 3,
},
});
function MyButton() {
const classes = useStyles();
return <button className={classes.root}>Click</button>;
}
carbon-components relies on SCSS and CSS classes.
// carbon-components: SCSS theming
@use 'carbon-components/scss/globals/scss/theme' as *;
.my-button {
background-color: $interactive-01;
color: $text-04;
}
@material-ui/core wraps native HTML elements.
component="button" to change the underlying tag.// @material-ui/core: Changing underlying element
import Button from '@material-ui/core/Button';
function NavButton() {
return (
<Button component="a" href="/home">
Go Home
</Button>
);
}
carbon-components (via React wrapper) also wraps elements but focuses on strict accessibility.
// carbon-components-react: Strict props
import { Button } from 'carbon-components-react';
function NavButton() {
return (
<Button href="/home" kind="primary">
Go Home
</Button>
);
}
@material-ui/core uses a theme object injected via context.
createMuiTheme.// @material-ui/core: Theme Provider
import { ThemeProvider, createMuiTheme } from '@material-ui/core/styles';
const theme = createMuiTheme({
palette: {
primary: { main: '#1976d2' },
},
});
function App() {
return <ThemeProvider theme={theme}>...</ThemeProvider>;
}
carbon-components uses CSS variables and SCSS maps.
// carbon-components: SCSS Tokens
$carbon--theme: $carbon--theme--g90; // Dark theme
@import 'carbon-components/scss/globals/scss/theme';
@material-ui/core supports accessibility but requires care.
// @material-ui/core: Manual ARIA
import Modal from '@material-ui/core/Modal';
function AccessibleModal() {
return <Modal aria-labelledby="modal-title" aria-describedby="modal-desc">...</Modal>;
}
carbon-components bakes accessibility into the core.
// carbon-components-react: Built-in A11y
import { Modal } from 'carbon-components-react';
function AccessibleModal() {
// Modal handles focus trapping and ARIA automatically
return <Modal open={true} modalHeading="Title">...</Modal>;
}
While the differences are clear, both systems aim to solve the same problems for frontend teams. Here are key overlaps:
// Both provide standard buttons
// MUI: <Button variant="contained">
// Carbon: <Button kind="primary">
// MUI: theme.spacing(2)
// Carbon: $spacing-05
// Both use React props for control
// <Component disabled={true} />
// MUI: <Grid container>
// Carbon: <Grid>
// Both ship with .d.ts files
// import { Button } from 'package'; // TypeScript works
| Feature | Shared by MUI and Carbon |
|---|---|
| Core Tech | ⚛️ React Components |
| Styling | 🎨 Themeable (JSS vs SCSS) |
| Layout | 📱 Responsive Grids |
| Types | 🛠️ TypeScript Support |
| Docs | 📚 Interactive Playgrounds |
| Feature | @material-ui/core | carbon-components |
|---|---|---|
| Status | ⚠️ Legacy (v4) | ✅ Active (Current) |
| Styling | 💅 JSS (JavaScript) | 🎨 SCSS/CSS (Build-time) |
| Focus | 🎨 Material Design (Consumer) | 🏢 Carbon Design (Enterprise) |
| Accessibility | 🤚 Manual Configuration | 🔒 Built-in Compliance |
| React Package | Included in core | Separate (carbon-components-react) |
| Theming | 🧩 Runtime Theme Object | 🛠️ SCSS Variables |
@material-ui/core is a legacy choice 🕰️. It is powerful and familiar to many, but it is no longer the frontier of React UI development. Use it only if you are maintaining an older codebase. For anything new, the modern @mui/material is the actual successor, not this package.
carbon-components is an enterprise choice 🏢. It prioritizes stability, accessibility, and data density. It is perfect for dashboards, internal tools, and applications where consistency and compliance matter more than flashy animations.
Final Thought: If you are starting fresh, do not use @material-ui/core. Choose @mui/material for a modern Material look, or carbon-components-react (with carbon-components) for a robust enterprise system. This comparison highlights why understanding package versions and design system goals is critical for long-term maintainability.
Choose @material-ui/core only if you are maintaining an existing application built on MUI v4 and cannot migrate to @mui/material (v5) yet. It is not recommended for new projects because it is in long-term support mode and lacks the performance improvements and new features of v5. Use this only for legacy maintenance where upgrading would break too much existing code.
Choose carbon-components (alongside carbon-components-react) if you are building an enterprise dashboard, data-heavy application, or need to adhere to IBM's design standards. It is ideal for teams that value accessibility, consistency, and a professional, data-dense aesthetic. This is a active, modern choice for new projects requiring a robust design system.
MUI v5 is out! ✨ Check out the latest documentation here.
React components for faster and simpler web development. Build your own design system, or start with Material Design.
Material-UI is available as an npm package.
// with npm
npm install @material-ui/core
// with yarn
yarn add @material-ui/core
Head to the v4 documentation for more details.
Diamond Sponsors are those who have pledged $1,500/month or more to Material-UI.
via Patreon
via OpenCollective
Direct
Gold Sponsors are those who have pledged $500/month or more to Material-UI.
See the full list of our backers.
Here is a quick example to get you started, it's all you need:
import React from 'react';
import ReactDOM from 'react-dom';
import Button from '@material-ui/core/Button';
function App() {
return <Button variant="contained">Hello World</Button>;
}
ReactDOM.render(<App />, document.querySelector('#app'));
Yes, it's really all you need to get started as you can see in this live and interactive demo:
For how-to questions and other non-issues, please use StackOverflow instead of GitHub issues. There is a StackOverflow tag called "material-ui" that you can use to tag your questions.
Are you looking for an example project to get started? We host some.
Check out our documentation website.
You can find complete templates & themes in the Material-UI store.
Read the contributing guide to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes to Material-UI.
Notice that contributions go far beyond pull requests and commits. Although we love giving you the opportunity to put your stamp on Material-UI, we also are thrilled to receive a variety of other contributions.
If you have recently updated, please read the changelog for details of what has changed.
The future plans and high priority features and enhancements can be found in the roadmap file.
This project is licensed under the terms of the MIT license.
These great services sponsor Material-UI's core infrastructure:
GitHub allows us to host the Git repository.
CircleCI allows us to run the test suite.
Netlify allows us to distribute the documentation.
CrowdIn allows us to translate the documentation.
BrowserStack allows us to test in real browsers.
CodeCov allows us to monitor the test coverage.