FlutterIcon.com alternative
A FlutterIcon.com alternative for repeatable Flutter icon builds
FlutterIcon.com is convenient for choosing bundled icons and making occasional browser exports. GlyphPact is for SVG folders that change repeatedly, where codepoints, diagnostics, generated FlutterIconData, and CI checks must stay in the repository.

Short answer
Which workflow fits
Choose FlutterIcon.com when
- You want to browse and mix its bundled open-source icon packs.
- You have a small, occasional browser export.
- You can retain and restore the downloaded
config.json.
Choose GlyphPact when
- Your source of truth is a local, nested SVG directory.
- Another Figma delivery must not renumber existing icons.
- Unsupported SVG details need typed, reviewable diagnostics.
- CI or an MCP client must rebuild and check the same inputs.
What “convert to compound path manually” actually means
FlutterIcon.com may show this importer warning:
If image looks not as expected please convert to compound path manually. Skipped tags and attributes: ...
The warning is not proof that an SVG is invalid. A font ultimately needs glyph outlines, so expanding strokes and flattening artwork into paths can help when tags or attributes such as stroke andstroke-width cannot be translated. A single-colour icon font also cannot preserve arbitrary fill colours.
It is not a universal repair. A valid SVG can already contain one compound <path> whose holes depend onfill-rule="evenodd". For that case, test the generated font in Flutter rather than assuming that another path conversion will preserve the geometry.
Rendered evidence
Three valid even-odd SVGs in one Flutter app
This is a dated reproduction of three files, not a claim about every SVG or every FlutterIcon.com export.
| Icon | Original SVGExpected geometry | FlutterIcon.comGenerated TTF | GlyphPactGenerated OTF/CFF |
|---|---|---|---|
Location Boldfill-rule="evenodd" | Hole lost | Preserved | |
Chat Boldfill-rule="evenodd" | Dot lost | Preserved | |
Mail Boldfill-rule="evenodd" | Cutout lost | Preserved |
In this 2026-07-26 export, the FlutterIcon TTF lost the location pin’s center hole, the chat bubble’s third dot, and the envelope cutout. GlyphPact 1.0.1 preserved all three in the same Flutter application.
The sources are single compound paths withfill-rule="evenodd" andclip-rule="evenodd". The preserved FlutterIcon config contains normalized path data but no fill-rule field. In the generated TTF, those three subpaths rendered filled under the font’s winding. GlyphPact 1.0.1 classified all three as lossless and preserved the cutouts.
The screenshot labels the GlyphPact file “OpenType.” The exact outputs are FlutterIcon TTF with TrueType outlines and GlyphPact OTF with CFF outlines. TTF can also be an OpenType font, so the result does not show that one container format is inherently more faithful.
Open the deterministic 2x Flutter golden

Experiment record
Versions and artifact identity
- FlutterIcon.com
- Export downloaded 2026-07-26. No application version was present in the bundle. TTF SHA-256:
895a375775443487… - GlyphPact
- Version 1.0.1, strict build: 3 discovered, 3 lossless, 0 approximated, 0 skipped, 0 issues. OTF SHA-256:
26a6c71d001d303d… - Flutter toolchain
- Flutter 3.44.4 and Dart 3.12.2.
- Visual artifacts
- Responsive website table: exact SVGs and fonts. Deterministic Flutter golden: 1600 × 1280,
6b245024d7fa217a…. Cover: 2000 × 840,0660eb4340aed9c6…. Original 2x app capture:6eef4debc424f8a1….
Ongoing work
A browser export or a command the build can run
Hosted selection
Restore config.json, adjust the selection, export, unzip, and copy files into the project. A third-partyfontello-cli can automate part of the Fontello protocol, but FlutterIcon.com does not document a first-party local compiler or repository-native stale-output check.
Local compile
Add SVGs, run one command, and review the resulting provider, lock, report, and font. The same config can run on a developer machine, in CI, or through the local MCP server.
glyphpact assets/icons \ --output lib/generated/app_icons \ --name AppIcons
Both can preserve codepoints, under different conditions
FlutterIcon.com’s downloaded config.json records a code for each glyph. Re-importing that file preserves those assignments. Starting another browser selection without the previous config removes that history.
GlyphPact writes the history to iconfont.lock.json in the generated output, reads it automatically, tombstones deleted values, and lets --check fail CI when the committed artifacts no longer match the sources.
Side by side
The broader comparison
| GlyphPactLocal CLI compiler | FlutterIcon.comHosted Fontello fork | icon_font_generatorDart CLI | |
|---|---|---|---|
| Existing codepoints survive a pack changeIf an assignment moves, shipped application code renders the wrong glyph. | Supported: Committed lock file`iconfont.lock.json` is generated into the output tree and read on every later build. Removed icons leave a tombstone in `retired` instead of freeing the codepoint. | Conditional: If you re-import config.jsonInherits the Fontello session model, where the downloaded `config.json` records each glyph code and can be imported again. Stability depends on retaining and re-importing that file. | Not documented: No documented mechanismNeither the pub.dev page nor the README documents a lock file or persistence mechanism. Published examples show codepoints running sequentially from `0xe000` in glyph order. |
| CI can prove committed output is currentGenerated artifacts drift from sources silently unless something fails the build. | Supported: `--check` exits 3 when staleRebuilds a candidate artifact set and compares it without rewriting the owned output tree. Verified: exit 0 on current output, exit 3 after a source edit. | Not supported: No first-party staleness checkThe third-party `fontello-cli` can install a config against a host, but neither it nor the site offers a check that fails on stale committed output. | Not supported: Not offeredThe CLI generates output. No check or verify mode is documented. |
| Runs entirely on your machineUnreleased or licensed artwork often cannot leave the building. | Supported: Local CLI, no network stepA Python command-line compiler. No website step, no project service, no server that receives artwork. | Not supported: Hosted service sessionA hosted web application in the Fontello lineage, where the font configuration is posted to the service and held in a server-side session. | Supported: Local CLIRuns locally. Described as written fully in Dart with no external dependency. |
| Byte-identical rebuildsNon-reproducible artifacts turn every rebuild into an unreviewable diff. | Supported: Same bytes across worker countsSame inputs, config, lock, and compiler version produce byte-identical artifacts. Verified: identical SHA-256 across default, 1, and 4 worker processes. | Not documented: Not documented | Not documented: Not documented |
| Explicit policy for SVG a font cannot holdAn icon font stores monochrome coverage. Something has to decide what happens to a blur or a half-transparent fill. | Supported: Two policy axes, both strict by default`lossy` and `unrepresentable` each default to `error`. Approximations and omissions require explicit opt-in and are reported as typed, coded issues. | Not documented: No published policy | Not documented: No published policyExposes `--[no-]normalize` and `--[no-]ignore-shapes` flags, but documents no classification of unsupported input. |
| Generates a Flutter IconData APIHand-written IconData constants are the place codepoint drift actually bites. | Supported: Const provider plus optional catalogEmits a tree-shakeable `@staticIconProvider` class, optional same-file name-keyed enumeration, `fontPackage` handling, and layered-icon widgets. | Supported: Dart icon classPurpose-built for Flutter: exports a font plus a Dart icon class. | Supported: Dart icon classGenerates an OTF font and a Flutter-compatible class. |
| Web assets: WOFF2 and CSSThe honest place GlyphPact is behind. If you need a web icon font today, these tools already do it. | Not supported: OpenType/CFF onlyEmits a `.otf` font and the lock registry. No WOFF, no WOFF2, no generated CSS. Web use means converting the font and writing the CSS yourself. | Supported: Web font packFontello lineage produces web font formats alongside the Flutter output. | Not supported: OTF only |
| Generates an attribution recordThird-party icon licences usually require attribution, and audits ask for it. | Supported: `ATTRIBUTION.md` per buildCarries declared author, licence, and source URL per glyph, and counts emitted icons with no declared provenance. It does not verify ownership. | Conditional: Bundled-pack licencesShips licence information for the open-source packs it bundles. Not an attribution file generated from your own artwork metadata. | Not supported: Not offered |
| Required runtimeA toolchain you do not already run is a toolchain you have to maintain. | Supported: Python 3.10+Dart 3+ only to consume the generated provider. | Supported: A browserOptional third-party CLI needs Node. | Supported: Dart |
| Coding-agent integrationIcon work is increasingly delegated, and an agent needs typed results rather than screenshots. | Supported: Local stdio MCP serverClaude Code and Codex can install the full plugin. Other stdio MCP clients can configure the published server directly. It exposes four tools plus the config, report, and inner CLI-result schemas. | Not supported: Not offered | Not supported: Not offered |
Try locally
Compile a pack you already have
uv tool install glyphpactInstalls the latest stable release from PyPI, currently v1.1.0. Already installed? Run uv tool upgrade glyphpact. Release notes.
Workflow comparison verified on 2026-07-27against FlutterIcon.com,polyicon,Fontello, andicon_font_generator. The visual experiment remains separately dated 2026-07-26.