Chrome Extension Icons
Generate professional icons for Chrome browser extensions in seconds using Iconify's vast library of 275,000+ free open-source icons.
Quick Start Workflow
When the user requests an extension icon, follow these steps:
1. Understand the Request
Extract key information:
- Icon theme/keyword: What type of icon? (e.g., "calendar", "music", "settings", "bookmark")
- Target directory: Where to save icons (default:
./icons) - Manifest location: Path to manifest.json (default:
./manifest.json) - Color preference: Any specific color requirement (optional)
- Context: Is manifest.json already present? Is this a new project?
2. Search for Icons Automatically
Run the search command with the extracted keyword:
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js search "<keyword>"
Expected output:
- List of matching icons with preview URLs
- Best match automatically identified
- Top 5 results displayed (best match + 4 alternatives)
Present to user:
- Show the best matching icon with its ID and preview link
- Briefly mention that 4 alternative options are also available if they want to choose differently
- Provide the preview URL so they can see what the icon looks like
Example presentation:
I found a great calendar icon for your extension:
Best match: mdi:calendar
Preview: https://icon-sets.iconify.design/mdi/icons/calendar.html
I'll generate this icon in 4 sizes (16x16, 32x32, 48x48, 128x128) for your Chrome extension.
If you'd prefer a different style, I also have 4 alternatives saved that you can choose from.
Shall I proceed with this icon?
3. Generate Icons
Once confirmed (or auto-proceed if user said "yes" to any icon), run:
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js generate \
--icon "<icon-id>" \
--output "./icons" \
--manifest "./manifest.json"
With custom color (if user specified a color):
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js generate \
--icon "<icon-id>" \
--output "./icons" \
--manifest "./manifest.json" \
--color "#ba3329"
4. Verify Results
After generation, check the output:
ls -lh ./icons/
Verify 4 PNG files are created:
icon16.pngicon32.pngicon48.pngicon128.png
Check manifest.json was updated:
cat ./manifest.json | grep -A 6 '"icons"'
5. Report to User
Provide a summary:
β
Icon generation complete!
Generated files:
- icons/icon16.png (1.2 KB)
- icons/icon32.png (2.4 KB)
- icons/icon48.png (3.8 KB)
- icons/icon128.png (9.5 KB)
Your manifest.json has been updated:
{
"icons": {
"16": "icons/icon16.png",
"32": "icons/icon32.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}
π Alternative icons (if you want to try a different style):
1. mdi:calendar-month - https://icon-sets.iconify.design/mdi/icons/calendar-month.html
2. fa:calendar - https://icon-sets.iconify.design/fa/icons/calendar.html
3. heroicons:calendar - https://icon-sets.iconify.design/heroicons/icons/calendar.html
4. carbon:calendar - https://icon-sets.iconify.design/carbon/icons/calendar.html
Just let me know if you'd like to try any of these alternatives!
Advanced Features
Custom Color Icons
When user requests a specific color (e.g., "make it red", "use my brand color #ba3329"):
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js generate \
--icon "mdi:home" \
--color "#ba3329" \
--output "./icons"
Note: Color customization works best with single-color SVG icons. Complex gradients may not render as expected.
Convert Local SVG File
When user has their own logo or SVG file:
-
First check if the file exists:
ls -lh <svg-file-path> -
Convert it:
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js convert \ --input "<svg-file-path>" \ --output "./icons" \ --manifest "./manifest.json" -
Optionally apply color:
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js convert \ --input "./logo.svg" \ --output "./icons" \ --color "#ff0000"
Batch Generation
When user needs icons for multiple projects:
-
Create a configuration file
icons-config.json:{ "projects": [ { "name": "Project A", "icon": "mdi:calendar", "output": "./project-a/icons", "manifest": "./project-a/manifest.json" }, { "name": "Project B", "icon": "mdi:music", "output": "./project-b/icons", "manifest": "./project-b/manifest.json", "color": "#ff0000" }, { "name": "Project C", "input": "./project-c/logo.svg", "output": "./project-c/icons", "manifest": "./project-c/manifest.json" } ] } -
Run batch generation:
node ~/.claude/skills/chrome-extension-icons/scripts/generate-icons.js batch \ --config icons-config.json -
Report summary showing success/failure for each project
Chrome Extension Icon Requirements
Always inform users about Chrome's icon requirements:
- 16x16 pixels: Favicon, toolbar icon (small displays)
- 32x32 pixels: Windows taskbar (optional but recommended)
- 48x48 pixels: Extension management page (required)
- 128x128 pixels: Chrome Web Store, installation dialog (required)
Format: PNG only (SVG is not supported in manifest.json)
Transparency: Supported and recommended for non-square logos
File size: Aim for < 100 KB total for all 4 files
Manifest.json Configuration
The script automatically creates or updates the icons field:
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0.0",
"icons": {
"16": "icons/icon16.png",
"32": "icons/icon32.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}
If action or browser_action exists, default_icon is also updated:
{
"action": {
"default_icon": {
"16": "icons/icon16.png",
"32": "icons/icon32.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}
}
Error Handling
Missing Dependencies
If the script fails with Sharp installation error:
macOS:
brew install vips
cd ~/.claude/skills/chrome-extension-icons && npm install
Ubuntu/Debian:
sudo apt-get install libvips-dev
cd ~/.claude/skills/chrome-extension-icons && npm install
Windows:
npm install --global windows-build-tools
cd ~/.claude/skills/chrome-extension-icons && npm install
Inform the user of these steps if installation fails.
API Failures
The script has built-in retry logic (3 attempts with exponential backoff). If Iconify API fails:
- Suggest trying again in a moment
- Offer to use a local SVG if available
- Check internet connection
Rate Limiting
If HTTP 429 error occurs, the script automatically waits and retries. Inform user:
The icon API is experiencing high traffic. Waiting 60 seconds before retry...
Invalid Icon Selection
If an icon doesn't render well or user doesn't like it:
- Present the 4 saved alternative icons
- Offer to search for a different keyword
- Suggest using their own SVG file
Best Practices
- Always preview: Show the user the icon preview URL before generating
- Confirm before generating: Unless user explicitly requested immediate action
- Check manifest.json exists: If not, inform user a new one will be created
- Verify output: Always run
lsto confirm files were created successfully - File sizes: Report file sizes to ensure they're reasonable (< 20 KB each)
- Backup warning: If manifest.json exists, mention it will be updated (not replaced)
Common User Phrases That Trigger This Skill
- "I need an icon for my Chrome extension"
- "Add a calendar icon to my extension"
- "Generate extension icons"
- "Can you create icons for my browser extension?"
- "I need icons for manifest.json"
- "Convert my logo to Chrome extension format"
- "Make extension icons from this SVG"
Examples
See examples/usage.md for detailed conversation examples and edge cases.
Technical Details
- Icon source: Iconify API (https://iconify.design/)
- Total icons: 275,000+ from 200+ icon sets
- Image processing: Sharp library (high-performance Node.js)
- Supported input: SVG (from Iconify or local file)
- Output format: PNG with transparency
- Node.js requirement: >= 18.17.0
Troubleshooting Quick Reference
| Issue | Solution |
|-------|----------|
| Sharp won't install | Install libvips: brew install vips (macOS) |
| API timeout | Retry after a moment, check connection |
| Icon looks bad | Try a different icon from alternatives |
| Wrong colors | Use --color flag for single-color icons |
| File too large | Complex SVGs may create large PNGs, try simpler icon |
| Manifest not updating | Check file permissions, verify path is correct |
Remember: This skill automates a tedious process. Be helpful, present clear options, and make the experience smooth for the user. Always show preview links so users know what they're getting before generation.