icon-system-builder

Builds a Figma Icons page of named, scalable icon components from Lucide, Tabler, Phosphor, Material, or custom SVGs.

77|11|Updated Jun 2, 2026
One-click install
npx skills add https://github.com/jrpease/throughline --skill icon-system-builder-jrpease
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: icon-system-builder
Source: https://github.com/jrpease/throughline/tree/main/skills/icon-system-builder
Command: npx skills add https://github.com/jrpease/throughline --skill icon-system-builder-jrpease

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Setting up an icon system in Figma is slow and error-prone: hand-drawing icons wastes effort, importing entire 1,700-icon libraries bloats the file, and inconsistent naming silently breaks the mapping between Figma components and code packages like lucide-react. This Skill automates the whole process with a deterministic mechanism per library. ## Core Features & Use Cases - Deterministic per-library import: Fetches official SVGs directly from the Lucide, Tabler, or Phosphor repos by deterministic path and converts them to components via figma.createNodeFromSvg; uses the official community file or importer for Material; batch-imports custom SVGs. - Curated subset with name validation: Imports only the 40-120 icons actually needed, validating every name against the installed library version so Figma names map exactly to code exports (e.g. icon/arrow-right ↔ ArrowRight). - Normalized output and handoff: Lays icons out in an auto-layout grid on a dedicated Icons page, binds strokes to color tokens, optionally installs the matching npm package, and walks through Figma library publishing for typed icon dropdowns. - Use Case: A designer starting a new design system asks for a Lucide icon set; the Skill fetches the pinned release's SVGs, builds named components bound to the text/primary token, and records the version so the sync layer can later detect drift between Figma and code. ## Quick Start Set up a Lucide icon system in my Figma file with the essential UI icons, named to match lucide-react.

Frequently Asked Questions about icon-system-builder

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I import Lucide icons into Figma as components?

Fetch the official SVGs directly from the lucide-icons GitHub repo at a pinned release tag, then convert each to a component with figma.createNodeFromSvg in one scripted pass. This keeps names identical to lucide-react exports and needs no manual copying.

Lucide vs Material icons for a Figma design system?

Lucide offers uniform 24px outline SVGs fetchable per-icon from its repo, making fully automated import the default. Material Symbols has variant axes (outlined/rounded/sharp, fill, weight), so the official community file or importer plugin is the cleaner path.

Should I import the entire icon library into Figma?

No. Most projects need only 40-120 icons, and importing 1,700+ bloats the file and hurts performance. Start with a curated UI-essentials subset, validate each name against the installed library version, and re-run later to add more.

Why do Figma icon names need to match the code package?

The Figma component name maps deterministically to the code export (icon/arrow-right ↔ ArrowRight in lucide-react). If names drift or reference icons removed in a library version, components silently show different icons in Figma versus code.

Can I use custom SVG icons alongside a library like Lucide?

Yes. Custom SVGs are batch-imported and componentized onto the same Icons page with the same naming contract. Since no npm package exists for them, the sync layer later converts them to code through its SVGR pipeline.

Do I need a paid Figma plan for icon components?

No. The Icons page works fully on a free plan. Publishing to a team library (paid plans) only unlocks typed icon dropdowns via INSTANCE_SWAP in components; otherwise a toggle plus manual-swap fallback is used.