npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

iconmate

v1.1.0

Published

CLI to fetch icons and save them into your Vite, NextJS, or similar TypeScript project

Readme

Built from my blog post on Why you might not need an icon library, iconmate is a Rust-powered CLI for developers who want the speed and control of plain files without icon-package bloat.

Use icones.js.org, a direct SVG URL, or raw SVG markup. iconmate drops the icon straight into your project and keeps your exports tidy.

Why iconmate?

  • Made with Rust🦀: Fast TUI that you can use on any IDE (powered by ratatui, nucleo).
  • AI-ready automation 🤖: Let your coding agents get icons and add it to your project! A CLI is basically an MCP, just let AI use iconmate --help and it should be able to get everything running!
  • Zero dependencies 📦: No icon library runtime added to your app
  • Framework-native output 🧩: Generate files for React, Vue, Svelte, Solid, or plain SVG
  • Interactive by default 🎮: Run iconmate and have a pleasant interactive TUI
  • Multiple sources 🌐: Pull icons from Iconify names, URLs, or even raw SVG (which means it works with your private icon packs i.e. Anron)
  • Fast workflow ⚡: Generate file + export line in one step
  • Prototype-friendly 🏗️: Create empty SVG placeholders when needed

Quick Start

# Install
npm install -g iconmate

# Run the TUI in your project 🚀
iconmate

✨ That's it. The interactive TUI guides you through adding icons to your project.

// 👇 Then, you can just easily use any icon on your project like this!

import { IconHeart } from "@/assets/icons";

function MyApp() {
  return <IconHeart />;
}

Configuration

You can also add sensible defaults by passing flags as configs:

iconmate --folder src/components/Icons/ --folder src/components/icons
iconmate --folder src/components/Icons/ --icon heroicons:heart --name Heart

Iconmate now includes config schemas + TS type definitions in the repo:

  • Local config schema (repo): iconmatelocal.schema.json
  • Global config schema (repo): iconmateglobal.schema.json
  • Local config schema (raw): https://raw.githubusercontent.com/Blankeos/iconmate/main/iconmatelocal.schema.json
  • Global config schema (raw): https://raw.githubusercontent.com/Blankeos/iconmate/main/iconmateglobal.schema.json
  • Schema source: config-gen/src/schema.ts
  • TS type definitions: config-gen/src/types.ts

Regenerate schemas from project root:

just config-schema

just config-schema installs config-gen deps and generates both schema files.

Local Config (iconmate.config.json)

{
  "$schema": "https://raw.githubusercontent.com/Blankeos/iconmate/main/iconmatelocal.schema.json",
  "folder": "src/assets/icons",
  "preset": "normal",
  "output_line_template": "export { default as Icon%name% } from './%icon%%ext%';",
  "svg_view_cmd": "zed %filename%"
}

Use the raw URL for $schema so editors can fetch JSON directly.

Local config keys:

  • folder (default: src/assets/icons)
  • preset (default: normal, meaning plain .svg mode)
  • output_line_template (default: export { default as Icon%name% } from './%icon%%ext%';)
  • svg_view_cmd (supports %filename% token)

Allowed preset values:

  • normal (plain SVG mode)
  • react
  • svelte
  • solid
  • vue
  • emptysvg

Global Config (user-level)

Global config is for user-wide defaults and currently documents svg_view_cmd.

Suggested paths:

  • macOS: ~/Library/Application Support/iconmate/config.json
  • Linux: ~/.config/iconmate/config.json
  • Windows: %APPDATA%\\iconmate\\config.json

Example global config:

{
  "$schema": "https://raw.githubusercontent.com/Blankeos/iconmate/main/iconmatelocal.schema.json",
  "svg_view_cmd": "code %filename%"
}

[!NOTE] This release adds config schemas and generated docs/types. Runtime loading/precedence wiring in the CLI/TUI is tracked in folder-system-plan.md.

Installation

NPM 🦖

# Install globally with either:
npm install -g iconmate
pnpm add -g iconmate
bun add -g iconmate
# Use without installing with either:
npx iconmate
pnpm dlx iconmate
bunx iconmate

Install from Cargo 🦀

cargo install iconmate

# Or clone and install from source:
git clone https://github.com/blankeos/iconmate.git
cd iconmate
cargo install --path .

Framework Presets

Determines the output filetype and the contents inside that file type.

| Preset | File Type | Framework | | ---------- | --------- | ----------------- | | normal | .svg | Vanilla HTML/CSS | | react | .tsx | React Components | | svelte | .svelte | Svelte Components | | solid | .tsx | Solid Components | | vue | .vue | Vue Components | | emptysvg | .svg | Placeholder |

[!IMPORTANT] If you want to use .svg file types, make sure to setup svgr for your js apps. I covered how to do this in:

Command Line

Interactive TUI Mode (Recommended)

iconmate

This section is helpful for AI:

Add Specific Icon

iconmate add --folder src/assets/icons --icon heroicons:heart --name Heart

With URL

iconmate add --folder src/assets/icons --icon https://api.iconify.design/mdi:heart.svg --name Heart

Raw SVG Content

iconmate add --folder src/assets/icons --icon '<svg>...</svg>' --name Heart

You can also pull raw SVG directly from the Iconify API:

iconmate add --folder src/assets/icons --icon "$(curl -fsSL https://api.iconify.design/mdi:heart.svg)" --name Heart

Custom Export Template

iconmate add --folder src/assets/icons --icon heroicons:heart --name Heart --output-line-template "export { ReactComponent as Icon%name% } from './%icon%.svg?react';"

Delete icons

iconmate delete --folder src/assets/icons

Iconify API Commands

# Search by keyword (text: one prefix:icon per line)
iconmate iconify search heart

# Search with pagination and JSON output
iconmate iconify search heart --limit 20 --start 0 --format json

# Include collection metadata in JSON search output
iconmate iconify search heart --format json --include-collections

# List all available collections
iconmate iconify collections

# List icons from one collection prefix
iconmate iconify collection mdi

# Get one icon as raw SVG (default)
iconmate iconify get mdi:heart

# Get one icon as raw Iconify JSON
iconmate iconify get mdi:heart --format json

iconmate iconify get <prefix:icon> --format json uses Iconify's JSON endpoint format, for example https://api.iconify.design/mdi.json?icons=heart.

AI-Ready Workflows

iconmate is designed to be easy for AI agents and scripts to drive end-to-end.

# 1) Search in machine-readable JSON
iconmate iconify search heart --format json --limit 20 --include-collections

# 2) Add an icon non-interactively from prefix:name
iconmate add --folder src/assets/icons --icon mdi:heart --name Heart

# 3) Or fetch raw SVG from Iconify API and add directly
iconmate add --folder src/assets/icons --icon "$(curl -fsSL https://api.iconify.design/mdi:heart.svg)" --name Heart

This means an AI can search, choose, and add icons without opening a browser.

Package.json Scripts

Best practice: Add sensible defaults to your script runner.

"scripts": {
  // Usage: npm run iconmate (usually this is the only command you need)!
  "iconmate": "iconmate --folder src/assets/icons/"
}

Supported Platforms

  • macOS (Intel & Apple Silicon) 🍎
  • Linux (x64 & ARM64) 🐧
  • Windows (x64) 🪟

How It Works

  1. Find your icon: Use https://icones.js.org or iconmate iconify search <query>.
  2. Pick the icon id: For example heroicons:heart.
  3. Add with iconmate: Interactive (iconmate) or direct (iconmate add ...).

illustration

Why this structure?

  1. Copy-paste workflow: Find icon on icones.js.org → copy name → paste into iconmate
  2. Organized by default: Everything goes into index.ts exports automatically and just typing <Icon will autosuggest from your current collection. Just regular TS behavior.
  3. TypeScript ready: Generated code is fully typed. Pass custom width, height, fills, you name it.
  4. Customizable 🎨: Want to add a default Tailwind class on every icon? custom props? Just add it to the file!
  5. Git-friendly: Plain SVG files, no binary assets
  6. Lightning fast: Native Rust binary, no Node.js startup time

Contributing

Contributions are welcome—pull requests for bug fixes, new framework presets, or improvements are appreciated.

🐱 Repo: github.com/Blankeos/iconmate - Star it if you love it ⭐

What's Completed from the Roadmap

  • ✅ Interactive prompt mode
  • ✅ Framework presets (React, Vue, Svelte, Solid)
  • ✅ URL and raw SVG support
  • ✅ Custom export templates
  • ✅ Zero-config installation

Roadmap & Out-of-scoped

  • [x] An empty command. Creates an .svg, adds it to the index.ts with a name you can specify.
  • [x] Paste an actual svg instead of an icon name.
  • [x] Presets (normal, react, solid, svelte, vue, emptysvg) override output templates and file types.
  • [x] Prompt Mode via iconmate - Interactive mode so you won't need to pass arguments.
  • [x] Delete an icon using iconmate delete
  • [x] An interactive TUI instead of prompt-mode.
    • [x] Rename in the TUI (but recommended for you to just use the LSP to do it)
    • [x] A lot of TUI functionalities wokr
  • [x] iconmate iconify --help commands for AI to easily look for icons itself.
  • [x] Search and add Iconify icons directly inside the TUI (no need to open https://icones.js.org).
  • [ ] Other frameworks i.e. --preset=flutter or Go/Rust GUI apps? (Not sure how they work yet though).
  • [ ] ~Zed or VSCode Extension~ (seems unnecessary now, it's just a CLI)

Near-Term Roadmap


Made with Rust 🦀 | Based on my blog post