vue-material-design-icons vs vue-awesome
Vue.js Icon Libraries Comparison
3 Years
vue-material-design-iconsvue-awesome
What's Vue.js Icon Libraries?

Icon libraries for Vue.js provide a collection of scalable vector icons that can be easily integrated into Vue applications. These libraries offer customizable icons that enhance the visual appeal of web applications, improve user experience, and provide intuitive representations of actions, objects, or concepts. They often come with features like customizable sizes, colors, and styles, making them versatile for various design needs. vue-awesome is a Vue component for Font Awesome icons, allowing easy integration and customization of the popular icon set. vue-material-design-icons is a collection of Material Design icons for Vue, providing a wide range of icons designed according to Google’s Material Design guidelines, ensuring consistency and modern aesthetics.

Package Weekly Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
vue-material-design-icons31,332
1758.23 MB610 months agoMIT
vue-awesome13,250
2,4312.58 MB37-MIT
Feature Comparison: vue-material-design-icons vs vue-awesome

Icon Set

  • vue-material-design-icons:

    vue-material-design-icons offers a curated collection of Material Design icons, which are designed to be simple, clean, and consistent. While the set is not as large as Font Awesome, it is focused and well-suited for applications that adhere to Material Design guidelines.

  • vue-awesome:

    vue-awesome leverages the extensive Font Awesome icon set, which includes thousands of icons across various categories. This makes it suitable for a wide range of applications, from simple projects to complex ones requiring diverse iconography.

Customization

  • vue-material-design-icons:

    vue-material-design-icons provides customization options for its icons, including size and color. However, since it follows the Material Design specification, the icons are more standardized, which may limit some aspects of customization compared to Font Awesome.

  • vue-awesome:

    vue-awesome allows for easy customization of Font Awesome icons, including changing sizes, colors, and styles. It supports both solid and outline styles, and you can easily add custom icons if needed.

Performance

  • vue-material-design-icons:

    vue-material-design-icons is designed to be lightweight, with a smaller bundle size compared to Font Awesome. This makes it a better choice for performance-sensitive applications, especially those that only need a specific set of Material Design icons.

  • vue-awesome:

    vue-awesome is optimized for performance, but since it uses the entire Font Awesome library by default, it can increase the bundle size if not configured properly. To mitigate this, you can import only the icons you need.

Ease of Use

  • vue-material-design-icons:

    vue-material-design-icons is also user-friendly, with a simple API for integrating Material Design icons into Vue components. The documentation is straightforward, making it easy for developers to get started.

  • vue-awesome:

    vue-awesome is easy to use, especially for developers familiar with Font Awesome. The integration with Vue is seamless, and the documentation provides clear examples for quick implementation.

Code Example

  • vue-material-design-icons:

    Using Material Design Icons with vue-material-design-icons

    <template>
      <div>
        <md-icon name="home" />
        <md-icon name="favorite" />
      </div>
    </template>
    
    <script>
    import { MdIcon } from 'vue-material-design-icons';
    
    export default {
      components: {
        MdIcon,
      },
    };
    </script>
    
  • vue-awesome:

    Using Font Awesome Icons with vue-awesome

    <template>
      <div>
        <font-awesome-icon icon="coffee" />
        <font-awesome-icon icon="user" />
      </div>
    </template>
    
    <script>
    import { library } from '@fortawesome/fontawesome-svg-core';
    import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';
    import { faCoffee, faUser } from '@fortawesome/free-solid-svg-icons';
    
    library.add(faCoffee, faUser);
    
    export default {
      components: {
        FontAwesomeIcon,
      },
    };
    </script>
    
How to Choose: vue-material-design-icons vs vue-awesome
  • vue-material-design-icons:

    Choose vue-material-design-icons if you prefer a collection of Material Design icons that are lightweight and designed for modern web applications. This package is ideal for projects that follow Material Design principles and need a consistent set of icons.

  • vue-awesome:

    Choose vue-awesome if you want to integrate Font Awesome icons into your Vue application easily. It provides a straightforward way to use the extensive Font Awesome library with Vue components, allowing for easy customization and scalability.

README for vue-material-design-icons

Vue Material Design Icon Components

This library is a collection of Vue single-file components to render Material Design Icons, sourced from the MaterialDesign project. It also includes some CSS that helps make the scaling of the icons a little easier.

Getting started

  1. Install the package

    yarn add vue-material-design-icons
    

    OR

    npm i vue-material-design-icons
    
  2. Import the icon, and declare it as a local component:

    import MenuIcon from 'vue-material-design-icons/Menu.vue';
    
    components: {
      MenuIcon;
    }
    

    OR

    Declare it as a global component:

    import MenuIcon from 'vue-material-design-icons/Menu.vue';
    
    Vue.component('menu-icon', MenuIcon);
    

    Note Icon files are pascal cased, e.g. CheckboxMarkedCircle.vue, and their default name has Icon appended e.g. CheckboxMarkedCircleIcon.

  3. Then use it in your template code!

    <menu-icon />
    
  4. Optional Add the included stylesheet. This few lines of CSS will cause the icons to scale with any surrounding text, which can be helpful when you primarily style with CSS. Note that if you intend to handle sizing with the size prop, you probably don't want to use this as it may conflict.

    import 'vue-material-design-icons/styles.css';
    

Props

  • title - This changes the hover tooltip as well as the title shown to screen readers. For accessibility purposes, if a title is not provided, then the icon is hidden from screen readers. This is to force developers to use meaningful titles for their icon usage.

    Example:

    <android-icon title="this is an icon!" />
    
  • fillColor - This property allows you to set the fill colour of an icon via JS instead of requiring CSS changes. Note that any CSS values, such as fill: currentColor; provided by the optional CSS file, may override colours set with this prop.

    Example:

    <android-icon fillColor="#FF0000" />
    
  • size - This property overrides the width and height attributes on the SVG. The default is 24.

    Example:

    <android-icon :size="48" />
    

Icons

A list of the icons can be found at the Material Design Icons website. The icons packaged here are pascal cased versions of the names displayed on the website, to match the Vue Style Guide. For example, the icon named ultra-high-definition would be imported as "vue-material-design-icons/UltraHighDefinition.vue".

Tips

  • Use resolve in your Webpack config to clean up the imports:

    resolve: {
      alias : {
        "icons": path.resolve(__dirname, "node_modules/vue-material-design-icons")
      },
      extensions: [
        ".vue"
      ]
    }
    

    This will give you much shorter and more readable imports, like import Android from "icons/Android", rather than import Android from "vue-material-design-icons/Android.vue". Much better!

  • If you want custom sizing, add your own css to adjust the height and width of the icons

    .material-design-icon.icon-2x {
      height: 2em;
      width: 2em;
    }
    
    .material-design-icon.icon-2x > .material-design-icon__svg {
      height: 2em;
      width: 2em;
    }
    

    Then add your size class

    <fullscreen-icon class="icon-2x" />
    

    While I recommend using CSS for styling, you can also pass in a size prop, detailed in the Props section above.

Credits

Austin Andrews / Templarian for the MaterialDesign project. This supplies the SVG icons for this project, which are packaged as Vue single file components.

Elliot Dahl for this article on prototypr.io. This is where the recommended CSS comes from.

Attila Max Ruf / therufa for the mdi-vue library which inspired this one. It also produces single file components from material design icons.