Skip to content
IconMind

Compared

IconMind vs Lucide

Lucide is the generalist set most React apps start with. IconMind draws the same grid and stroke, then adds the vocabulary an AI product needs.

The short answer

Use Lucide if your product is an ordinary web application and you want the set with the longest track record, the widest framework support and a community that has already answered your question on GitHub. It is excellent, it is free, and nothing on this page is an argument against it.

Use IconMind if a meaningful part of your interface is about models, agents, retrieval or infrastructure, and you keep running out of nouns. Lucide has 2,048 icons and almost none of them are a context window, a reranker, a tool call or an MCP resource. IconMind has 664 drawings for that vocabulary, on the same 24 px grid and the same 2 px stroke, so the two sets sit on one screen without clashing.

Using both is a legitimate answer and a common one. Start with Lucide, add IconMind for the AI surface, and a reader cannot tell which icon came from where.

 IconMindLucide
Icons2,287 (0.6.0)2,048 (v1.37.0, Aug 2026)
AI and agent vocabulary664 icons for LLMs, agents, MCP, RAG — a third of the seta handful (bot, brain, sparkles)
Variants and weightsoutline and duotone, each in thin / regular / bold (6 drawings per icon)one style; stroke width as a prop
FrameworksReact, Vue, Svelte, Solid, Preact, React Native, Astro, Laravel Blade, Flutter — one source, one releaseReact, Vue, Svelte, Solid, Preact, Angular, React Native, Flutter
MCP server for assistantsyes — `npx @iconmind/mcp` searches the set and returns paste-ready codeno
Grid and stroke24 px, 2 px stroke, every cell machine-validated24 px, 2 px stroke
LicenceMIT — commercial use, no attributionISC — attribution required in derivative work
Brand logosnone, on purposenone, on purpose

Coverage: where each set runs out

Lucide covers the interface. Files, folders, arrows, media controls, weather, shapes, commerce, a good spread of everyday objects. It descends from Feather and inherits Feather's restraint, which is why so many products look at home in it straight away.

It runs out at the domain layer. Search it for the words an AI product puts on screen and you meet the same four fallbacks: a sparkle for anything generative, a robot for anything autonomous, a cylinder for anything stored, a bolt for anything fast. A dashboard for an agent framework ends up using one picture to mean five things, and the reader learns nothing from any of them.

IconMind runs out in the other direction. There is no tooth, no chair, no croissant, no zodiac sign, and there will not be. What it has instead is 664 drawings for the vocabulary that entered software after 2023, and about 1,600 more for the ordinary families around them so that a screen with an agent on it can also have a file picker.

That second half is the part people miss when they hear the pitch. Files, folders, people, chat, calendars, panels, lists, text controls, arrows, git, mail, charts and devices are all drawn in the same hand as the agent icons, for the same reason a typeface ships punctuation.

What you need to drawLucideIconMind
An agent acting on its ownbotagent, agent-run, agent-thinking, agent-idle, agent-blocked, agent-handoff
A modelbrain, cpumodel, model-message, tiny-model, model-alert, audio-model, lora-merge
Context and tokensnothingcontext-window, context-budget, context-overflow, token, token-count
Tool usewrenchtool, tool-calling, tool-result, tool-error, tool-permission, tool-registry
MCPnothing59 icons: servers, clients, resources, prompts, transports, sampling
Retrievalsearchretriever, reranker, chunk, chunk-overlap, embedding, vector-database, grounding
Ordinary interfacethe whole setabout 1,600 icons on the same grid

Bundle size, measured rather than claimed

Both sets tree-shake and both are honest about it. The numbers below are what the npm registry reported on 31 August 2026, and they describe what an install writes to disk rather than what a browser downloads.

What a browser downloads is much smaller, and much closer between the two. One IconMind icon is 619 bytes gzipped including the shared factory, and three are 820, so the second and third icons cost about 100 bytes each. Those are size-limit tests in CI rather than marketing numbers: the build fails when they stop being true. Lucide is in the same territory per icon.

The gap in install size comes from IconMind shipping six drawings per icon instead of one. You pay it once, on install, and never again at runtime.

The practical rule is identical for both: import named icons rather than the barrel and let the bundler drop the rest. Where a bundler cannot tree-shake a barrel, IconMind also publishes a path per icon, which sidesteps the question entirely. That matters most in React Native and in a few older CommonJS setups.

PackageUnpacked on diskFiles
lucide-react 1.37.030.2 MB4,136
@iconmind/react 0.6.05.6 MB6,867
@tabler/icons-react 3.46.063.0 MB12,386
@heroicons/react 2.2.03.5 MB5,183

Variants and weights

Lucide ships one style and exposes strokeWidth as a prop. Set it to 1.5 and the icon thins out, set it to 3 and the counters close up. For a set of that size it is the right trade, and for most interfaces it is enough.

IconMind ships six drawings per icon: outline and duotone, each at thin, regular and bold. A weight is a separate drawing rather than a multiplier, because the rules that keep an icon legible change as the stroke grows. A gap that reads at 1.5 px merges at 2.5 px, so the bold cell moves its strokes apart instead of fattening them in place.

Duotone is derived, never drawn by hand. Every closed body takes a twenty percent tint behind the strokes, and an icon made only of open marks gets a halo of the same paths three units wider. That rule is why the whole set answers a variant switch rather than the subset somebody remembered to redraw.

<Agent />                                  // outline, regular
<Agent variant="duotone" weight="bold" />  // a different drawing, not a thicker one
<Agent size={32} className="text-violet-500" />

Frameworks, and what ships with each

Lucide covers React, Vue, Svelte, Solid, Preact, Angular, React Native and Flutter, plus a plain SVG package and a font. Angular is the one IconMind has no answer for yet.

IconMind covers React, Vue, Svelte, Solid, Preact, React Native, Astro, Laravel Blade and Flutter, plus plain SVG, a sprite sheet, an Iconify collection and an MCP server. Every package is generated from the same declarations in a single release, so a component name means the same drawing everywhere.

The MCP server has no equivalent in any other set. Point a coding assistant at it and the assistant searches the real icon list before writing an import, which is how a diff stops containing components that do not exist. For assistants without tool access the site serves llms.txt with every valid name and the naming rules.

Licences, in plain terms

Lucide is ISC. IconMind is MIT. Both let you ship commercial software, modify the drawings and redistribute them, and both ask that the copyright notice travels with copies of the source.

For an application developer the difference is close to nothing. It matters a little if you redistribute the icon files inside another library, where the licence text has to come along. Neither set requires attribution in your interface, and neither has a seat count, a tier or a per-project fee.

IconMind adds one commitment on top: there will be no paid tier over the drawings. Sponsorship and commissioned icons are how the project is funded.

Using both, and moving between them

The two sets share a grid, a stroke width and round caps. That is not a coincidence: IconMind matched Lucide deliberately so a product could adopt it a screen at a time. At 16, 20 and 24 px a Lucide arrow and an IconMind arrow read as one set.

About a hundred Lucide names resolve inside IconMind as aliases, so searching for the name you already know finds the drawing. file-plus finds document-add, message-square-check finds chat-check, panel-left finds sidebar, cloud-download finds download-cloud, clock-check finds on-time. The site search, the MCP server and llms.txt all understand both spellings.

A gradual migration usually looks like this. Keep Lucide where it already works. Add IconMind on the screens that talk about models, agents or retrieval. Replace an overlapping icon only when you are in that file for another reason. There is no build step to change and no stylesheet to reconcile.

import { Search, Settings } from "lucide-react";             // keep what works
import { AgentRun, VectorDatabase } from "@iconmind/react";  // add the vocabulary

<Search className="size-5" />
<AgentRun className="size-5" />                              // same grid, same stroke

What IconMind refuses that Lucide ships

An icon font. Lucide has one. IconMind will not, because a font flattens duotone and the three weights into a single filled glyph. The sprite sheet covers the case where you want no build step.

Angular components. Lucide has them and IconMind does not. Until that changes, the sprite or the Iconify collection is the workable route in an Angular application.

Everyday objects. Lucide draws a tooth, a chair and a coffee cup. IconMind decided against that whole category rather than half-covering it, along with brand logos, weather and cryptocurrency coins. Each refusal is listed with its reason on the refusals page, including the ones the compiler rejected outright.

Labels, focus and screen readers

Both sets treat an icon as decoration until you say otherwise, which is the right default: a button that already says Delete does not need its icon announced a second time.

Lucide adds aria-hidden when the icon has no children and no accessibility prop of its own, and it puts a lucide class on every SVG so you can target them in CSS. IconMind adds aria-hidden and focusable false, and switches to role img the moment you pass aria-label or aria-labelledby, so a labelled icon is announced and an unlabelled one is skipped.

The practical rule is the same on both: label the control, not the icon. Where an icon really is the only content, as in an icon-only button, give it an aria-label and let the role switch handle the rest.

One thing Lucide has that IconMind does not is a context provider for defaults. Wrap a tree and every icon inside it inherits a size, colour, stroke width and class. Here you set those per icon or wrap your own component, which is one more file to write.

<Trash2 />                                  // decorative, aria-hidden
<Trash2 aria-label="Delete file" />          // role="img", announced

How these numbers were measured

Package sizes come from the npm registry on 31 August 2026, taken from the published tarballs rather than from a size badge: lucide-react 1.37.0 unpacks to 30.2 MB across 4,136 files, @iconmind/react 0.6.0 to 5.6 MB across 6,867. Both figures are what lands in node_modules, not what reaches a browser.

The browser numbers come from the size-limit suite that runs in CI, measured on 31 August 2026 against a production esbuild bundle with React treated as external: one icon 619 bytes gzipped, three icons 820, and the shared factory on its own 465. Carrying all six cells with each icon rather than splitting them across six import paths costs roughly 39 bytes gzipped, because a duotone cell compresses to almost nothing next to the outline it repeats.

The icon counts are the packages themselves: lucide-react 1.37.0 ships 2,048 icon modules, counted in the published tarball; IconMind has 2,287 icons and 13,722 cells, of which 664 icons are the AI, agent, MCP and RAG families. Anything in the tables that is not a measurement is a plain fact about the packages, and every command used to produce these numbers is in the repository.

The verdict

If you are drawing arrows and folders, both sets do the job and Lucide has the longer track record. If your product has agents, models, tokens, tool calls or a vector database on screen, Lucide has no icon for them and IconMind has hundreds, drawn to the same grid, so the two can sit side by side while you migrate.

The names are compatible on purpose: a hundred-odd Lucide names resolve here as aliases (`file-plus`, `message-square-check`, `panel-left`), so a search for the name you know finds the drawing.

Questions

Can I use IconMind and Lucide together?
Yes. Both are 24 px, 2 px stroke, round caps and joins. Mixing them on one screen is not visible at UI sizes.
Does IconMind have every Lucide icon?
No. It has the interface families a product needs — files, folders, people, chat, calendar, panels, lists, arrows, git, mail, charts — and not zodiac signs, food or vehicles. Lucide names for icons that exist here resolve as aliases.
Which is more permissive?
IconMind is MIT: no attribution, commercial use, no seat count. Lucide is ISC, which is functionally similar; check the notice requirements for your use.
Is IconMind a Lucide fork?
No. The grid and the stroke match on purpose so the two can share a screen, but every drawing is compiled from its own declaration in this repository. Read any icon's source and run the compiler yourself.
Does IconMind work with Tailwind?
Yes. The components take className, so size-5 and text-zinc-500 behave exactly as they do with Lucide. There is also an Iconify collection if you prefer the Tailwind icon plugin.
What about Angular?
Lucide has Angular components and IconMind does not yet. Use the sprite sheet or the Iconify collection in an Angular app.

Other comparisons

2,437 icons, one set

Outline and duotone at three weights, compiled from one grid, with the code for nine frameworks and an MCP server that picks them. MIT — commercial use, no attribution.