Skip to content
GlyphPact
Menu

IcoMoon alternative

An IcoMoon alternative for repository-managed Flutter icons

IcoMoon’s current app already imports folders, works offline, edits glyphs visually, and exports a Dart class for Flutter. GlyphPact is for a different boundary: SVG sources, codepoint history, generated artifacts, typed reports, and a CI check kept together in the repository.

Operating modelVisual project or repository contract
IcoMoon
  1. Offline-first app
  2. icomoon.json
  3. Export pack

Visual project workflow

GlyphPact
  1. SVG directory
  2. Committed lock
  3. CI check

Repository build workflow

Short answer

Choose by the work that must be repeatable

Choose IcoMoon when

  • You want to inspect, edit, align, and curate glyphs visually.
  • You need web fonts, CSS, SVG exports, or other broad formats.
  • You want an offline-first browser app and saved visual projects.
  • You want Flutter output without adding a Python CLI toolchain.

Choose GlyphPact when

  • The SVG folder is already part of the repository.
  • Existing IconData codepoints must survive every later batch.
  • CI must fail when committed output is stale.
  • An agent or script needs typed audit and build results.

What the current IcoMoon app already does

Comparisons based on the old IcoMoon app are now misleading. The current app is an offline-first progressive web app. It can import files and folders, generate a Dart class for Flutter, edit vectors, and handle strokes, masks, clip paths, gradients, and even-odd geometry more fully during import.

Its current project format is icomoon.json.selection.json belongs to the old app. The current app also offers Replace by Matching Names so revised artwork can keep the matching glyph’s metadata.

Privacy and offline use are not reasons to reject IcoMoon. The relevant difference is whether the pipeline is a visual project a person exports or a compiler contract that a repository can verify.

The repository contract is the differentiator

GlyphPact writes iconfont.lock.json beside the generated font and Dart provider. Existing assignments are reused automatically. Removed icons become permanent tombstones, and a content-preserving rename retains the original identity.

IcoMoon can preserve codes when its project file is retained and its matching-name workflow is used correctly. GlyphPact makes that state a normal reviewed file, then adds a first-party staleness check:

CI or local verificationexit 3 = stale
glyphpact --config icon_font.json --check

IcoMoon’s current documentation does not describe a repository-native command that compares committed output with sources and fails CI when they differ. GlyphPact’s --check exists specifically for that case.

See how codepoints stay fixed as new Flutter icons arrive.

Where IcoMoon remains the broader tool

IcoMoon has a visual editor and broader export surface. It generates web font packs and CSS, and offers formats GlyphPact does not. GlyphPact emits an OpenType/CFF font, a lock, a report, attribution, and a Dart provider. It does not generate WOFF2, CSS, React, or Vue output.

If the main task is drawing, visually normalizing, or exporting for the web, use IcoMoon. If the task is compiling an existing SVG pack for Flutter with reviewable state and CI enforcement, GlyphPact is the narrower fit.

Side by side

Current capabilities, without the old-app myths

GlyphPact v1.1.0 and the current IcoMoon app, verified against first-party documentation.
GlyphPactLocal CLI compilerIcoMoonOffline-first browser app
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: Project file plus matching-name replacementThe current app stores its project in `icomoon.json`. Its Replace by Matching Names workflow can update matching glyphs without changing their metadata. Stability depends on retaining the project and using that workflow correctly.
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 documented: No documented repository staleness checkCurrent first-party documentation describes an offline-first browser app, project files, and exports. It does not document a command that compares committed output with sources and fails CI when they differ.
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.Supported: Offline-first PWAThe current app is documented as an offline-first progressive web app. Imported files and generated assets are processed locally unless the user opts into account-backed project storage.
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
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: Import support, no typed build policyThe current app documents broader import support, including strokes and even-odd geometry without manual conversion. It does not publish GlyphPact-style lossless, lossy, and unrepresentable build outcomes with coded report entries.
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 class for FlutterThe current IcoMoon app exports a Dart class for Flutter.
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: Fonts plus CSSDocumented export targets include a web font pack and further asset types.
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.Not documented: Not documented
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 browser
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
Verified on 2026-07-27.Checked against current first-party documentation and, for GlyphPact, against observed output. Sources:GlyphPact README, SVG profile; IcoMoon IcoMoon docs, Flutter and Dart update.Behaviour changes. If a cell has gone out of date, it is worth reporting.

The tools can share a workflow

Use IcoMoon for visual curation when that editor helps, export the SVG sources, and make those sources the input to a checked-in GlyphPact config. The design task stays visual. The Flutter build becomes local, deterministic, and reviewable.

Follow the bulk SVG-to-Flutter icon workflow.

Try locally

Point GlyphPact at an SVG folder

uv tool install glyphpact

Installs the latest stable release from PyPI, currently v1.1.0. Already installed? Run uv tool upgrade glyphpact. Release notes.

IcoMoon behaviour verified on 2026-07-27against current IcoMoon docs, the current app overview, andIcoMoon’s Flutter and Dart announcement. This page should be corrected when the product changes.

FAQ

Questions about the comparison

Does GlyphPact work offline?

Yes. GlyphPact is a command-line compiler that runs locally. Compiling a pack involves no network access: there is no website step, no project service, and no server that receives your artwork. Installation itself needs the network once, to fetch the package.

Does GlyphPact upload my SVG files anywhere?

No. Source SVGs are read from disk and all compilation happens in the local process. Nothing is transmitted, so unreleased or licence-restricted artwork never leaves the machine or the build runner.

Is GlyphPact an IcoMoon alternative?

Yes, when the requirement is a repository-managed Flutter icon pipeline. Both tools import SVG folders, run locally or offline, and can generate Flutter output.

IcoMoon is stronger for visual editing, bundled libraries, and broad output formats. Its current app exports a Dart class for Flutter, imports files and folders, and can replace glyphs by matching names while retaining their metadata.

GlyphPact is different at the build boundary. It provides a first-party local compiler, a committed codepoint lock with permanent tombstones, typed SVG audit results, byte-identical rebuilds, and a --check command that fails CI when generated output is stale.

Full IcoMoon comparison

Does IcoMoon change codepoints when you add icons?

IcoMoon can preserve existing codepoints. Its current app stores a project in icomoon.json and offers Replace by Matching Names so updated artwork can keep the matching glyph metadata. The older app used selection.json.

That stability depends on retaining and restoring the project, then using the matching-name update workflow correctly. GlyphPact stores the mapping in iconfont.lock.json inside the generated output and reads it automatically on every build.

GlyphPact addresses the same problem differently: the codepoint registry is a file inside the repository, and a --check run in CI fails when committed output no longer matches its sources.