skribble_icons_material

Hand-drawn versions of the full Flutter Material icon set.

Ships precomputed rough geometry for all 8,600+ Material icon codepoints plus a generated icon font. Because the geometry is already warped, rendering never runs the rough engine.

This catalog used to live inside the core skribble package. It moved here so that apps which do not render Material icons no longer download it — skribble dropped from roughly 31 MiB compressed to about 1.5 MiB.

Installation

dart pub add skribble_icons_material

To pull in every skribble icon set at once, use skribble_icons instead.

Usage

Register the catalog once during startup so WiredIcon draws hand-drawn shapes instead of the Material font glyph:

import 'package:skribble_icons_material/skribble_icons_material.dart';

void main() {
  registerSkribbleMaterialIcons();
  runApp(const MyApp());
}

Then either resolve an IconData:

WiredIcon(icon: Icons.search, size: 32)

or look up an identifier directly, which needs no registration:

final data = lookupMaterialRoughIconByIdentifier('search');

Why registration is explicit

WiredIcon lives in the core skribble package, which must not depend on an icon set. It resolves IconData through a catalog that a set registers at startup. Without a registration it falls back to Flutter's ordinary Icon, so forgetting the call degrades to a plain glyph rather than crashing.

Exports

Export Type Description
registerSkribbleMaterialIcons void Function() Installs the catalog for WiredIcon.
lookupMaterialRoughIconByIdentifier WiredSvgIconData? Function Geometry for a Material identifier.
kMaterialRoughIcons Map<int, WiredSvgIconData> Geometry keyed by codepoint.
kMaterialRoughIconsCodePoints Map<String, int> Identifiers to codepoints, including aliases.
kMaterialRoughIconsFontFamily String Family name of the generated icon font.
lookupMaterialRoughIconsIconData IconData? Function Font-backed IconData for an identifier.

WiredBrandIcon (GitHub, Dart, Flutter, and Figma marks) ships in the core skribble package, because it is project branding rather than an icon set.

Regenerating

The catalog comes from the Flutter SDK's own icon declarations, resolved against upstream Material SVG packages. Regenerating needs Deno and a Chromium binary, which the pipeline drives through svg2roughjs:

melos run rough-icons          # rough SVG output only
melos run rough-icons-font     # SVG + TTF font + Dart helpers
melos run rough-icons-baseline # refresh the unresolved-codepoint baseline
melos run rough-icons-ci-check # the same regression gates CI enforces

See docs/rough-icon-pipeline.md for the full option list, the supplemental manifest used for upstream gaps, and the unresolved-regression gates.

Attribution

Material icon artwork is Apache-2.0, copyright Google LLC. The generated font and geometry are derivatives and retain that license.

License

skribble is licensed under the root repository's LICENSE. The icon artwork in this package is Apache-2.0.

Provenance

This catalog is generated, never hand-edited. The table records exactly what it was built from. Bumping a value means editing tool/asset_sources.txt in the same commit as the regenerated catalog.

Field Value
Icon declarations Flutter SDK 3.47.0 (material/icons.dart)
Outline SVGs @material-design-icons/svg
Symbol SVGs @material-symbols/svg-400
Brand fallback simple-icons
Upstream gaps packages/skribble/tool/examples/material_rough_icons.supplemental.manifest.json
Regression baseline packages/skribble/tool/examples/material_rough_icons.unresolved-baseline.json
Rough engine svg2roughjs via Deno, seed 1337 + codepoint
License Apache-2.0
Generator melos run rough-icons-font
Registry tool/asset_sources.txt

Generation is deterministic: rebuilding from the same source bytes reproduces this catalog byte for byte. CI re-derives every catalog and fails on any diff, so an upstream change can never land silently.

Libraries

skribble_icons_material
Hand-drawn Material icon catalog for skribble.