angular-material, material-ui, react-bootstrap, and vue-material are UI component libraries designed to speed up interface development for AngularJS, React, and Vue applications. While react-bootstrap remains actively maintained for modern React stacks, the other three packages represent legacy versions tied to older framework releases like AngularJS 1.x, Vue 2, and pre-MUI React versions. Developers often encounter these packages when maintaining older codebases or evaluating historical design system implementations. Understanding their current status is critical to avoiding technical debt in new projects.
When evaluating angular-material, material-ui, react-bootstrap, and vue-material, the most important factor is not just feature parity — it is maintenance status. Three of these four packages are tied to older framework versions that are no longer the industry standard. Let's break down how they differ in real-world usage and why picking the wrong one can cost your team months of refactoring work.
The first thing you need to know is which packages are safe for new development.
react-bootstrap is the only actively maintained package in this group for modern stacks.
angular-material is legacy.
@angular/material.material-ui is legacy.
@mui/material starting with version 5.material-ui npm package is no longer receiving feature updates.vue-material is legacy.
💡 Rule of Thumb: If you are starting a new project today, avoid
angular-material,material-ui, andvue-material. Use their modern successors instead.
Each library handles component configuration differently based on its underlying framework.
angular-material uses HTML attributes and directives.
md-primary.<!-- angular-material -->
<md-button class="md-primary" ng-click="submit()">
Submit
</md-button>
material-ui (legacy) uses React props.
primary.// material-ui (v4)
import Button from 'material-ui/Button';
<Button variant="contained" color="primary" onClick={handleSubmit}>
Submit
</Button>
react-bootstrap uses React props with Bootstrap class mapping.
variant which map to Bootstrap classes internally.// react-bootstrap
import Button from 'react-bootstrap/Button';
<Button variant="primary" onClick={handleSubmit}>
Submit
</Button>
vue-material uses Vue template syntax.
md-primary similar to AngularJS.@click syntax.<!-- vue-material -->
<md-button class="md-primary" @click="submit">
Submit
</md-button>
Theming approaches vary significantly between these libraries.
angular-material relies on a global theme provider.
// angular-material config
$mdThemingProvider.theme('default')
.primaryPalette('blue')
.accentPalette('orange');
material-ui uses a ThemeProvider component.
// material-ui ThemeProvider
import { MuiThemeProvider, createMuiTheme } from 'material-ui/styles';
const theme = createMuiTheme({
palette: { primary: { main: '#1976d2' } }
});
<MuiThemeProvider theme={theme}>...</MuiThemeProvider>
react-bootstrap leans on CSS variables and Sass.
// react-bootstrap Sass customization
$primary: #1976d2;
@import '~bootstrap/scss/bootstrap';
vue-material uses a global configuration object.
// vue-material install
import VueMaterial from 'vue-material'
Vue.use(VueMaterial, {
theme: {
primary: 'blue'
}
})
Input components show clear differences in how state is managed.
angular-material binds via ng-model.
<!-- angular-material -->
<md-input-container>
<label>Name</label>
<input ng-model="user.name" required>
</md-input-container>
material-ui uses controlled components.
// material-ui TextField
import TextField from 'material-ui/TextField';
<TextField
label="Name"
value={name}
onChange={(e) => setName(e.target.value)}
/>
react-bootstrap also uses controlled components.
is-invalid are passed as props.// react-bootstrap Form.Control
import Form from 'react-bootstrap/Form';
<Form.Control
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
isInvalid={!!error}
/>
vue-material uses v-model.
<!-- vue-material -->
<md-field>
<label>Name</label>
<md-input v-model="name"></md-input>
</md-field>
| Package | Framework Version | Status | Modern Alternative |
|---|---|---|---|
angular-material | AngularJS 1.x | ❌ Legacy | @angular/material |
material-ui | React (pre-v5) | ❌ Deprecated | @mui/material |
react-bootstrap | React 16+ | ✅ Active | N/A |
vue-material | Vue 2 | ❌ Legacy | vuetify, primevue |
If you are building something new today, react-bootstrap is the only safe choice from this specific list. The other three packages are tied to framework versions that are reaching end-of-life. Using them means you will inherit technical debt from day one.
For Angular projects, skip angular-material and install @angular/material. For React projects using Material Design, skip material-ui and install @mui/material. For Vue 3 projects, skip vue-material and look at vuetify or primevue.
Reserve these legacy packages for maintenance work on existing applications. Do not let historical momentum dictate your new architecture — pick tools that will still be supported next year.
Choose material-ui only if you are upgrading an older React codebase that has not yet migrated to MUI v5. This package name is deprecated — the library now lives under @mui/material with significant API changes. Starting a new project with this package will force you to migrate sooner rather than later. It is better to begin with the current @mui/material package to ensure long-term support.
Choose angular-material only if you are maintaining an existing AngularJS 1.x application that already depends on it. Do not use this package for any new Angular (v2+) projects because it is incompatible with modern Angular architectures. For new work, switch to @angular/material which supports the current framework version. Sticking with this legacy package will limit your ability to use modern TypeScript features and performance improvements.
Choose react-bootstrap if your team prefers Bootstrap styling and you are building a new React application. It wraps native Bootstrap components to work seamlessly with React state and props without requiring jQuery. This package is actively maintained and supports Bootstrap 5 features out of the box. It is a solid choice for internal tools or projects where design consistency with Bootstrap is a priority.
Choose vue-material only if you are maintaining a legacy Vue 2 application that already uses it. This package is not designed for Vue 3 and lacks support for the Composition API. For new Vue projects, consider alternatives like vuetify or primevue that offer active maintenance and Vue 3 compatibility. Using this package in new work will create immediate upgrade pressure as the Vue ecosystem moves forward.
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.
Material-UI is a set of React components that implement Google's Material Design specification.
Check out our documentation site for live examples. It's still a work in progress, but hopefully you can see where we're headed.
Recently Updated? Please read the changelog, this README and the documentation before posting an issue.
We recommend that you get to know React before diving into material-ui. Material-UI is a set of React components, so understanding how React fits into web development is important.
(If you're not familiar with Node, or with the concept of Single Page Applications (SPAs), head over to the documentation website for a quick introduction before you read on.)
Material-UI is available as an npm package.
Stable channel
npm install material-ui
Pre-release channel
npm install material-ui@next
Please note that @next will only point to pre-releases; to get the latest stable release use @latest instead.
(not needed for versions 0.19.0 and higher)
Some components use react-tap-event-plugin to listen for touch events because onClick is not fast enough This dependency is temporary and will eventually go away. Until then, be sure to inject this plugin at the start of your app.
import injectTapEventPlugin from 'react-tap-event-plugin';
// Needed for onTouchTap
// http://stackoverflow.com/a/34015469/988941
injectTapEventPlugin();
Material-UI was designed with the Roboto font in mind. So be sure to include it in your project. Here are some instructions on how to do so.
Beginning with v0.15.0, Material-UI components require a theme to be provided. The quickest way to get up and running is by using the MuiThemeProvider to inject the theme into your application context. Following that, you can use any of the components as demonstrated in the documentation.
Here is a quick example to get you started:
./App.js
import React from 'react';
import ReactDOM from 'react-dom';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import MyAwesomeReactComponent from './MyAwesomeReactComponent';
const App = () => (
<MuiThemeProvider>
<MyAwesomeReactComponent />
</MuiThemeProvider>
);
ReactDOM.render(
<App />,
document.getElementById('app')
);
./MyAwesomeReactComponent.js
import React from 'react';
import RaisedButton from 'material-ui/RaisedButton';
const MyAwesomeReactComponent = () => (
<RaisedButton label="Default" />
);
export default MyAwesomeReactComponent;
Please refer to each component's documentation page to see how they should be imported.
We have implemented a default theme to render all Material-UI components. Styling components to your liking is simple and hassle-free. This can be achieved in the following two ways:
There are 2 projects that you can look at to get started. They can be found in the examples folder. These projects are basic examples that show how to consume material-ui components in your own project. The first project uses browserify for module bundling and gulp for JS task automation, while the second project uses webpack for module bundling and building.
The source code for this documentation site is also included in the repository. This is a slightly more complex project that also uses webpack, and contains examples of every material-ui component. Check out the docs folder for build instructions.
The future plans and high priority features and enhancements can be found in the ROADMAP.md file.
Material-UI came about from our love of React and Google's Material Design. We're currently using it on a project at Call-Em-All and plan on adding to it and making it better. If you'd like to help, check out the docs folder. We'd greatly appreciate any contribution you make. :)
Thank you to BrowserStack for providing the infrastructure that allows us to test material-ui in real browsers.
This project is licensed under the terms of the MIT license