Visitar URL original
[FEATURE REQUEST]: build the icon font locally instead of through icomoon.io · Issue #2814 · devicons/devicon · GitHub
Skip to content

[FEATURE REQUEST]: build the icon font locally instead of through icomoon.io #2814

Open

Description

@Snailedlt

Prepared by Claude (an AI assistant) on behalf of @Snailedlt.

I have searched through the issues and didn't find my problem.

  • Confirm

Description

Build the icon font (fonts/devicon.{ttf,woff,eot,svg}) and the peek previews with a local, scripted tool instead of driving the icomoon.io web app with Selenium and Firefox.

Context

Today both the font build and the Peek Bot open icomoon.io in a headless Firefox (Selenium 4.1.0 with a committed geckodriver binary). They upload icomoon.json and the SVGs, click through the UI, and download a zip. This is:

  • Unreliable: 7 of the last 10 runs of the build workflow failed (since March 2026), and 29 of the 69 Peek Bot runs that weren't skipped failed. Most failures are timeouts or a changed page, not bad icons.
  • Slow: every build installs Python packages and Firefox and waits on the website.
  • Fragile: any UI change on icomoon.io breaks our build, and we can't test the build locally without the same browser setup.
  • Hard to review: what icomoon.io does to an SVG (path conversion, fill-rule, scaling) isn't visible in our code.

Possible Solution

Generate the font from the SVGs in Node, e.g. with svgtofont / fantasticon, or with the lower-level chain they use (svgicons2svgfont → svg2ttf → ttf2woff / ttf2eot).

Requirements:

  • Keep every existing codepoint. Read the glyph codes from icomoon.json (or a smaller codepoints file generated from it once), and give new glyphs the next free code, like icomoon.io does now. Users' CSS depends on these codes.
  • Produce the same font files and names, so devicon.min.css and the CDN paths don't change.
  • Render each glyph the way icomoon.io does now: same em size, baseline and scaling. Compare the old and new fonts glyph by glyph (rendered PNG diffs) before switching.
  • The Peek Bot preview can come from the same local build (render the new glyphs to PNG), so the peek no longer needs Selenium either.

Once this works, icomoon.json, Selenium, geckodriver and Firefox can be removed from the workflows, and the weekly build becomes a normal npm script anyone can run locally.

Additional information

This is planned for after the trunk-based development migration. Until then, the weekly build retries a failed icomoon.io build twice before opening a "build failed" issue.

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions