A simple command-line tool to bulk-download Iconify icon sets as SVG files.
It supports online and offline modes, JSON-based listing, category grouping, zipping, and dry-run previews — all while keeping the workflow clean and minimal.
- ✅ Download complete Iconify icon sets via API or GitHub JSON
- 🧭 Supports URLs or prefixes (e.g.
fluent,mdi,tabler, etc.) - 📦 Offline / pinned listing from a local JSON (
--json <file>) - 🗂 Group icons into category folders (
--by-category) - 🏷 Save as
name.svginstead ofprefix-name.svg(--no-prefix) - 🪣 Zip results after download (
--zip <file.zip>) - 🧪 Dry-run mode (
--dry-run) to preview without downloading - 🧵 Multithreaded downloads (fast and reliable)
- 🪶 Pure-Python, single-file tool — no external dependencies beyond
click,httpx, andtqdm
git clone https://github.com/JDPS/Iconify-Downloader.git
cd iconify-downloaderUsing uv (recommended):
uv syncOr using pip:
pip install .Download all icons from a collection using the installed CLI:
iconify-dl lucide-lab -o ./iconsOr using python -m:
python -m iconify_downloader lucide-lab -o ./iconsOr using uv run:
uv run iconify-dl lucide-lab -o ./iconsIf /collection isn’t flat, the script automatically falls back to GitHub JSON and downloads from there.
Download once from GitHub:
curl -LO https://raw.githubusercontent.com/iconify/icon-sets/master/json/fluent.jsonThen run without network dependency:
iconify-dl fluent -o ./icons --json fluent.jsoniconify-dl mdi -o ./mdi --contains arrow --no-prefixiconify-dl tabler -o ./tabler --by-categoryiconify-dl https://icon-sets.iconify.design/lucide-lab/ -o ./icons --dry-runiconify-dl fluent -o ./icons --zip fluent_icons.zip| Option | Description |
|---|---|
PREFIX_OR_URL |
Iconify prefix (fluent, mdi, tabler, etc.) or full set URL |
-o, --out |
Output directory (default: ./iconify_svgs) |
--include |
Comma-separated list of icons to include |
--exclude |
Comma-separated list of icons to exclude |
--contains |
Substring filter for icon names |
-j, --jobs |
Number of concurrent downloads (default: 12) |
--size |
Icon height (in pixels) |
--overwrite/--no-overwrite |
Overwrite existing files (default: False) |
--debug |
Show detailed logs |
--json |
Use a local Iconify JSON instead of API/GitHub |
--no-prefix |
Save icons as name.svg instead of prefix-name.svg |
--by-category |
Organize icons into folders by category (when available) |
--zip |
Zip output directory to this file |
--dry-run |
Show planned actions without downloading |
Downloading fluent: 18973icon [02:19, 136.24icon/s]
Done. 18973 downloaded
Zipped to fluent_icons.zip- Uses official Iconify API and icon-sets GitHub repo.
- Written for Python 3.11+, no type-hint imports (
list[str], notList[str]). - Compatible with PowerShell 7+, Bash, and macOS/Linux terminals.
- Safe retries: if the API returns a structured collection instead of a flat list, the script automatically falls back to GitHub JSON.
- When
--dry-runis active, no network writes or file saves occur.
This script itself is released under the MIT License.
Downloaded icon sets remain under their respective Iconify / upstream licenses.
Always verify licensing terms in the generated LICENSE.txt file before redistribution.
- Script author: João Soares
- Data sources: Iconify · Iconify icon-sets GitHub