Icon Guide
Use this page as the source of truth for Chrome extension icon work in this repo.
Current Convention
- Source art lives in each package at
icons/icon.svg - Generated PNGs live beside it:
icons/icon16.pngicons/icon32.pngicons/icon48.pngicons/icon128.png
- PNG is the required output format for extension and store icons
- Background must stay transparent
- Toolbar uses
16and32 - Extension page and store use
48and128
Manifest Wiring
Use this pattern in each extension manifest:
json
{
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"action": {
"default_icon": {
"16": "icons/icon16.png",
"32": "icons/icon32.png"
}
}
}Workflow
- Edit the source SVG only.
- Regenerate PNGs with:
bash
node scripts/export-icons.mjs- Reload the extension in
chrome://extensions. - Check the toolbar icon and the extension details page.
Design Rules
- Keep the icon square and centered.
- Avoid text unless it stays readable at
16x16. - Prefer a bold silhouette over thin detail.
- Use transparent padding only if you want store-safe breathing room.
- If the icon reads too small, scale the SVG art, not the PNG canvas.
Chrome Store Notes
- Chrome requires a
128x128icon in the manifest. - Chrome Web Store best practice is
96x96artwork inside128x128with transparent padding. - This repo currently uses a full-canvas
128x128treatment because it reads better in the toolbar and store preview.
Tooling
- Export script: scripts/export-icons.mjs
- Manifest examples:
Before You Commit
- Rebuild PNGs after SVG changes
- Verify
16x16and32x32still read clearly - Reload the unpacked extension and confirm Chrome picked up the new assets