Carefully designed icons for modern interfaces. MingCute is a simple, elegant open-source icon library built for web and mobile products.
See the codeMingcute Icons is the public, open-source distribution of the Mingcute Icon System.
It provides 1,663 icons in both Core Regular and Core Filled, for a total of 3,326 styled icon definitions, distributed across 10 production packages for:
Every renderer uses the same generated @mingcute/icons definitions. Icon geometry is compiled once rather than duplicated across framework packages, keeping rendering consistent and the repository easier to maintain.
@mingcute/icons.Every Mingcute icon is drawn on a 24 × 24 grid with consistent visual proportions.
The public catalogue includes:
Core Regular is designed around a consistent 2 px stroke. Canonical vector artwork remains editable in the source files and scales through SVG without losing its intended proportions.
Use the Mingcute website to:
Use the packages in this repository when icons need to be installed, versioned, tree-shaken, and rendered consistently in an application.
For React:
npm install @mingcute/react
For another framework, replace @mingcute/react with the appropriate package listed below.
import { Home1Regular } from '@mingcute/react/core-regular';
export function HomeLink() {
return (
<a href="/">
<Home1Regular size={20} aria-hidden="true" />
<span>Home</span>
</a>
);
}
Install only the package required by your project.
| Target | Package | Installation | Purpose |
|---|---|---|---|
| Icon definitions | @mingcute/icons | npm install @mingcute/icons | Framework-neutral definitions and rendering helpers |
| React | @mingcute/react | npm install @mingcute/react | Typed React SVG components |
| Vue | @mingcute/vue | npm install @mingcute/vue | Typed Vue 3 SVG components |
| React Native | @mingcute/react-native | npm install @mingcute/react-native | Native components using react-native-svg |
| Svelte | @mingcute/svelte | npm install @mingcute/svelte | Svelte 5 icon components |
| SolidJS | @mingcute/solid | npm install @mingcute/solid | SolidJS icon components |
| Vanilla JavaScript | @mingcute/vanilla | npm install @mingcute/vanilla | SVG strings and DOM helpers |
| Web Components | @mingcute/web-components | npm install @mingcute/web-components | Explicitly registered custom elements |
| SVG | @mingcute/svg | npm install @mingcute/svg | Optimized standalone SVG files |
| Font | @mingcute/font | npm install @mingcute/font | WOFF2 fonts, CSS classes, and metadata |
Framework packages use @mingcute/icons for shared icon geometry. The definitions package is installed automatically when required.
# npm
npm install @mingcute/react
# pnpm
pnpm add @mingcute/react
# Yarn
yarn add @mingcute/react
# Bun
bun add @mingcute/react
The public release contains 3,326 styled icon definitions across two importable styles.
| Import subpath | Style | Icons |
|---|---|---|
core-regular | Core Regular | 1,663 |
core-filled | Core Filled | 1,663 |
| Total | All public styles | 3,326 |
Additional Core, Cute, and Sharp styles are available in Mingcute Pro.
| Capability | Mingcute Icons | Mingcute Pro |
|---|---|---|
| Families and styles | Core Regular and Core Filled | 12 Core, Cute, and Sharp style combinations |
| Styled definitions | 3,326 | 20,152 |
| Package names | @mingcute/* | @mingcute/*-pro |
| Distribution | Public npm registry | Private Mingcute registry |
| Access | No account or CLI required | Active Pro entitlement and CLI configuration |
| License | Apache-2.0 | Mingcute Pro Commercial License |
The public and Pro packages use the same framework conventions and import structure. This makes migration straightforward while keeping the source repositories and licensing boundaries separate.
import { Home1Regular } from '@mingcute/react/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} title="Home" />;
}
<script setup lang="ts">
import { Home1Filled } from '@mingcute/vue/core-filled';
</script>
<template>
<Home1Filled :size="24" title="Home" />
</template>
import { Home1Regular } from '@mingcute/react-native/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} color="#10161F" title="Home" />;
}
React Native requires react-native-svg 13 or newer.
<script>
import { Home1Regular } from '@mingcute/svelte/core-regular';
</script>
<Home1Regular size={24} title="Home" />
import { Home1Regular } from '@mingcute/solid/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} title="Home" />;
}
import { createIcon } from '@mingcute/vanilla';
import { Home1Regular } from '@mingcute/vanilla/core-regular';
const navigation = document.querySelector('nav');
navigation?.append(
createIcon(Home1Regular, {
size: 24,
title: 'Home',
}),
);
Register the component:
import { defineHome1Regular } from '@mingcute/web-components/core-regular/home-1';
defineHome1Regular();
Use the registered custom element:
<mingcute-home-1-regular
size="24"
title="Home"
></mingcute-home-1-regular>
import homeUrl from '@mingcute/svg/core-regular/home-1.svg';
Import the stylesheet:
import '@mingcute/font/core-regular.min.css';
Use the generated class:
<i class="mgc mgc-home-1-regular" aria-hidden="true"></i>
import { renderIconSource } from '@mingcute/icons';
import { Home1Icon } from '@mingcute/icons/core-regular';
const svg = renderIconSource(Home1Icon);
@mingcute/icons contains the framework-neutral icon definitions.
Framework packages provide small renderer-specific wrappers and install the shared definitions automatically:
@mingcute/icons
├── @mingcute/react
├── @mingcute/vue
├── @mingcute/react-native
├── @mingcute/svelte
├── @mingcute/solid
├── @mingcute/vanilla
└── @mingcute/web-components
This structure prevents icon geometry from being duplicated across framework packages.
The standalone SVG and font packages are generated from the same canonical artwork and validated independently.
Use a style entry point for convenient named imports:
import {
Home1Regular,
Search2Regular,
} from '@mingcute/react/core-regular';
Use a direct icon path for the smallest module graph:
import Home1Regular from '@mingcute/react/core-regular/home-1';
Package roots expose shared utilities and types rather than the complete icon catalogue. This prevents accidental imports of every icon.
Mingcute JavaScript packages:
JavaScript packages declare sideEffects: false.
@mingcute/font marks imported CSS as side-effectful so bundlers retain the stylesheet.
For predictable bundle sizes:
Framework components are decorative by default and remain hidden from assistive technology unless they receive an accessible title or label.
The examples below use these React imports:
import {
Home1Regular,
MenuRegular,
} from '@mingcute/react/core-regular';
Provide a title when an icon communicates meaning by itself:
<Home1Regular size={24} title="Home" />
Keep decorative icons hidden from assistive technology:
<Home1Regular size={24} aria-hidden="true" />
When visible text already labels a button or link, the icon should normally remain decorative:
<button type="button">
<Home1Regular size={20} aria-hidden="true" />
<span>Home</span>
</button>
Give the control an accessible name and keep the icon decorative:
<button type="button" aria-label="Open navigation">
<MenuRegular size={20} aria-hidden="true" />
</button>
Do not rely on an icon’s shape or color alone to communicate an action, status, or meaning.
The compiler preserves supported SVG features, including:
Resource identifiers are scoped per rendered instance to prevent collisions when the same icon appears more than once on a page.
Icon fonts cannot reproduce every SVG feature. Use the SVG or framework packages when exact gradients, masks, patterns, or original colors are required.
| Package | Supported runtime |
|---|---|
@mingcute/react | React 18 or 19 |
@mingcute/vue | Vue 3.5 or newer |
@mingcute/react-native | React 18+, React Native 0.72+, and react-native-svg 13+ |
@mingcute/svelte | Svelte 5.20 or newer |
@mingcute/solid | SolidJS 1.9.x |
| Vanilla, Web Components, and SVG | Modern ESM toolchains and standards-compliant SVG environments |
| Font | Modern browsers with WOFF2 support |
Repository development requires:
Consumer applications do not need pnpm unless they are contributing to this repository.
Confirm:
Component exports use PascalCase with a style suffix:
Home1Regular
Direct icon filenames use kebab-case:
home-1
Use a direct icon import:
import Home1Regular from '@mingcute/react/core-regular/home-1';
Confirm that your bundler supports ESM tree shaking and avoid namespace imports of complete style entry points.
Keep the icon decorative when nearby text already labels the action:
<button type="button">
<Home1Regular aria-hidden="true" />
<span>Home</span>
</button>
Only add a title or accessible label when the icon communicates meaning by itself.
Use the SVG or framework component package for maximum fidelity.
Icon fonts cannot reproduce every gradient, mask, pattern, or original-color asset.
Canonical SVG artwork is stored using the following structure:
assets/svg/core/{regular,filled}/{category}/{icon}.svg
The source directories organize canonical artwork. Consumer packages flatten each style into stable package subpaths:
@mingcute/react/core-regular
@mingcute/svg/core-regular/home-1.svg
Because the style is already represented by the package subpath, generated files use concise names such as:
home-1.svg
The compiler:
Generated package output should not be edited by hand.
mingcute-icons/
├── assets/
│ └── svg/core/{regular,filled}/
├── packages/
│ ├── core/ private build contracts
│ ├── compiler/ private SVG compiler
│ ├── icons/ @mingcute/icons
│ ├── react/ @mingcute/react
│ ├── vue/ @mingcute/vue
│ ├── react-native/ @mingcute/react-native
│ ├── svelte/ @mingcute/svelte
│ ├── solid/ @mingcute/solid
│ ├── vanilla/ @mingcute/vanilla
│ ├── web-components/ @mingcute/web-components
│ ├── svg/ @mingcute/svg
│ └── font/ @mingcute/font
├── release.json coordinated public package version
└── pnpm-workspace.yaml
@mingcute/core and @mingcute/compiler are private workspace packages. They are never published and must not appear in consumer runtime dependency trees.
pnpm install --frozen-lockfile
pnpm build
pnpm check
pnpm release:check
pnpm pack:dry
pnpm release:check verifies:
pnpm check and pnpm pack:dry before opening a pull request.Bug reports should include:
All 10 public packages use the coordinated version defined in release.json.
A release is complete only when every package passes:
Avoid documenting a fixed release version in this README. The current version should be read from package metadata or release.json.
Install the Mingcute Icon Figma plugin to search and place icons directly in Figma.
Related resources:
Do not report suspected vulnerabilities in a public issue.
Contact the Mingcute team privately through the Mingcute website and include the affected versions and reproduction details.
For package usage or rendering defects, include:
Never include private Mingcute Pro artwork, commercial license material, registry credentials, license keys, or private infrastructure code in a public issue.
Mingcute Icons is licensed under the Apache License 2.0.
252 followers · starred Jan 2026
29 followers · starred Oct 2023
2,020 followers · starred Oct 2025
17 followers · starred Aug 2025
Carefully designed icons for modern interfaces. MingCute is a simple, elegant open-source icon library built for web and mobile products.
See the codeMingcute Icons is the public, open-source distribution of the Mingcute Icon System.
It provides 1,663 icons in both Core Regular and Core Filled, for a total of 3,326 styled icon definitions, distributed across 10 production packages for:
Every renderer uses the same generated @mingcute/icons definitions. Icon geometry is compiled once rather than duplicated across framework packages, keeping rendering consistent and the repository easier to maintain.
@mingcute/icons.Every Mingcute icon is drawn on a 24 × 24 grid with consistent visual proportions.
The public catalogue includes:
Core Regular is designed around a consistent 2 px stroke. Canonical vector artwork remains editable in the source files and scales through SVG without losing its intended proportions.
Use the Mingcute website to:
Use the packages in this repository when icons need to be installed, versioned, tree-shaken, and rendered consistently in an application.
For React:
npm install @mingcute/react
For another framework, replace @mingcute/react with the appropriate package listed below.
import { Home1Regular } from '@mingcute/react/core-regular';
export function HomeLink() {
return (
<a href="/">
<Home1Regular size={20} aria-hidden="true" />
<span>Home</span>
</a>
);
}
Install only the package required by your project.
| Target | Package | Installation | Purpose |
|---|---|---|---|
| Icon definitions | @mingcute/icons | npm install @mingcute/icons | Framework-neutral definitions and rendering helpers |
| React | @mingcute/react | npm install @mingcute/react | Typed React SVG components |
| Vue | @mingcute/vue | npm install @mingcute/vue | Typed Vue 3 SVG components |
| React Native | @mingcute/react-native | npm install @mingcute/react-native | Native components using react-native-svg |
| Svelte | @mingcute/svelte | npm install @mingcute/svelte | Svelte 5 icon components |
| SolidJS | @mingcute/solid | npm install @mingcute/solid | SolidJS icon components |
| Vanilla JavaScript | @mingcute/vanilla | npm install @mingcute/vanilla | SVG strings and DOM helpers |
| Web Components | @mingcute/web-components | npm install @mingcute/web-components | Explicitly registered custom elements |
| SVG | @mingcute/svg | npm install @mingcute/svg | Optimized standalone SVG files |
| Font | @mingcute/font | npm install @mingcute/font | WOFF2 fonts, CSS classes, and metadata |
Framework packages use @mingcute/icons for shared icon geometry. The definitions package is installed automatically when required.
# npm
npm install @mingcute/react
# pnpm
pnpm add @mingcute/react
# Yarn
yarn add @mingcute/react
# Bun
bun add @mingcute/react
The public release contains 3,326 styled icon definitions across two importable styles.
| Import subpath | Style | Icons |
|---|---|---|
core-regular | Core Regular | 1,663 |
core-filled | Core Filled | 1,663 |
| Total | All public styles | 3,326 |
Additional Core, Cute, and Sharp styles are available in Mingcute Pro.
| Capability | Mingcute Icons | Mingcute Pro |
|---|---|---|
| Families and styles | Core Regular and Core Filled | 12 Core, Cute, and Sharp style combinations |
| Styled definitions | 3,326 | 20,152 |
| Package names | @mingcute/* | @mingcute/*-pro |
| Distribution | Public npm registry | Private Mingcute registry |
| Access | No account or CLI required | Active Pro entitlement and CLI configuration |
| License | Apache-2.0 | Mingcute Pro Commercial License |
The public and Pro packages use the same framework conventions and import structure. This makes migration straightforward while keeping the source repositories and licensing boundaries separate.
import { Home1Regular } from '@mingcute/react/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} title="Home" />;
}
<script setup lang="ts">
import { Home1Filled } from '@mingcute/vue/core-filled';
</script>
<template>
<Home1Filled :size="24" title="Home" />
</template>
import { Home1Regular } from '@mingcute/react-native/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} color="#10161F" title="Home" />;
}
React Native requires react-native-svg 13 or newer.
<script>
import { Home1Regular } from '@mingcute/svelte/core-regular';
</script>
<Home1Regular size={24} title="Home" />
import { Home1Regular } from '@mingcute/solid/core-regular';
export function HomeIcon() {
return <Home1Regular size={24} title="Home" />;
}
import { createIcon } from '@mingcute/vanilla';
import { Home1Regular } from '@mingcute/vanilla/core-regular';
const navigation = document.querySelector('nav');
navigation?.append(
createIcon(Home1Regular, {
size: 24,
title: 'Home',
}),
);
Register the component:
import { defineHome1Regular } from '@mingcute/web-components/core-regular/home-1';
defineHome1Regular();
Use the registered custom element:
<mingcute-home-1-regular
size="24"
title="Home"
></mingcute-home-1-regular>
import homeUrl from '@mingcute/svg/core-regular/home-1.svg';
Import the stylesheet:
import '@mingcute/font/core-regular.min.css';
Use the generated class:
<i class="mgc mgc-home-1-regular" aria-hidden="true"></i>
import { renderIconSource } from '@mingcute/icons';
import { Home1Icon } from '@mingcute/icons/core-regular';
const svg = renderIconSource(Home1Icon);
@mingcute/icons contains the framework-neutral icon definitions.
Framework packages provide small renderer-specific wrappers and install the shared definitions automatically:
@mingcute/icons
├── @mingcute/react
├── @mingcute/vue
├── @mingcute/react-native
├── @mingcute/svelte
├── @mingcute/solid
├── @mingcute/vanilla
└── @mingcute/web-components
This structure prevents icon geometry from being duplicated across framework packages.
The standalone SVG and font packages are generated from the same canonical artwork and validated independently.
Use a style entry point for convenient named imports:
import {
Home1Regular,
Search2Regular,
} from '@mingcute/react/core-regular';
Use a direct icon path for the smallest module graph:
import Home1Regular from '@mingcute/react/core-regular/home-1';
Package roots expose shared utilities and types rather than the complete icon catalogue. This prevents accidental imports of every icon.
Mingcute JavaScript packages:
JavaScript packages declare sideEffects: false.
@mingcute/font marks imported CSS as side-effectful so bundlers retain the stylesheet.
For predictable bundle sizes:
Framework components are decorative by default and remain hidden from assistive technology unless they receive an accessible title or label.
The examples below use these React imports:
import {
Home1Regular,
MenuRegular,
} from '@mingcute/react/core-regular';
Provide a title when an icon communicates meaning by itself:
<Home1Regular size={24} title="Home" />
Keep decorative icons hidden from assistive technology:
<Home1Regular size={24} aria-hidden="true" />
When visible text already labels a button or link, the icon should normally remain decorative:
<button type="button">
<Home1Regular size={20} aria-hidden="true" />
<span>Home</span>
</button>
Give the control an accessible name and keep the icon decorative:
<button type="button" aria-label="Open navigation">
<MenuRegular size={20} aria-hidden="true" />
</button>
Do not rely on an icon’s shape or color alone to communicate an action, status, or meaning.
The compiler preserves supported SVG features, including:
Resource identifiers are scoped per rendered instance to prevent collisions when the same icon appears more than once on a page.
Icon fonts cannot reproduce every SVG feature. Use the SVG or framework packages when exact gradients, masks, patterns, or original colors are required.
| Package | Supported runtime |
|---|---|
@mingcute/react | React 18 or 19 |
@mingcute/vue | Vue 3.5 or newer |
@mingcute/react-native | React 18+, React Native 0.72+, and react-native-svg 13+ |
@mingcute/svelte | Svelte 5.20 or newer |
@mingcute/solid | SolidJS 1.9.x |
| Vanilla, Web Components, and SVG | Modern ESM toolchains and standards-compliant SVG environments |
| Font | Modern browsers with WOFF2 support |
Repository development requires:
Consumer applications do not need pnpm unless they are contributing to this repository.
Confirm:
Component exports use PascalCase with a style suffix:
Home1Regular
Direct icon filenames use kebab-case:
home-1
Use a direct icon import:
import Home1Regular from '@mingcute/react/core-regular/home-1';
Confirm that your bundler supports ESM tree shaking and avoid namespace imports of complete style entry points.
Keep the icon decorative when nearby text already labels the action:
<button type="button">
<Home1Regular aria-hidden="true" />
<span>Home</span>
</button>
Only add a title or accessible label when the icon communicates meaning by itself.
Use the SVG or framework component package for maximum fidelity.
Icon fonts cannot reproduce every gradient, mask, pattern, or original-color asset.
Canonical SVG artwork is stored using the following structure:
assets/svg/core/{regular,filled}/{category}/{icon}.svg
The source directories organize canonical artwork. Consumer packages flatten each style into stable package subpaths:
@mingcute/react/core-regular
@mingcute/svg/core-regular/home-1.svg
Because the style is already represented by the package subpath, generated files use concise names such as:
home-1.svg
The compiler:
Generated package output should not be edited by hand.
mingcute-icons/
├── assets/
│ └── svg/core/{regular,filled}/
├── packages/
│ ├── core/ private build contracts
│ ├── compiler/ private SVG compiler
│ ├── icons/ @mingcute/icons
│ ├── react/ @mingcute/react
│ ├── vue/ @mingcute/vue
│ ├── react-native/ @mingcute/react-native
│ ├── svelte/ @mingcute/svelte
│ ├── solid/ @mingcute/solid
│ ├── vanilla/ @mingcute/vanilla
│ ├── web-components/ @mingcute/web-components
│ ├── svg/ @mingcute/svg
│ └── font/ @mingcute/font
├── release.json coordinated public package version
└── pnpm-workspace.yaml
@mingcute/core and @mingcute/compiler are private workspace packages. They are never published and must not appear in consumer runtime dependency trees.
pnpm install --frozen-lockfile
pnpm build
pnpm check
pnpm release:check
pnpm pack:dry
pnpm release:check verifies:
pnpm check and pnpm pack:dry before opening a pull request.Bug reports should include:
All 10 public packages use the coordinated version defined in release.json.
A release is complete only when every package passes:
Avoid documenting a fixed release version in this README. The current version should be read from package metadata or release.json.
Install the Mingcute Icon Figma plugin to search and place icons directly in Figma.
Related resources:
Do not report suspected vulnerabilities in a public issue.
Contact the Mingcute team privately through the Mingcute website and include the affected versions and reproduction details.
For package usage or rendering defects, include:
Never include private Mingcute Pro artwork, commercial license material, registry credentials, license keys, or private infrastructure code in a public issue.
Mingcute Icons is licensed under the Apache License 2.0.
252 followers · starred Jan 2026
29 followers · starred Oct 2023
2,020 followers · starred Oct 2025
17 followers · starred Aug 2025