README.md

September 8, 2026 · View on GitHub

156 IconMind icons taken evenly across the set: agents, models, vector databases, MCP servers, charts, files and arrows

IconMind

Open-source icons for AI-era software.
LLMs, agents, MCP, RAG, and everything around them.

Website · Browse all icons · Collections · Docs · MCP server

MIT license icons cells npm pub.dev


import { Agent, ContextWindow, VectorDatabase } from "@iconmind/react";

<Agent />
<ContextWindow variant="duotone" weight="bold" />
<VectorDatabase size={32} className="text-violet-500" />

5,287 icons · 31,722 drawings · 10 packages · one generated source of truth.

Every icon is a declaration compiled into six cells by a validator that refuses geometry it cannot draw correctly, and a nightly job rasterises all 31,722 of them and fails if any two icons render the same. That is how a set this size still reads as one hand, and why an assistant can be handed an MCP server that returns real names instead of <AgentBrain />.

Icons get redrawn when that scan or the contact sheet catches them — a whole round of rooms and appliances went back on the board because shapes were fusing at 16 px — and Bluetooth was dropped because its rune needs three stroke crossings where the set allows two. Everything else that was turned away is written down too.

Why this exists

Build a UI for an agent, a RAG pipeline, or an MCP server and you run out of icons almost immediately. There is no context-window, no reranker, no tool-calling, no mcp-resource in any mainstream set, so interfaces reach for a generic robot, a generic database, a generic lightning bolt, and the meaning is lost.

Lucide, Heroicons and Phosphor are excellent, and a thousand domain-specific AI icons would be scope creep for any of them. IconMind sits next to them, not instead of them. The 24px grid and 2px regular stroke match Lucide on purpose, so the two can share an interface without clashing.

IconMindGeneralist sets
VocabularyAI, agents, MCP, RAG, data, devopsGeneral UI
Grid24px, 2px strokeUsually the same
Variants6 drawings per conceptUsually 1–2
ConsistencyMachine-enforced geometryReviewed by eye
For AI assistantsBuilt-in MCP server

The set

5,287 icons · 20 domains · 6 cells each. Two variants, outline and duotone, each drawn at three weights (1.5 / 2 / 2.5). A weight is a real drawing constraint, not a stroke-width slider: gap and legibility rules tighten as the stroke grows, and the validator checks every cell separately.

Duotone is derived, never drawn: every closed body tints at 20% behind the strokes, and icons made only of open marks (a check, an arrow) get a halo, the same paths echoed wider behind them, so the whole set answers the variant switch, not just the lucky icons.

Six icons drawn in all six cells: outline and duotone, each at thin, regular and bold

AI & LLM: models, prompts, tokens, embeddings, evaluation, safetyAgents: planning, memory, tool use, computer use, multi-agentMCP: servers, clients, resources, tools, transports
RAG & Search: chunking, retrieval, ranking, vectors, groundingData Engineering: pipelines, warehouses, streaming, qualityDevOps: CI/CD, containers, observability, incidents
Cloud: compute, storage, network, edge, costSecurity: auth, secrets, policy, AI securityAutomation: workflows, triggers, conditions, human-in-the-loop
Analytics: charts, metrics, experiments, LLM observabilityDeveloper Tools: code, terminal, VCS, API, testingInterface: arrows, actions, states, layout, media
Commerce: store, checkout, shipping, promotions, merchantFinance: banking, wallets, investing, accounting, insuranceTravel: vehicles, transit, lodging, navigation, trips
Weather: sky, storms, temperature, nature, climateHealth: medical, fitness, nutrition, mind, careEducation: school, reading, courses, science, arts
Home: rooms, appliances, kitchen, garden, householdSocial: people, events, sport, games, hobbies

Install

StackInstall
Reactnpm i @iconmind/react
Vue 3npm i @iconmind/vue
Sveltenpm i @iconmind/svelte
Solidnpm i @iconmind/solid
Preactnpm i @iconmind/preact
React Nativenpm i @iconmind/react-native react-native-svg
Astronpm i @iconmind/astro
Flutterflutter pub add iconmind_flutter
Laravel Bladecomposer require iconmind/blade-iconmind
Plain SVG / spritenpm i @iconmind/icons

One API, everywhere

Every framework package exposes the same component names and the same props, generated from one source so they cannot drift:

PropDefaultWhat it does
size24Width and height
colorcurrentColorStroke colour
variant"outline""outline" or "duotone"
weight"regular""thin", "regular" or "bold", each its own drawing
strokeWidthper weightFine adjustment; picking a weight redraws instead
absoluteStrokeWidthfalseKeeps stroke thickness constant as size changes

The same icon in four stacks:

// React / Preact / Solid — also Vue and Svelte with template syntax
<VectorDatabase variant="duotone" weight="bold" size={32} />
// Flutter — real strokes on a CustomPaint, not an icon font,
// so duotone and the weights survive intact
IconMind(IconMindIcons.vectorDatabase,
    variant: IconMindVariant.duotone, weight: IconMindWeight.bold, size: 32)
{{-- Laravel — server-rendered, zero JavaScript --}}
<x-im-vector-database-duotone-bold class="w-8 h-8" />
---
import { VectorDatabase } from "@iconmind/astro";
---
<VectorDatabase variant="duotone" weight="bold" size={32} />

Tree shaking, measured

Importing three icons costs ~660 bytes gzipped, not the whole library, and that is a test that fails in CI if it stops being true rather than a promise. Every icon is also its own entry point (@iconmind/react/icons/agent). In Flutter, icons are compile-time constants: the AOT compiler drops every one you never mention.

Download

Every icon page has a Download menu with SVG, PNG at 16 to 512 px, WebP, a favicon .ico, JPEG and Copy PNG, rendered in your browser from the exact variant, weight and colour on screen. The whole set ships as two archives on every GitHub Release: iconmind-svg.zip (all 31,722 cells) and iconmind-png.zip (one 512 px PNG per icon). It is also an Iconify collection (iconmind:agent) and one jsDelivr URL away with no install.

For AI assistants

There is an MCP server, so an assistant writing your UI can search the real set instead of guessing icon names that do not exist:

claude mcp add iconmind -- npx -y @iconmind/mcp

shadcn/ui. The set is also a shadcn registry item, so a shadcn project gets an <Icon name="agent-run" /> wrapper over @iconmind/react in one command, no approval from anyone:

npx shadcn@latest add https://iconmind.dev/r/iconmind.json

It runs offline, bundles the icon data, and starts in well under a second. The site also serves llms.txt and a full machine-readable inventory, so assistants without tool access can still pick real names.

No build step at all

@iconmind/icons ships every cell as a file on disk (icons/<category>/<slug>/<variant>-<weight>.svg), a sprite.svg of <symbol> elements, and the metadata database on its own subpath, so importing it is a decision rather than an accident:

<svg width="24" height="24"><use href="sprite.svg#im-agent" /></svg>
import { getIcon, iconsIn } from "@iconmind/icons/metadata"; // tools only: ~180 KB gz
import { version } from "@iconmind/icons";                    // a few hundred bytes

Design system

Icons here are written, not drawn: each one is a TypeScript declaration compiled into its six cells, and every rule a machine can hold is held by a machine. An illegal drawing cannot reach a file, because the shape constructors throw before it does:

24 × 24 canvas  ·  0.5 grid  ·  angles 0 / 45 / 90 only  ·  live area 2..22
round caps      ·  ≤ 2 stroke crossings  ·  ink centred within 2 units
longer side 18–22 across the whole set  ·  duotone tint 20%, halo = weight + 3

The vocabulary does the rest: a family shares one body and differs only in the mark inside it, so siblings are byte-identical where they agree.

BodyMeaningExample
Open ringAn agent, acting on its ownagent, agent-check
Chamfered boxA machine; the chamfer is MCP's markmodel, mcp-server
Two-pronged plugA capability an agent can pick uptool-calling, mcp-tool
Page with a foldA documentmcp-resource, policy
Squared shieldProtectionshield-check, encryption
Square loopAnything that goes roundrefresh, retry, sync
CylinderStored datadatabase, backup

So you can usually guess the next icon in a family before you see it. The full reasoning, with the measurements behind each rule, is in the design guidelines.

Measured, not just validated

Beyond the validator, three tools keep the set honest at scale. All three grew out of real audits that redrew more than sixty icons:

pnpm icons:audit                  # size, ink density and centred-ness outliers, with named exceptions
pnpm icons:twins                  # renders all 5,287 icons and pixel-compares every pair for lookalikes
pnpm icons:duplicates --perceptual # the nightly scan: 31,722 cells, fails on two that render alike

Don't take my word for it

Every claim on this page is a command you can run after cloning:

pnpm icons:validate                # every rule, all 31,722 cells
pnpm icons:twins                   # pixel-compare every pair at 24px
pnpm icons:duplicates --perceptual # the nightly scan for lookalikes
pnpm test                          # including the bundle-size tripwires

Versioning & releases

All npm packages share one version (currently in lock-step with iconmind_flutter on pub.dev), and releases are fully automatic: every merged change steps the patch version, publishes all packages, tags, cuts a GitHub Release and redeploys the site. What you see on npm is never ahead of or behind the repo.

FAQ

Why is there no CommonJS build? Providing one would provide a path that does not tree-shake well, and some bundlers would silently choose it. ESM only.

Why only 0/45/90° angles? It is the constraint that makes 5,287 icons read as one hand. Some pictures are refused rather than drawn badly: a warning triangle at 45° is a tent, so warning is a circle. The rest of the refusals are listed here.

Can I request an icon? Yes, and it takes a minute and is the most useful contribution there is: request an icon.

Brand icons? No. Concepts age better than logos, and logos carry trademark weight this set does not want.

Is there a Figma library? No, and none is planned. It would be a second source of truth beside the compiler. The set is an Iconify collection (iconmind:agent), which Iconify's own Figma plugin reads, and every icon page copies or downloads its SVG.

How do I pick between IconMind and Lucide/Tabler/Heroicons? There are comparison pages with the counts, licences and trade-offs written out.

Contributing

Icons are TypeScript declarations in scripts/draw/icons/. The compiler and validator give you feedback in seconds, and a contact sheet renders any subset at 88/24/16px:

pnpm install
pnpm icons:build       # draw every icon from source
pnpm icons:validate    # every rule, all 31,722 cells
pnpm icons:audit       # the consistency measures

See the contributing guide for naming rules, originality policy and the pull-request checklist.

Ten icons are described down to their body and mark slot if you want one to start from. The drawing is the fun part; the rules are the tools' job.

Support the project

If this set saves you from mapping reranker to a generic sort icon, a ⭐ helps other people building AI interfaces find it.

License

MIT, code and icons alike. Free for commercial use, no attribution required, no conditions. Forever.