Which is Better Vue.js Icon Libraries?
vue-material-design-icons vs vue-awesome
1 Year
vue-material-design-iconsvue-awesome
What's Vue.js Icon Libraries?

Icon libraries are essential in web development as they provide a collection of scalable vector icons that can be easily integrated into applications. These libraries enhance user interfaces by offering visually appealing icons that improve usability and aesthetics. Both 'vue-awesome' and 'vue-material-design-icons' cater to Vue.js applications but serve different design philosophies and use cases, making them valuable tools for developers aiming to create engaging user experiences.

NPM Package Downloads Trend
Github Stars Ranking
Stat Detail
Package
Downloads
Stars
Size
Issues
Publish
License
vue-material-design-icons35,2011638.23 MB6a month agoMIT
vue-awesome21,8342,4292.58 MB37-MIT
Feature Comparison: vue-material-design-icons vs vue-awesome

Icon Variety

  • vue-material-design-icons: Provides a curated set of Material Design icons, focusing on simplicity and clarity. While the selection may be smaller than Font Awesome, the icons are specifically designed to fit within the Material Design framework, ensuring consistency across the UI.
  • vue-awesome: Offers a vast collection of Font Awesome icons, providing access to thousands of icons that cover a wide range of categories and use cases. This extensive library allows developers to find the perfect icon for any situation, enhancing the overall design of the application.

Customization

  • vue-material-design-icons: Customization is also supported, but it is more aligned with Material Design principles. Developers can style the icons to fit their needs, but the design philosophy encourages a more standardized approach to maintain consistency.
  • vue-awesome: Highly customizable, allowing developers to easily change sizes, colors, and styles using CSS. This flexibility makes it easy to adapt icons to match the application's branding and design requirements without compromising on quality.

Integration

  • vue-material-design-icons: Designed specifically for Vue.js, this library provides a simple API for integrating Material Design icons into Vue components. It ensures that developers can quickly implement icons without complex setup.
  • vue-awesome: Seamlessly integrates with Vue.js applications, allowing for straightforward implementation of icons within components. It supports various Vue features, such as directives and props, making it easy to use in dynamic applications.

Performance

  • vue-material-design-icons: Generally lightweight, as it focuses on a specific set of icons. This can lead to better performance out of the box, but developers should still be mindful of how many icons are imported to maintain optimal performance.
  • vue-awesome: While it provides a large icon set, the performance can be impacted if not managed properly. Developers should consider tree-shaking unused icons to optimize bundle size and improve load times, especially in larger applications.

Design Consistency

  • vue-material-design-icons: Maintains a consistent design language that aligns with Material Design guidelines. This ensures that all icons have a uniform look and feel, contributing to a cohesive user experience.
  • vue-awesome: Icons can vary in style since they come from a broader library. While this offers variety, it may lead to inconsistencies in design if not carefully selected and styled to match the application's overall aesthetic.
How to Choose: vue-material-design-icons vs vue-awesome
  • vue-material-design-icons: Opt for 'vue-material-design-icons' if you are looking for a collection of Material Design icons that align with Google's design principles. This package is suitable for projects that prioritize a clean, modern aesthetic and require icons that adhere to Material Design guidelines.
  • vue-awesome: Choose 'vue-awesome' if you need a wide variety of customizable icons from Font Awesome, allowing for extensive design flexibility and integration with existing Font Awesome projects. It is ideal for developers who prefer a comprehensive icon set that can be easily styled and manipulated within Vue components.
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.