Files
amethyst/tools/material-symbols-subset/README.md
T
Claude 19588be84b build(perf): trim build outputs for hooks, CI, and the shipped font
Headline numbers from a fresh `./gradlew assemble`:
- :commons material_symbols_outlined.ttf 11M -> 409K (subset to the 210
  codepoints actually referenced from MaterialSymbols.kt)
- :amethyst per-ABI APKs no longer built in CI (-PdisableAbiSplits=true);
  ~600M of stripped_native_libs intermediates skipped per run

Changes:
- .git-hooks/pre-push runs only :amethyst:testPlayDebugUnitTest plus jvmTest
  on the KMP modules instead of `./gradlew test`, which was compiling all six
  amethyst variants (play/fdroid x debug/release/benchmark)
- amethyst/build.gradle adds three opt-in fast-build flags:
    -PdisableAbiSplits=true       skip per-ABI APK splits
    -PdisableUniversalApk=true    skip the universal APK output
    -Pamethyst.skipMapping=true   disable R8 (release+benchmark)
  Defaults are unchanged; release pipelines must not set skipMapping.
- .github/workflows/build.yml uses gradle/actions/setup-gradle@v4 with
  cache-read-only on PRs / cache-write on main, drops --no-daemon, collapses
  the Android job to a single Gradle invocation (lint + focused debug unit
  tests + assembleBenchmark with -PdisableAbiSplits=true), and globs both
  APK naming patterns for the upload step.
- tools/material-symbols-subset/{subset.sh,README.md} regenerates the font
  from upstream + MaterialSymbols.kt; run after adding/removing icons.

Verified: ./gradlew :amethyst:help with all three new -P flags parses cleanly,
and ./gradlew :commons:jvmJar --rerun-tasks succeeds with the subsetted font
(commons-jvm jar shrinks from ~13M to 2.9M).

https://claude.ai/code/session_01YSmkagXXN5AwGcY4upiUh1
2026-05-05 22:49:43 +00:00

1.6 KiB

Material Symbols Subset

The font shipped at commons/src/commonMain/composeResources/font/material_symbols_outlined.ttf is a subset of Google's Material Symbols Outlined variable font, trimmed to only the codepoints referenced from commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/icons/symbols/MaterialSymbols.kt.

Full upstream Subset
Size ~11 MB ~410 KB
Glyphs ~3500 ~210

The subset cuts >10 MB out of every commons build artifact, every Android APK, and every Desktop app bundle.

When to regenerate

Run subset.sh whenever you:

  • add or remove a MaterialSymbol("\uXXXX") entry in MaterialSymbols.kt
  • pin a newer upstream font version

Prerequisites

pip install fonttools brotli

Regenerating

From the repo root:

./tools/material-symbols-subset/subset.sh

That downloads the upstream variable font, intersects its codepoints with the ones referenced from MaterialSymbols.kt, and overwrites the checked-in material_symbols_outlined.ttf.

If you already have an upstream .ttf on disk:

./tools/material-symbols-subset/subset.sh /path/to/MaterialSymbolsOutlined-Regular.ttf

Commit the regenerated .ttf alongside the MaterialSymbols.kt change.

How it works

pyftsubset (from fonttools) reads the codepoints we care about, drops every glyph and OpenType feature not reachable from those codepoints, and rewrites name, cmap, and GSUB tables accordingly. The Compose resource pipeline treats the result as a normal TTF — no code changes needed.