# Devicons — full documentation
> Concatenation of 17 Markdown documents from https://devicons.io. Each section starts with its source URL. Index: https://devicons.io/llms.txt
---
source: https://devicons.io/docs.md
---
[Home](/index.md) › Docs
# Documentation
Open-source developer icons and logos. Crisp, consistent, MIT licensed.
Devicons started as a web font. Now it ships as native packages for React, Vue, and Svelte too.
## Why Devicons
- Icons for brands, languages, frameworks, cloud services, and tooling
- Full-color and monochrome variants for every icon
- Raw SVG, icon font, sprites, and framework components
- Tree-shakeable imports, no runtime fetches
- MIT licensed
## Design
Every icon follows the same grid, optical weight, and corner radius. Any two icons look like they belong together.
## Get started
[Installation](/docs/installation/) covers setup. Or go straight to a framework guide: [React](/docs/react/), [Vue](/docs/vue/), [Svelte](/docs/svelte/).
## Contents
### Getting Started
- [Installation](/docs/installation.md) — Pick the package that matches your stack and install it.
- [Quick start](/docs/quick-start.md) — Render your first icon in under a minute.
### Packages
- [React](/docs/react.md) _(hot)_ — Tree-shakeable, typed React components for every Devicons icon.
- [Vue](/docs/vue.md) — Vue 3 components for every Devicons icon. Composition API, SSR, Nuxt ready.
- [Svelte](/docs/svelte.md) — Native Svelte components for every Devicons icon. SvelteKit compatible.
- [Core](/docs/core.md) — The icon catalog, SVG sprite, and font files as one dependency-free package.
- [Icon font](/docs/icon-font.md) — Devicons as a web font. No build step, works everywhere.
- [CDN](/docs/cdn.md) — Use Devicons without npm: hotlink SVGs from devicons.io, or load the icon font, sprite, and catalog from jsDelivr.
### AI & Agents
- [AI agents](/docs/agents.md) _(new)_ — Connect Claude, Cursor, VS Code, and other AI agents to Devicons over MCP, a free JSON API, a CLI, or a skill. No API key needed.
- [MCP server](/docs/mcp.md) _(new)_ — Hosted MCP server for developer icons and SVG logos. Search, fetch SVGs, and get React, Vue, or Svelte code from any MCP client.
- [Icons API](/docs/api.md) _(new)_ — Free JSON API for 1,300+ developer icons and SVG logos: search, icon details, categories, and an OpenAPI spec. No API key required.
- [CLI](/docs/cli.md) _(new)_ — Search, inspect, and download SVG logos from your terminal with npx devicons. Scriptable JSON output and a local MCP server.
- [skill.md](/docs/skill.md) _(new)_ — Drop Devicons into Claude, Cursor, and any agent-aware tool as a self-contained skill.
### Customization
- [Theming](/docs/theming.md) — Tint monochrome icons, override brand colors, and handle light and dark variants.
### Community
- [Contributing](/docs/contributing.md) — Add a missing icon, improve an existing glyph, or help refine the grid.
[← Home](/index.md)
---
source: https://devicons.io/docs/installation.md
---
[Home](/index.md) › [Docs](/docs.md) › Getting Started › Installation
# Installation
Pick the package that matches your stack and install it.
Install the package that matches your project.
## Package managers
```bash
# React
npm install @dev.icons/react
# Vue
npm install @dev.icons/vue
# Svelte
npm install @dev.icons/svelte
# Icon catalog, sprite, and font files
npm install @dev.icons/core
# Icon font (CSS + webfont files)
npm install devicons
```
`pnpm`, `yarn`, and `bun` work the same way.
There is no Astro-specific package. In Astro, use the React, Vue, or Svelte package. Components render to static SVG without a `client:*` directive.
## No build step
Link any SVG straight from devicons.io:
```html
```
Or load the icon font from a CDN. The [CDN guide](/docs/cdn/) has pinned URLs for the font, sprite, and catalog.
## Requirements
- Node.js 18.17+ (20.x LTS recommended)
- React 16.8+ / Vue 3.3+ / Svelte 5+
- Any ESM bundler: Vite, Webpack, Rollup, esbuild, Turbopack
## Verify
```tsx
import { Css } from "@dev.icons/react";
export default function Logo() {
return ;
}
```
Component names come from the icon's file name. The name is split on `-` and PascalCased: `css` becomes `Css` and `discord-icon` becomes `DiscordIcon`. The reserved names React, Vue, Svelte, and Astro get a `_` prefix, so the React logo is `_React`.
If the icon renders, you're set. See the [React guide](/docs/react/) for props, tree-shaking, and SSR.
---
→ Next: [Quick start](/docs/quick-start.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/quick-start.md
---
[Home](/index.md) › [Docs](/docs.md) › Getting Started › Quick start
# Quick start
Render your first icon in under a minute.
Assumes you have a React, Vue, or Svelte project running. If not, start with [Installation](/docs/installation/).
## 1. Install
```bash
npm install @dev.icons/react
```
## 2. Import and render
```tsx
import { _React, _Vue, Nextjs } from "@dev.icons/react";
export default function Stack() {
return (
<_React size={48} />
<_Vue size={48} />
);
}
```
Every icon file is a named export. The name is the file name split on `-` and PascalCased, so `nextjs` becomes `Nextjs` and `nextjs-icon` becomes `NextjsIcon`. The names React, Vue, Svelte, and Astro would clash with framework imports, so they get a `_` prefix: `_React`, `_Vue`. Each icon page lists its exact component names.
## 3. Switch to monochrome
Full-color icons are the default. Import from the `/mono` subpath to get single-color variants that inherit `currentColor`.
```tsx
import { _React } from "@dev.icons/react/mono";
<_React size={48} />
```
## 4. Make it interactive
Icons accept all SVG attributes: `onClick`, `aria-label`, `role`, etc.
```tsx
import { GithubIcon } from "@dev.icons/react/mono";
```
## That's it
Browse the [icon library](/search/) for the full catalog, or read the [React guide](/docs/react/) for props, tree-shaking, and SSR.
---
← Previous: [Installation](/docs/installation.md)
→ Next: [React](/docs/react.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/react.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › React
# React
_hot_
Tree-shakeable, typed React components for every Devicons icon.
`@dev.icons/react` ships every icon as a named export. Components are typed, tree-shakeable, and have no runtime dependencies.
> **Why the underscore prefix?** _(note)_
>
> Export names come from the icon's file name, split on `-` and PascalCased (`css` becomes `Css`, `discord-icon` becomes `DiscordIcon`). Four names would collide with framework imports: React, Vue, Svelte, and Astro. Those get an underscore prefix: `import { _React } from "@dev.icons/react";`
## Install
```bash
npm install @dev.icons/react
```
## Usage
```tsx
import { _React } from "@dev.icons/react";
export function Logo() {
return <_React size={32} />;
}
```
## Monochrome variants
Import from the `/mono` subpath:
```tsx
import { _React } from "@dev.icons/react/mono";
export function MonoLogo() {
return <_React size={32} />;
}
```
Monochrome icons use `currentColor`, so they inherit the parent's text color.
## Props
Every icon accepts standard SVG props plus these:
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `size` | `string \| number` | `"1em"` | Sets both `width` and `height` |
| `color` | `string` | `"currentColor"` | Sets the root `fill`. Visible on monochrome icons. |
| `alt` | `string` | none | Accessible name, rendered as an SVG `` |
| `mirrored` | `boolean` | `false` | Flips the icon horizontally (`scale(-1, 1)`) |
Anything else (`className`, `style`, `onClick`, `aria-*`, `data-*`) is forwarded to the root ``. To set defaults for a subtree, wrap it in `IconContext.Provider`:
```tsx
import { IconContext, _React } from "@dev.icons/react";
<_React />
```
## Tree-shaking
Use named imports. Wildcard imports pull in the entire catalog and defeat tree-shaking in most bundlers.
```tsx
// Good: only _React lands in your bundle
import { _React } from "@dev.icons/react";
// Bad: pulls everything
import * as Devicons from "@dev.icons/react";
```
## SSR and React Server Components
Icons are pure components with no `useState` or `useEffect`. They work in React Server Components, Next.js `app/` routes, Remix, and any SSR setup without extra config. In Astro, they render to static SVG without a `client:*` directive.
```tsx
// app/page.tsx
import { _React } from "@dev.icons/react";
export default function Page() {
return <_React size={64} />;
}
```
## Accessibility
When an icon carries meaning, pass `alt`. It renders as the SVG's ``:
```tsx
<_React alt="React" size={24} />
```
For purely decorative icons, hide them from assistive tech:
```tsx
<_React aria-hidden="true" size={24} />
```
For icon-only buttons, put the label on the button instead:
```tsx
import { _React } from "@dev.icons/react/mono";
<_React size={20} aria-hidden="true" />
```
---
← Previous: [Quick start](/docs/quick-start.md)
→ Next: [Vue](/docs/vue.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/vue.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › Vue
# Vue
Vue 3 components for every Devicons icon. Composition API, SSR, Nuxt ready.
`@dev.icons/vue` exports every icon as a Vue 3 component. Works with `
```
## Monochrome variants
Import from the `/mono` subpath:
```vue
```
Monochrome icons use `currentColor`, so they inherit the parent's text color.
## Props
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `size` | `string \| number` | `"1em"` | Sets both `width` and `height` |
| `color` | `string` | `"currentColor"` | Sets the root `fill`. Visible on monochrome icons. |
| `alt` | `string` | none | Accessible name, rendered as an SVG `` |
| `mirrored` | `boolean` | `false` | Flips the icon horizontally (`scale(-1, 1)`) |
Other attributes (`class`, `style`, `aria-*`, listeners) fall through to the root ``.
## Nuxt
There is no Nuxt module. Import icons in your components as usual. They render on the server without extra config.
## Tree-shaking
Named imports are ESM-first and fully tree-shakeable.
```ts
import { Nextjs } from "@dev.icons/vue";
```
---
← Previous: [React](/docs/react.md)
→ Next: [Svelte](/docs/svelte.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/svelte.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › Svelte
# Svelte
Native Svelte components for every Devicons icon. SvelteKit compatible.
`@dev.icons/svelte` ships native Svelte 5 components. SvelteKit, Vite, and Astro integrations all work without extra config.
> **Why the underscore prefix?** _(note)_
>
> Export names come from the icon's file name, split on `-` and PascalCased (`css` becomes `Css`, `svelte-icon` becomes `SvelteIcon`). Four names would collide with framework imports: React, Vue, Svelte, and Astro. Those get an underscore prefix (`_Svelte`). Alias them on import so they work as component tags: `import { _Svelte as SvelteLogo } from "@dev.icons/svelte";`
## Install
```bash
npm install @dev.icons/svelte
```
## Usage
```svelte
```
## Monochrome variants
Import from the `/mono` subpath:
```svelte
```
Monochrome icons use `currentColor`, so they inherit the parent's text color.
## Props
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `size` | `string \| number` | `"1em"` | Sets both `width` and `height` |
| `color` | `string` | `"currentColor"` | Sets the root `fill`. Visible on monochrome icons. |
| `alt` | `string` | none | Accessible name, rendered as an SVG `` |
| `mirrored` | `boolean` | `false` | Flips the icon horizontally (`scale(-1, 1)`) |
Other attributes (`class`, `style`, `aria-*`) are spread onto the root ``.
## SvelteKit
No special config needed. Import inside any `+page.svelte`, `+layout.svelte`, or component file.
```svelte
```
---
← Previous: [Vue](/docs/vue.md)
→ Next: [Core](/docs/core.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/core.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › Core
# Core
The icon catalog, SVG sprite, and font files as one dependency-free package.
`@dev.icons/core` holds the catalog of icon files with their font codepoints, `icons.json`, a color SVG sprite, and the icon font files. It has no dependencies.
The framework packages don't need it. Install it when you need the list of icon files, the sprite, or the font files for custom tooling or a plugin.
> **No SVG strings** _(info)_
>
> Core doesn't export SVG markup or ship per-icon SVG files. For individual SVGs, use `https://devicons.io/devicons/icons/{file}.svg` (color) or `https://devicons.io/devicons/font/{file}.svg` (monochrome). See the [CDN guide](/docs/cdn/).
## Install
```bash
npm install @dev.icons/core
```
## Exports
| Export | Type | Description |
| --- | --- | --- |
| `ICONS` | `readonly IconRecord[]` | Every icon file, sorted by codepoint |
| `getIcon` | `(name: string) => IconRecord \| undefined` | O(1) lookup by file name |
| `IconRecord` | type | `{ name, codepoint, unicode, isVariant }` |
```ts
interface IconRecord {
/** File name without `.svg`, e.g. "adonisjs" or "adonisjs-icon". */
name: string;
/** Private Use Area codepoint used by the icon font. */
codepoint: number;
/** String.fromCodePoint(codepoint). */
unicode: string;
/** True when name ends in "-icon" (glyph-only mark). */
isVariant: boolean;
}
```
## Usage
```ts
import { ICONS, getIcon } from "@dev.icons/core";
getIcon("nextjs-icon");
// { name: "nextjs-icon", codepoint: ..., unicode: "...", isVariant: true }
const fullLogos = ICONS.filter((icon) => !icon.isVariant).map((icon) => icon.name);
```
## Files
| Subpath export | File |
| --- | --- |
| `@dev.icons/core/icons.json` | `dist/icons.json` (same data as `ICONS`) |
| `@dev.icons/core/sprite` | `dist/sprite/sprite-symbol.svg` (color sprite, ``) |
| `@dev.icons/core/font/css` | `dist/font/devicons.css` |
| `@dev.icons/core/font/woff2` | `dist/font/devicons.woff2` |
| `@dev.icons/core/font/ttf` | `dist/font/devicons.ttf` |
## When to use core
- You need the full list of icon files for search, filtering, or code generation
- You want to self-host the SVG sprite
- You're building a custom icon component for a framework we don't ship yet
- You're writing a bundler plugin, Figma plugin, or CLI tool
---
← Previous: [Svelte](/docs/svelte.md)
→ Next: [Icon font](/docs/icon-font.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/icon-font.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › Icon font
# Icon font
Devicons as a web font. No build step, works everywhere.
`devicons` is the no-framework option: one CSS file with a glyph for every icon file. It works in legacy stacks and plain HTML.
> **Version numbering & naming** _(info)_
>
> The font package has a higher version number (`>2.x`) than the framework packages since it has been around for almost 12 years. That's why it's also not prefixed with `@dev.icons/` like the others.
## Install
```bash
npm install devicons
```
For a no-build workflow, see the [CDN guide](/docs/cdn/).
## Usage
Import the stylesheet once. With a bundler:
```css
@import "devicons/css";
```
Then add glyphs with the `devicons` base class plus `devicons-{file}`:
```html
```
`{file}` is one of the icon's file names, which each icon page lists (for example `react`, `nextjs`, `nextjs-icon`). Glyphs are monochrome.
## Sizing and color
The font inherits `font-size` and `color`.
```html
```
## Other exports
| Import | File |
| --- | --- |
| `devicons/css` | `dist/devicons.css` |
| `devicons/woff2` | `dist/devicons.woff2` |
| `devicons/ttf` | `dist/devicons.ttf` |
| `devicons/sprite` | `dist/sprite-symbol.svg` |
| `devicons/codepoints` | `dist/codepoints.json` (file name → codepoint) |
For full-color logos, use the [React](/docs/react/), [Vue](/docs/vue/), or [Svelte](/docs/svelte/) packages, or the [SVG URLs](/docs/cdn/).
---
← Previous: [Core](/docs/core.md)
→ Next: [CDN](/docs/cdn.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/cdn.md
---
[Home](/index.md) › [Docs](/docs.md) › Packages › CDN
# CDN
Use Devicons without npm: hotlink SVGs from devicons.io, or load the icon font, sprite, and catalog from jsDelivr.
You don't need a build step to use Devicons. Individual SVGs are served from devicons.io, and the icon font, sprite, and catalog come from npm through public CDNs. This works for prototypes, CodePen demos, READMEs, and static HTML.
## SVG files
Every icon file is published as a standalone, CORS-enabled SVG:
| Variant | URL |
| --- | --- |
| Color | `https://devicons.io/devicons/icons/{file}.svg` |
| Monochrome (`currentColor`) | `https://devicons.io/devicons/font/{file}.svg` |
`{file}` is one of the icon's file names, listed on each icon page (for example `react`, `nextjs`, `nextjs-icon`). Files ending in `-icon` are the glyph-only mark.
### As ` `
```html
```
Markdown works too:
```md

```
### Fetch and inline
Inlining the monochrome SVG lets it follow CSS `color`:
```html
```
> **No per-icon SVGs on npm CDNs** _(info)_
>
> The npm packages don't ship individual SVG files, so jsDelivr and UNPKG have no per-icon SVG URL. Use the devicons.io URLs above.
## Icon font
One ` ` tag is enough. Pin the version in production.
**jsDelivr**
```html
```
**UNPKG**
```html
```
Then use it:
```html
```
See the [icon font guide](/docs/icon-font/) for sizing and color.
## SVG sprite
`@dev.icons/core` ships a color sprite at `dist/sprite/sprite-symbol.svg`: one `` with every icon file as a ``. Symbol IDs are file names (`#react`, `#nextjs-icon`).
**jsDelivr**
```html
https://cdn.jsdelivr.net/npm/@dev.icons/core@1.3.0/dist/sprite/sprite-symbol.svg
```
> **Self-host the sprite** _(info)_
>
> Browsers don't follow `` across origins. Download the sprite (or copy it from `node_modules/@dev.icons/core/dist/sprite/sprite-symbol.svg`) into your static assets and reference it from your own domain. The file is large (about 3.5 MB), so this approach suits pages that need many icons.
```html
```
## Icon catalog
The list of icon files, with font codepoints, as JSON:
**jsDelivr**
```html
https://cdn.jsdelivr.net/npm/@dev.icons/core@1.3.0/dist/icons.json
```
For names, tags, and aliases, use [`https://devicons.io/search-index.json`](/search-index.json).
## Versioning and caching
npm CDNs honor exact versions and semver ranges:
> **Cache behavior** _(tip)_
>
> - **Pinned** (`@1.2.3`): cached at the edge indefinitely. Use this in production.
> - **Range** (`@^1`): revalidated periodically, so it picks up patches and minor releases.
> - **`@latest`**: changes with every release. Only use it for demos.
The devicons.io SVG URLs aren't versioned. They always serve the current artwork.
## When CDN is not enough
- Tree-shaken, typed components: [`@dev.icons/react`](/docs/react/), [`@dev.icons/vue`](/docs/vue/), [`@dev.icons/svelte`](/docs/svelte/)
- Programmatic access to the icon list: install [`@dev.icons/core`](/docs/core/) locally
---
← Previous: [Icon font](/docs/icon-font.md)
→ Next: [AI agents](/docs/agents.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/agents.md
---
[Home](/index.md) › [Docs](/docs.md) › AI & Agents › AI agents
# AI agents
_new_
Connect Claude, Cursor, VS Code, and other AI agents to Devicons over MCP, a free JSON API, a CLI, or a skill. No API key needed.
Devicons is built for AI coding agents as well as people. An agent can search a multitude of developer logos, fetch the SVG, and write the React, Vue, or Svelte import for you, without guessing file names or URLs. Every surface is free, read-only, and needs no API key.
## Pick a surface
| You're using | Use | Setup |
| --- | --- | --- |
| Claude Code, Cursor, VS Code, Windsurf, Codex, Claude Desktop | **[MCP server](/docs/mcp/)** | One command or one JSON entry |
| Your own code, a plugin, or a no-code tool | **[Icons API](/docs/api/)** | Plain HTTPS + JSON |
| A terminal, a script, or CI | **[CLI](/docs/cli/)** | `npx devicons` |
| An agent that reads skills or instructions from a URL | **[skill.md](/docs/skill/)** | One prompt |
The MCP server is the best fit for chat and coding agents: the agent calls `search_icons`, then `get_icon` for the SVG and ready-to-paste code. The API and CLI expose the same data for everything else.
## Quick start
Claude Code:
```bash
claude mcp add --transport http devicons https://devicons.io/api/mcp
```
Then ask: *"Add the PostgreSQL and Redis logos to the architecture diagram"* or *"Use the Devicons React component for the Vercel logo in the footer."*
Any other tool:
```bash
curl "https://devicons.io/api/v1/search?q=postgres&limit=3"
npx devicons add react vue --out ./src/icons
```
## Discovery files
Agents and crawlers can find every surface from the domain alone:
| File | What it describes |
| --- | --- |
| [`/agents.md`](/agents.md) | Every agent surface on one page |
| [`/llms.txt`](/llms.txt) | Site overview for LLMs, with an "Agent integrations" section |
| [`/.well-known/mcp.json`](/.well-known/mcp.json) | The hosted MCP server: URL, transport, tools |
| [`/.well-known/api-catalog`](/.well-known/api-catalog) | API catalog (RFC 9727) linking the OpenAPI spec and docs |
| [`/api/v1/openapi.json`](/api/v1/openapi.json) | OpenAPI 3.1 description of the JSON API |
| [`/.well-known/agent-skills/index.json`](/.well-known/agent-skills/index.json) | Agent Skills discovery index |
Every docs and icon page also has a Markdown twin (for example [`/icons/react.md`](/icons/react.md)), and HTML pages answer `Accept: text/markdown` with Markdown.
> **Licensing** _(tip)_
>
> The SVG files and packages are MIT licensed. The logos themselves are trademarks of their owners, so follow each brand's guidelines when an agent places them in your product.
---
← Previous: [CDN](/docs/cdn.md)
→ Next: [MCP server](/docs/mcp.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/mcp.md
---
[Home](/index.md) › [Docs](/docs.md) › AI & Agents › MCP server
# MCP server
_new_
Hosted MCP server for developer icons and SVG logos. Search, fetch SVGs, and get React, Vue, or Svelte code from any MCP client.
The Devicons MCP server gives AI agents direct access to 1,300+ developer, brand, framework, and tooling logos. Agents search by name or tag, fetch the SVG markup, and get the exact import for your framework, so they stop guessing slugs and inventing file paths.
| | |
| --- | --- |
| **URL** | `https://devicons.io/api/mcp` |
| **Transport** | Streamable HTTP (stateless) |
| **Authentication** | None |
| **Access** | Read-only |
| **Discovery** | [`/.well-known/mcp.json`](/.well-known/mcp.json) |
## Connect your client
### Any agent, one command
[add-mcp](https://github.com/neon-solutions/add-mcp) detects the coding agents on your machine (Claude Code, Cursor, VS Code, Codex, and more) and adds the server to each one you pick:
```bash
npx add-mcp https://devicons.io/api/mcp -g
```
`-g` installs it for every project. Leave it off to write the config into the current project instead. To set up one client by hand, use its section below.
### Claude Code
```bash
claude mcp add --transport http devicons https://devicons.io/api/mcp
```
Add `--scope user` to make it available in every project.
### Cursor
Add to `.cursor/mcp.json` in your project, or to the global Cursor MCP settings:
```json
{
"mcpServers": {
"devicons": {
"url": "https://devicons.io/api/mcp"
}
}
}
```
### VS Code
Add to `.vscode/mcp.json`:
```json
{
"servers": {
"devicons": {
"type": "http",
"url": "https://devicons.io/api/mcp"
}
}
}
```
### Windsurf
Open Windsurf's MCP settings, view the raw config, and add the same `mcpServers` entry as Cursor.
### Claude Desktop
Open **Settings → Connectors → Add custom connector** and paste `https://devicons.io/api/mcp`. Claude Desktop's JSON config file only runs local servers; to use it, add the [local server](#run-it-locally) entry there instead.
### Codex CLI
```bash
codex mcp add devicons --url https://devicons.io/api/mcp
```
### Any other client
Name `devicons`, URL `https://devicons.io/api/mcp`, transport Streamable HTTP, no authentication.
## Run it locally
The same tools are available over stdio from the [`devicons`](/docs/cli/) package (Node 20+). The local server reads from the public API:
```json
{
"mcpServers": {
"devicons": {
"command": "npx",
"args": ["-y", "devicons", "mcp"]
}
}
}
```
Set `DEVICONS_API` to point it at another deployment.
## Tools
| Tool | Inputs | Returns |
| --- | --- | --- |
| `search_icons` | `query`, optional `category`, `limit` (1–50, default 10) | Ranked icons with slug, name, tags, page URL, and SVG URL, plus the total match count |
| `get_icon` | `slug`, optional `framework` (`react`, `vue`, `svelte`, `html`; default `react`), `include_svg` (default `true`) | Metadata, every variant's color and monochrome SVG URL, the primary SVG markup, and an install command plus code |
| `list_categories` | none | Categories with slug and icon count |
| `get_category` | `slug`, optional `limit` (1–200, default 50) | The category's icons, most recognizable first |
Every tool is read-only and returns structured content plus the same information as text, so clients that only show text still get the SVG markup and URLs. Slugs are case-insensitive. Unknown slugs come back as tool errors that tell the model which tool to call instead.
## Example prompts
- "Find the logos for our stack (Next.js, Postgres, Redis, Vercel) and add them to `components/stack.tsx` with `@dev.icons/react`."
- "Put the monochrome GitHub, Discord, and X logos in the footer as inline SVG."
- "List every LLM provider logo Devicons has."
## Troubleshooting
- **Opening the URL in a browser shows "method not allowed".** That's expected: MCP clients POST JSON-RPC to the endpoint. Use one of the setups above.
- **Your client only supports stdio.** Use the [local server](#run-it-locally).
- **Behind a firewall.** Both the hosted and the local server need outbound HTTPS access to `devicons.io`.
> **No MCP support?** _(tip)_
>
> The same data is available from the [Icons API](/docs/api/) and the [CLI](/docs/cli/), and agents that read instructions from a URL can use [skill.md](/docs/skill/).
---
← Previous: [AI agents](/docs/agents.md)
→ Next: [Icons API](/docs/api.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/api.md
---
[Home](/index.md) › [Docs](/docs.md) › AI & Agents › Icons API
# Icons API
_new_
Free JSON API for 1,300+ developer icons and SVG logos: search, icon details, categories, and an OpenAPI spec. No API key required.
The Devicons API is a free, read-only JSON API for developer, brand, framework, and tooling logos. Search icons, read metadata and SVG URLs, and browse categories from any language or tool. It needs no key and allows cross-origin requests from the browser.
**Base URL:** `https://devicons.io/api/v1`
**OpenAPI 3.1 spec:** [`/api/v1/openapi.json`](/api/v1/openapi.json)
## Endpoints
| Method | Path | Returns |
| --- | --- | --- |
| GET | `/search?q={query}` | Ranked icons matching a name, alias, tag, or description |
| GET | `/icons.json` | Every active icon |
| GET | `/icons/{slug}.json` | One icon with variants and component names |
| GET | `/categories.json` | Categories with icon counts |
| GET | `/categories/{slug}.json` | One category and its icons |
Icon SVGs are plain files: `https://devicons.io/devicons/icons/{file}.svg` (color) and `https://devicons.io/devicons/font/{file}.svg` (monochrome, `currentColor`). The API returns these URLs for you.
## Search icons
```bash
curl "https://devicons.io/api/v1/search?q=postgres&limit=2"
```
```json
{
"query": "postgres",
"count": 2,
"total": 10,
"results": [
{
"slug": "postgresql",
"name": "PostgreSQL",
"tags": ["database", "sql", "rdbms", "open-source"],
"popular": true,
"url": "https://devicons.io/icons/postgresql/",
"svg": "https://devicons.io/devicons/icons/postgresql.svg"
},
{
"slug": "supabase",
"name": "Supabase",
"tags": ["database", "backend", "postgresql", "open-source", "baas"],
"popular": true,
"url": "https://devicons.io/icons/supabase/",
"svg": "https://devicons.io/devicons/icons/supabase-icon.svg"
}
]
}
```
| Parameter | Required | Description |
| --- | --- | --- |
| `q` | yes | 1–100 characters. Matches names, aliases, tags, and descriptions, with typo tolerance. |
| `limit` | no | 1–100, default 20. `count` is how many results came back; `total` is how many icons matched before the limit. |
| `category` | no | Only return icons in this category slug, for example `database`. |
Ranking matches the search on devicons.io: exact name, then exact alias, then name prefix, then the closest fuzzy matches.
## Get one icon
```bash
curl https://devicons.io/api/v1/icons/react.json
```
```json
{
"slug": "react",
"name": "React",
"tags": ["javascript", "frontend", "ui-library", "meta"],
"popular": true,
"url": "https://devicons.io/icons/react/",
"svg": "https://devicons.io/devicons/icons/react.svg",
"description": "React is a declarative JavaScript library by Meta…",
"aliases": ["React.js", "ReactJS"],
"website": "https://react.dev/",
"license": null,
"brandGuidelines": null,
"mainColor": null,
"badInDark": false,
"badInLight": false,
"deprecated": false,
"recommended": true,
"variants": [
{
"file": "react",
"label": "Logo with wordmark",
"svg": "https://devicons.io/devicons/icons/react.svg",
"mono": "https://devicons.io/devicons/font/react.svg"
}
],
"components": {
"react": { "package": "@dev.icons/react", "mono": "@dev.icons/react/mono", "name": "_React" },
"vue": { "package": "@dev.icons/vue", "mono": "@dev.icons/vue/mono", "name": "_React" },
"svelte": { "package": "@dev.icons/svelte", "mono": "@dev.icons/svelte/mono", "name": "_React" }
}
}
```
`badInDark` / `badInLight` flag marks that need a backdrop on dark or light backgrounds. Deprecated icons keep their detail file so old links work, but they're left out of lists and search.
## List and browse categories
```bash
curl https://devicons.io/api/v1/categories.json
curl https://devicons.io/api/v1/categories/database.json
```
Categories are returned largest first. A category's icons are ordered most recognizable first, the same as its [category page](/icons/tag/).
## Use it from code
```ts
const res = await fetch('https://devicons.io/api/v1/search?q=vercel&limit=1');
const { results } = await res.json();
const svg = await fetch(results[0].svg).then(r => r.text());
```
Every response is described with JSON Schema in the [OpenAPI spec](/api/v1/openapi.json). Generate TypeScript types from it with a tool such as `openapi-typescript`.
## Errors
Errors use HTTP status codes and a JSON body:
```json
{ "error": { "code": "not_found", "message": "No such resource. See https://devicons.io/docs/api/" } }
```
| Status | `code` | When |
| --- | --- | --- |
| 400 | `invalid_param` | Missing or invalid `q` or `limit` |
| 404 | `not_found` | Unknown icon or category slug |
| 500 | `internal` | Unexpected server error; retry later |
A `429 Too Many Requests` can also come from Cloudflare's rate limiting, without a JSON body. Back off and retry.
## Caching and limits
- Icon, category, and OpenAPI files are static, served from Cloudflare's edge, and cacheable for five minutes (revalidation is cheap). Search responses are cacheable for five minutes too.
- Responses send `Access-Control-Allow-Origin: *`, so you can call the API from a browser.
- Cache responses on your side, and prefer `icons.json` over thousands of per-icon requests.
- Requests may be rate limited per IP.
## Fair use
The API is free for tools, plugins, extensions, and agents that help people use these logos. Please don't use it to rebuild a competing icon catalog. The SVG files are MIT licensed; the logos are trademarks of their owners.
> **Building an AI agent?** _(tip)_
>
> The [MCP server](/docs/mcp/) wraps this API as tools, including SVG markup and framework code, so agents don't need to call it themselves.
## How it runs
The API runs on Cloudflare Pages. The JSON files are prebuilt at deploy time and served as static assets; only search and MCP run as Pages Functions, and search loads a prebuilt index. If you run your own deployment of this site, two optional Cloudflare dashboard settings help under load:
- **Rate limiting:** a WAF rate-limiting rule on `/api/*`, for example 60 requests per 10 seconds per IP. This is available on the free plan.
- **Edge caching for search:** a Cache Rule that marks `/api/v1/search*` as eligible for cache. This lets Cloudflare answer repeat searches without running the Function.
---
← Previous: [MCP server](/docs/mcp.md)
→ Next: [CLI](/docs/cli.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/cli.md
---
[Home](/index.md) › [Docs](/docs.md) › AI & Agents › CLI
# CLI
_new_
Search, inspect, and download SVG logos from your terminal with npx devicons. Scriptable JSON output and a local MCP server.
The `devicons` CLI finds developer logos and saves them as SVG files without leaving your terminal. It reads from the [Icons API](/docs/api/), prints readable tables or JSON, and also runs the Devicons [MCP server](/docs/mcp/) locally. It requires Node 20 or newer, and there's nothing to configure.
```bash
npx devicons search react
```
## Commands
| Command | What it does |
| --- | --- |
| `devicons search ` | Search icons by name, alias, or tag |
| `devicons info ` | Show an icon's description, tags, variants, and component names |
| `devicons svg ` | Print an icon's SVG to stdout |
| `devicons add ` | Save icons as SVG files |
| `devicons categories` | List icon categories |
| `devicons category ` | List the icons in a category |
| `devicons mcp` | Run the MCP server over stdio |
## Options
| Option | Applies to | Description |
| --- | --- | --- |
| `--json` | search, info, categories, category | Print the API response as JSON |
| `--category ` | search | Only return icons in a category |
| `--limit ` | search (1–100), category (1–200) | Maximum results |
| `--variant ` | svg | Pick a specific variant file, such as `nextjs-icon` |
| `--mono` | svg, add | Use the monochrome (`currentColor`) variant |
| `--out ` | add | Output directory, default `./icons` |
| `--force` | add | Overwrite files that already exist |
| `--api ` | all | API base URL (default `https://devicons.io`, or `DEVICONS_API`) |
| `-h`, `--help` / `-v`, `--version` | — | Help and version |
## Examples
Download the logos for your stack:
```bash
npx devicons add nextjs postgresql redis vercel --out ./public/logos
```
Inline a monochrome SVG that follows your text color:
```bash
npx devicons svg github --mono > src/icons/github.svg
```
Find every vector database logo, as JSON:
```bash
npx devicons search "vector database" --json
```
List the LLM provider logos:
```bash
npx devicons category llm --limit 20
```
## Use in scripts and CI
`--json` prints exactly what the [API](/docs/api/) returns, so you can pipe it into `jq`:
```bash
npx devicons search docker --json | jq -r '.results[].svg'
```
Exit codes:
| Code | Meaning |
| --- | --- |
| `0` | Success |
| `1` | Usage error: unknown command or flag, missing or invalid slug, invalid `--api` URL, or Node older than 20 |
| `2` | Icon, variant, or category not found |
| `3` | Network or API error |
| `4` | Could not write a file |
Slugs are case-insensitive. `add` only writes inside `--out`, skips files that already exist unless you pass `--force`, and prints every file it writes.
> **Install it** _(tip)_
>
> `npx` downloads the CLI on first use. For repeat use, install it with `npm install -g devicons`. The CLI ships in the same package as the [icon font](/docs/icon-font/), with no extra dependencies.
---
← Previous: [Icons API](/docs/api.md)
→ Next: [skill.md](/docs/skill.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/skill.md
---
[Home](/index.md) › [Docs](/docs.md) › AI & Agents › skill.md
# skill.md
_new_
Drop Devicons into Claude, Cursor, and any agent-aware tool as a self-contained skill.
Devicons has a ready-to-install agent skill. Point Claude, Cursor, or any tool that reads a [Claude-style skill](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview) at a single URL. The agent then gets the package list, component naming rules, SVG URLs, and catalog metadata.
If your tool supports MCP, the [MCP server](/docs/mcp/) is usually a better fit: the agent calls it for search results, SVG markup, and code instead of reading instructions. For your own integrations, use the [Icons API](/docs/api/).
## One-line prompt
In any agent conversation:
```
Read https://devicons.io/skill.md and follow the instructions to use @dev.icons.
```
The agent fetches the skill. It can then generate icon code, pick packages, build SVG URLs, and resolve slugs from free-text queries.
## Discovery endpoint
Devicons implements the [Cloudflare Agent Skills Discovery](https://github.com/cloudflare/agent-skills-discovery-rfc) spec (v0.2.0). Any compliant client can find the skill at:
```
https://devicons.io/.well-known/agent-skills/index.json
```
The index lists each skill with its type, description, artifact URL, and SHA-256 digest.
## Skill files
| File | URL |
| --- | --- |
| **Discovery index** | [`/.well-known/agent-skills/index.json`](/.well-known/agent-skills/index.json) |
| **SKILL.md** (canonical) | [`/.well-known/agent-skills/devicons/SKILL.md`](/.well-known/agent-skills/devicons/SKILL.md) |
| **SKILL.md** (short alias) | [`/skill.md`](/skill.md) |
| **reference/icons.md** | [`/skill/reference/icons.md`](/skill/reference/icons.md) |
| **reference/packages.md** | [`/skill/reference/packages.md`](/skill/reference/packages.md) |
`/skill.md` returns the same bytes as the canonical path. For a site-wide overview, see [`/llms.txt`](/llms.txt) and [`/llms-full.txt`](/llms-full.txt).
## Install with the skills CLI
The [skills](https://github.com/vercel-labs/skills) CLI finds the skill through the discovery endpoint and installs it for the agents you pick:
```bash
npx skills add https://devicons.io
```
Add `-g` to install it for every project.
## Install locally
To copy the files by hand, for an agent that loads skills from a local directory:
```bash
SKILL_DIR=~/.claude/skills/devicons
mkdir -p "$SKILL_DIR/reference"
curl -sL https://devicons.io/.well-known/agent-skills/devicons/SKILL.md > "$SKILL_DIR/SKILL.md"
curl -sL https://devicons.io/skill/reference/icons.md > "$SKILL_DIR/reference/icons.md"
curl -sL https://devicons.io/skill/reference/packages.md > "$SKILL_DIR/reference/packages.md"
```
Change `SKILL_DIR` to match your tool: `~/.claude/skills/` for Claude Code, `~/.cursor/skills/` for Cursor.
> **Dynamic content** _(tip)_
>
> The skill files are regenerated from the catalog on every deploy. Download them again to get the current icon list and component names.
## What the skill covers
Once loaded, the agent can:
- Pick the right package for a framework
- Resolve free-text queries ("the Postgres logo") to canonical slugs
- Generate component imports for React, Vue, or Svelte
- Build SVG URLs (`https://devicons.io/devicons/icons/{file}.svg`) and pinned font and sprite URLs
- Emit ` `, icon-font, sprite ``, or inline-SVG markup
- Read icon metadata: brand colors, tags, aliases, and contrast hints
## When the skill triggers
The skill activates when a task mentions:
- A developer brand or logo ("add the React logo")
- An icon format (SVG, webfont, sprite)
- Tech categories ("a frontend framework", "a cloud provider")
- The `@dev.icons/*` or `devicons` package names
To force activation, use the one-line prompt above.
## Updating
The skill tracks the same data as this website. New icons show up in the endpoints with the next deploy.
For local installs, re-run the `curl` commands for a fresh copy.
## Under the hood
Generated from the same content collection that drives the [icon library](/icons/):
1. Every icon MDX file carries metadata (`tags`, `popular`, `recommended`, `aliases`, `mainColor`, etc.)
2. A [script](https://github.com/vorillaz/devicons/blob/canary/apps/website/scripts/compute-recommended.ts) promotes flagship icons per tag to `recommended: true`
3. Astro endpoints at `/skill.md` and `/skill/reference/*` render the collection as Markdown at build time
4. Agents consume the markdown directly
---
← Previous: [CLI](/docs/cli.md)
→ Next: [Theming](/docs/theming.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/theming.md
---
[Home](/index.md) › [Docs](/docs.md) › Customization › Theming
# Theming
Tint monochrome icons, override brand colors, and handle light and dark variants.
Each icon has two variants: a full-color brand mark and a monochrome glyph that inherits `currentColor`. Import monochrome variants from the `/mono` subpath.
## Tint with currentColor
Set a text color on the parent element. Monochrome icons inherit it.
```tsx
import { _React, GithubIcon } from "@dev.icons/react/mono";
<_React size={48} />
```
## Override with the color prop
Pass a color directly for one-off use:
```tsx
import { _React } from "@dev.icons/react/mono";
<_React color="#ff4d00" size={48} />
```
## CSS custom properties
Use design tokens to control icon color:
```css
:root {
--icon-color: #ff4d00;
}
.icon {
color: var(--icon-color);
}
```
```tsx
import { _React } from "@dev.icons/react/mono";
<_React size={48} />
```
## Dark mode
Some full-color marks are mostly black or white and disappear on one theme (GitHub, Vercel, OpenAI). Icon pages flag these, and so does `search-index.json` with `badInDark` and `badInLight`. You have two options:
- Switch to the monochrome variant, which follows the text color on either theme:
```tsx
import { GithubIcon } from "@dev.icons/react/mono";
```
- Keep the color mark and give it a contrasting backdrop:
```tsx
import { GithubIcon } from "@dev.icons/react";
```
## Brand guidelines
Icons with strict brand guidelines (Slack, Figma, Google) default to guideline-approved colors. Check the brand's usage rules before overriding. Most guidelines are linked on the icon's detail page.
---
← Previous: [skill.md](/docs/skill.md)
→ Next: [Contributing](/docs/contributing.md)
[← All docs](/docs.md)
---
source: https://devicons.io/docs/contributing.md
---
[Home](/index.md) › [Docs](/docs.md) › Community › Contributing
# Contributing
Add a missing icon, improve an existing glyph, or help refine the grid.
All changes land through pull requests [on GitHub](https://github.com/vorillaz/devicons).
## Before you open a PR
1. **Search first.** Check the [icon library](/search/) and open issues for duplicates.
2. **Follow the grid.** Icons use a unified grid. Larger marks use 2px strokes.
3. **Check brand guidelines.** Link the guideline you followed for company/product logos.
4. **Include:**
- A one-sentence description in the metadata frontmatter
- At least one tag (`frontend`, `cloud`, `database`, etc.)
- A link to the official brand website
- Both colored and monochrome SVG variants
## Adding an icon
1. Add the optimized SVG to `packages/core/export-files/icons/.svg`
2. Add the monochrome version to `packages/core/export-files/font/.svg`
Use kebab-case file names (`visual-studio-code`). For a glyph-only variant, add the `-icon` suffix (`nextjs` and `nextjs-icon`). The file name becomes the component name (`nextjs-icon` becomes `NextjsIcon`), the public SVG URL (`https://devicons.io/devicons/icons/nextjs-icon.svg`), and the font class (`devicons-nextjs-icon`).
3. Commit: `feat: add next-js icon`
4. Generate the docs page:
```bash
cd apps/website && pnpm run copy:mdx
```
5. Fill in the description, tags, alternatives, and website link in the generated MDX file
6. Commit: `docs: add next-js icon`
## Improving an existing icon
- Keep original icon names. They are public API.
- Match the visual weight of neighboring icons.
- Test both colored and monochrome variants.
## Icon specs
- Canvas size: `600x600`, maxing out by width or height
- Clean up SVGs: remove unnecessary groups, metadata, and attributes
- Monochrome icons use `currentColor` for fill or stroke
- Use [SVGO](https://github.com/svg/svgo) with default config to optimize
## Code of conduct
Be kind. Assume good intent.
---
← Previous: [Theming](/docs/theming.md)
[← All docs](/docs.md)
---
source: https://devicons.io/skill.md
---
---
name: devicons
description: Use Devicons (@dev.icons/*) — 1,397 developer, brand, framework, and tooling logos as React, Vue, and Svelte components, public SVG URLs, an SVG sprite, and an icon font. Covers installation, component naming, monochrome variants, SVG URLs, the icon catalog, and variant selection. Use when working with developer logos, brand icons, framework marks, or when needing icon assets in SVG, font, or sprite format.
---
# Devicons
1,397 developer, brand, framework, and tooling logos as React, Vue, and Svelte components, plain SVG files, an SVG sprite, and a web font. 136 flagship icons are flagged `recommended` across 1015 tags.
- **Website**: [devicons.io](https://devicons.io/)
- **Browse all icons**: [devicons.io/icons/](https://devicons.io/icons/)
- **Docs**: [devicons.io/docs/](https://devicons.io/docs/)
- **GitHub**: [github.com/vorillaz/devicons](https://github.com/vorillaz/devicons)
## Key concepts
- **Icon entry** — one brand/technology, identified by a slug (e.g. `react`, `nextjs`, `postgresql`). Pages live at `https://devicons.io/icons//` with a Markdown twin at `https://devicons.io/icons/.md`.
- **Icon file** — each entry has one or more files listed in its `icons` array (e.g. `nextjs` has `nextjs-icon` and `nextjs`). Files ending in `-icon` are the glyph-only mark; the others are the full logo/wordmark. **Files, not slugs, drive component names, SVG URLs, sprite ids, and font classes.**
## Discovery
The skill is published per the [Agent Skills Discovery](https://github.com/cloudflare/agent-skills-discovery-rfc) spec. Any compliant client can find it via:
```
https://devicons.io/.well-known/agent-skills/index.json
```
## Use the MCP server or API when available
If your environment supports MCP, prefer the hosted Devicons MCP server over guessing slugs or URLs. It is read-only and needs no key:
```bash
claude mcp add --transport http devicons https://devicons.io/api/mcp
```
Tools: `search_icons` (find slugs), `get_icon` (SVG markup, variant URLs, React/Vue/Svelte code), `list_categories`, `get_category`. Local stdio alternative: `npx -y devicons mcp`. Setup for other clients: https://devicons.io/docs/mcp/
Without MCP, use the JSON API (no key, CORS-enabled):
- Search: `https://devicons.io/api/v1/search?q=postgres&limit=5`
- Icon detail: `https://devicons.io/api/v1/icons/{slug}.json`
- Categories: `https://devicons.io/api/v1/categories.json`
- OpenAPI: `https://devicons.io/api/v1/openapi.json`
## Skill files
| File | URL |
| --- | --- |
| **Discovery index** | `https://devicons.io/.well-known/agent-skills/index.json` |
| **SKILL.md** (this file) | `https://devicons.io/.well-known/agent-skills/devicons/SKILL.md` |
| **reference/icons.md** | `https://devicons.io/skill/reference/icons.md` |
| **reference/packages.md** | `https://devicons.io/skill/reference/packages.md` |
**Install locally** (replace `~/.claude` with your agent's skill directory):
```bash
SKILL_DIR=~/.claude/skills/devicons
mkdir -p "$SKILL_DIR/reference"
curl -sL https://devicons.io/.well-known/agent-skills/devicons/SKILL.md > "$SKILL_DIR/SKILL.md"
curl -sL https://devicons.io/skill/reference/icons.md > "$SKILL_DIR/reference/icons.md"
curl -sL https://devicons.io/skill/reference/packages.md > "$SKILL_DIR/reference/packages.md"
```
You can also read these files directly from the URLs above — no install required.
## Packages at a glance
| Package | Version | Use case |
| --- | --- | --- |
| `@dev.icons/react` | 1.3.0 | React components (color by default, monochrome via `/mono`) |
| `@dev.icons/vue` | 1.3.0 | Vue 3 components (color by default, monochrome via `/mono`) |
| `@dev.icons/svelte` | 1.3.0 | Svelte 5 components (color by default, monochrome via `/mono`) |
| `@dev.icons/core` | 1.3.0 | Icon catalog (`ICONS`, `getIcon`), `icons.json`, a color SVG sprite, and the icon font files |
| `devicons` | 2.3.0 | Icon web font (CSS + woff2/ttf), no build step required |
There is no dedicated Astro package. In Astro, use `@dev.icons/react` (or vue/svelte) components — they render to static SVG without a `client:*` directive.
## Installation
```bash
# React (react >= 16.8)
npm install @dev.icons/react
# Vue (vue >= 3.3)
npm install @dev.icons/vue
# Svelte (svelte >= 5)
npm install @dev.icons/svelte
# Catalog metadata, sprite, font files
npm install @dev.icons/core
# Icon font (CSS + webfont files)
npm install devicons
```
`pnpm`, `yarn`, and `bun` all work the same way.
## Component naming
The export name is derived from the **icon file** name: split on `-`, capitalize each part, join. If the result is one of the reserved names `React`, `Vue`, `Svelte`, or `Astro`, it is prefixed with `_` (alias it on import in Vue/Svelte templates, e.g. `import { _Vue as VueLogo }`). There is no automatic `Icon` suffix — `Icon` only appears when the file itself ends in `-icon`.
| Icon file | Component name |
| --- | --- |
| `react` | `_React` |
| `vue` | `_Vue` |
| `css` | `Css` |
| `nextjs` | `Nextjs` |
| `nextjs-icon` | `NextjsIcon` |
| `discord-icon` | `DiscordIcon` |
| `postgresql` | `Postgresql` |
Every icon page Markdown twin (`https://devicons.io/icons/.md`) lists the exact file and component names.
## React components
```tsx
import { _React, Nextjs, Postgresql } from "@dev.icons/react";
// Full color (default)
<_React size={32} />
// Accessible name rendered as
// Any SVG prop is forwarded
console.log("clicked")} />
```
### Monochrome
Monochrome variants are separate components with the same names, exported from the `/mono` subpath. They use `currentColor`, so they inherit the surrounding text color.
```tsx
import { _React, GithubIcon } from "@dev.icons/react/mono";
<_React size={32} />
```
### Props
| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| `size` | `string \| number` | `"1em"` | Sets `width` and `height` |
| `color` | `string` | `"currentColor"` | Root `fill`; visible on monochrome icons |
| `alt` | `string` | — | Rendered as an SVG `` (accessible name) |
| `mirrored` | `boolean` | `false` | Flips the icon horizontally (`scale(-1, 1)`) |
All other SVG attributes (`className`, `style`, `aria-*`, event handlers) are forwarded to the root ``. Vue and Svelte components accept the same four props.
## Vue components
Vue and Svelte templates cannot use a tag that starts with `_`, so alias the reserved names on import.
```vue
```
## Svelte components
```svelte
```
## Plain SVG URLs (no install)
Every icon file is served as a standalone, CORS-enabled SVG:
| Variant | URL pattern |
| --- | --- |
| Color | `https://devicons.io/devicons/icons/{file}.svg` |
| Monochrome (`currentColor`) | `https://devicons.io/devicons/font/{file}.svg` |
```html
```
Fetch and inline the monochrome SVG when it must follow CSS `color`:
```html
```
The npm packages do **not** ship per-icon SVG files, so there is no per-icon SVG URL on jsDelivr or UNPKG.
## @dev.icons/core
`@dev.icons/core` exports the catalog of icon files with their font codepoints. It does not export SVG strings.
```ts
import { ICONS, getIcon } from "@dev.icons/core";
import type { IconRecord } from "@dev.icons/core";
// IconRecord = { name: string; codepoint: number; unicode: string; isVariant: boolean }
getIcon("react"); // { name: "react", codepoint: ..., unicode: "...", isVariant: false }
ICONS.filter((i) => !i.isVariant).length;
```
Package subpaths: `@dev.icons/core/icons.json`, `@dev.icons/core/sprite` (color SVG sprite), `@dev.icons/core/font/css`, `@dev.icons/core/font/woff2`, `@dev.icons/core/font/ttf`.
## Icon font
```css
/* npm install devicons */
@import "devicons/css";
```
```html
```
No build step? Link the stylesheet from jsDelivr (pin the version):
```html
```
Glyphs are monochrome and follow `color` and `font-size`.
## SVG sprite
`@dev.icons/core` ships a color sprite at `dist/sprite/sprite-symbol.svg` (`@dev.icons/core/sprite`) with one `` per icon file (`#react`, `#nextjs-icon`). Browsers block `` across origins, so copy the sprite into your own static assets and reference it same-origin:
```html
```
Versioned download: `https://cdn.jsdelivr.net/npm/@dev.icons/core@1.3.0/dist/sprite/sprite-symbol.svg`
## Catalog metadata
`https://devicons.io/search-index.json` returns every icon entry (including deprecated ones) with these fields:
- `id`: the slug (page URL is `/icons//`)
- `name`: human-readable brand name
- `description`: one-line description (may be empty)
- `icons`: icon file names — use these for components, SVG URLs, sprite ids, and font classes
- `tags`: categories (`frontend`, `database`, `ai`, `llm`, ...)
- `aliases` (optional): alternative names users search with
- `popular`: flagship flag
- `deprecated`: skip entries where this is `true`
- `badInDark` / `badInLight`: the icon needs a contrasting backdrop on that theme
- `version` (optional): library version that added the icon
For the curated `recommended` picks per tag, see [reference/icons.md](https://devicons.io/skill/reference/icons.md).
## When to use which option
- **React / Vue / Svelte app** → `@dev.icons/` (tree-shakeable); `/mono` for single-color.
- **Astro** → `@dev.icons/react` (or vue/svelte) components rendered statically.
- **Plain HTML, Markdown, README, CMS** → ` `.
- **Many monochrome glyphs styled by CSS** → icon font (`devicons`).
- **Many color icons on one page** → self-hosted SVG sprite from `@dev.icons/core`.
- **Tooling / codegen needing the list of files** → `@dev.icons/core` (`ICONS`) or `search-index.json`.
## Related documentation
- [Installation](https://devicons.io/docs/installation/)
- [React guide](https://devicons.io/docs/react/)
- [Vue guide](https://devicons.io/docs/vue/)
- [Svelte guide](https://devicons.io/docs/svelte/)
- [Core package](https://devicons.io/docs/core/)
- [Icon font](https://devicons.io/docs/icon-font/)
- [CDN and SVG URLs](https://devicons.io/docs/cdn/)