Always up-to-date lists of icon names for popular icon libraries including Lucide, Material Icons/Symbols, and Phosphor Icons.
This project automatically fetches and processes icon data from popular icon libraries to generate standardized JSON files containing icon names, categories, tags, and popularity metrics. The generated files are optimized for use in applications that need to provide icon selection interfaces, search functionality, or autocomplete features.
- Material Icons & Symbols (~5,875 icons)
- Material Icons (filled style)
- Material Symbols (outlined style)
- Combined dataset
- Lucide Icons (~1,597 icons)
- Popular React/Vue icon library
- Phosphor Icons (~1,512 icons)
- Flexible icon family
- Ultimate Icons (~8,907 icons) NEW!
- Combined dataset with unified naming:
icon-name:library-code - Cross-library standardization with set abbreviations
- Category mapping and deduplication
- Combined dataset with unified naming:
The project generates multiple formats for each icon library in the dist/ directory:
Standard Files (without -full):
- Contain simple arrays of icon names only
- Perfect for basic icon lists, autocomplete, or lightweight applications
- Sorted by popularity (most used icons first) or alphabetically (with
-asuffix)
Basic Files (with -basic):
- Contain minimal icon objects with just the name field
- Include count statistics but no categories, tags, or popularity data
- Ideal for applications that need icon names in object format without extra metadata
Full Metadata Files (with -full):
- Contain rich JSON objects with complete metadata
- Include categories, tags, popularity scores, and statistics
- Ideal for advanced features like filtering, categorization, and search
{library-name}.json- Pretty formatted JSON, sorted by popularity{library-name}.min.json- Minified JSON, sorted by popularity{library-name}-a.json- Pretty formatted JSON, sorted alphabetically{library-name}-a.min.json- Minified JSON, sorted alphabetically{library-name}-basic.json- Minimal icon objects with names only{library-name}-basic.min.json- Minified basic format{library-name}-full.json- Complete metadata including categories and tags{library-name}-full.min.json- Minified complete metadata*.br- Brotli compressed versions (≈80% smaller)
material-combined.json- All Material icons sorted by popularitymaterial-icons-full.json- Material Icons with full metadatalucide-icons-a.json- Lucide icons sorted alphabeticallyphosphor-icons.min.json.br- Compressed Phosphor icons
Simple Format (popularity/alphabetical):
["icon-name-1", "icon-name-2", "icon-name-3"]Basic Format:
{
"countOfIcons": 1597,
"countOfCategories": 0,
"countOfTags": 0,
"categories": [],
"icons": [
{"n": "icon-name-1"},
{"n": "icon-name-2"},
{"n": "icon-name-3"}
]
}Full Format:
{
"countOfIcons": 1597,
"countOfCategories": 25,
"countOfTags": 8532,
"categories": [
{"n": "Accessibility", "c": 23},
{"n": "Animals", "c": 45}
],
"icons": [
{
"n": "home",
"p": 95,
"c": ["Navigation"],
"t": ["home", "house", "building"]
}
]
}Field Descriptions:
n- Icon name (for Ultimate Icons:name:codeformat)s- Set abbreviation (Ultimate Icons only:mi,ms,lc,ph)p- Popularity score (0-100)c- Categories arrayt- Tags array (searchable keywords)
The Ultimate Icons dataset combines all libraries with unified naming:
Icon Name Format: {original-name}:{library-code}
Examples:
search:mi(Material Icons)home:lc(Lucide Icons)arrow-right:ph(Phosphor Icons)account-circle:ms(Material Symbols)
Set Codes:
mi= Material Iconsms= Material Symbolslc= Lucide Iconsph= Phosphor Icons
Additional Features:
- Merged similar categories (e.g., "Device" + "Devices" → "Devices")
- Cross-library category standardization
- Set statistics and counts
- Node.js 16+ (the project uses ES modules)
- npm or yarn
-
Clone the repository:
git clone https://github.com/kibermaks/icon-lists.git cd Dynamic-icon-lists -
Install dependencies:
npm install
To update all icon libraries and regenerate the JSON files:
node src/update.jsThis will:
- Fetch the latest icon data from each source
- Process and transform the data
- Generate all output formats in the
dist/directory - Compress files using Brotli
Expected output:
Starting icon processing...
Material: Total icons count: 5875
Processing 5798 icons to material-combined...
Processing 2122 icons to material-icons...
Processing 3676 icons to material-symbols...
Lucide: Total icons count: 1597
Processing 1597 icons to lucide-icons...
Phosphor: Total icons count from _fetchData: 1512
Processing 1512 icons to phosphor-icons...
Ultimate: Total icons count from all sets: 8907
Processing 8907 icons to ultimate-icons...
All icon sets processed successfully.
src/
├── update.js # Main entry point
├── material-processor.js # Material Icons/Symbols processor
├── lucide-processor.js # Lucide Icons processor
├── phosphor-processor.js # Phosphor Icons processor
├── ultimate-processor.js # Ultimate Icons combined processor (NEW)
├── set-processor.js # Base processor class
├── utils.js # File I/O and compression utilities
├── material-schema.json # JSON schema for Material icons validation
└── helpers/
├── readAllMetadata.mjs
└── readMetadata.mjs
You can run individual processors by importing and executing them directly:
import { MaterialProcessor } from './src/material-processor.js';
const processor = new MaterialProcessor();
await processor.execute();Currently, there are no automated tests. To verify the output:
- Run the processor:
node src/update.js - Check that files are generated in
dist/ - Validate JSON syntax in generated files
- Verify icon counts match expected values
To add support for a new icon library:
- Create a new processor file extending
SetProcessor - Implement required methods:
_fetchData()- Fetch raw icon data_validateData()- Validate data structure_transformData()- Transform to standard format_process()- Generate output files
- Add the processor to
src/update.js
This repository includes a GitHub Actions workflow that automatically updates the icon data daily to ensure the lists stay current with upstream changes.
The workflow (.github/workflows/update.yml) runs automatically:
- Schedule: Every day at 00:05 UTC
- Manual trigger: Can be triggered manually via GitHub Actions UI
- Clone Dependencies: Downloads the latest Lucide icons repository
- Fetch Latest Data: Retrieves current icon data from all supported libraries
- Process & Generate: Runs
node src/update.jsto create updated JSON files - Commit Changes: Automatically commits any changes to the
gh-pagesbranch - CDN Cache Purge: Purges jsDelivr cache to ensure fresh content delivery
The generated files are automatically published to jsDelivr CDN for easy access:
https://cdn.jsdelivr.net/gh/kibermaks/icon-lists@gh-pages/dist/{filename}
Example URLs:
https://cdn.jsdelivr.net/gh/kibermaks/icon-lists@gh-pages/dist/material-combined.min.jsonhttps://cdn.jsdelivr.net/gh/kibermaks/icon-lists@gh-pages/dist/lucide-icons.jsonhttps://cdn.jsdelivr.net/gh/kibermaks/icon-lists@gh-pages/dist/phosphor-icons-full.min.json.br
- Material Icons/Symbols: Google Fonts API
- Lucide Icons: Local metadata files (requires lucide package)
- Phosphor Icons: Phosphor Icons API
Licensed under the GNU GPL, Version 3 or later. See LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Test with
node src/update.js - Submit a pull request
- Icon Picker Components: Use the JSON files to populate icon selection interfaces
- Search/Autocomplete: Use tags and names for fuzzy search functionality
- Design Systems: Integrate icon lists into design system documentation
- Code Generators: Generate icon constants or enums for applications
- Analytics: Track icon usage patterns using popularity scores