If you’re adding icons to a Jetpack Compose app in 2025, here’s the simple rule: don’t use the old androidx.compose.material.icons artifacts. Do use the new Material Symbols as vector drawables. This keeps your app modern and often speeds up builds.
- The old Material Icons library is no longer maintained or recommended. It was also removed as a transitive dependency from the latest Material 3.
- Material Symbols are the new, updated icon set. Download them as Vector Drawable XML from Google Fonts → Android tab.
Why the change?
- Fresh look & more styles. Material Symbols are the modern replacement for the old Material Icons, with updated shapes and clear styles like Outlined, Rounded, and Sharp.
- Faster builds, smaller apps. The old library pulled in thousands of icons you didn’t need, which could increase build time. Symbols as per-file vectors avoid that bloat.
- Library no longer auto-added. Since Material 3 v1.4.0 (Sep 24, 2025),
material-icons-coreisn’t added for you—so relying on it silently is no longer an option.
The recommended way (super easy)
1) Download a Material Symbol as Vector Drawable XML
- Go to Google Fonts → Icons.
- Pick your icon and pick a style (Outlined / Rounded / Sharp).
- Click the Android tab and download the XML (Vector Drawable).
The Android docs explicitly recommend this approach for Compose.
2) Drop it into your project
Place the downloaded file in:app/src/main/res/drawable/your_icon.xml
3) Use it in Compose
@Composable
fun ToolbarIcon() {
Icon(
painter = painterResource(R.drawable.ic_home), // your XML file
contentDescription = "Home"
// tint defaults to LocalContentColor; override if needed:
// tint = MaterialTheme.colorScheme.onSurface
)
}
That’s it. No giant icon dependency, no waiting for library updates.
Quick migration tips (from Icons.Default.*)
Before (old library):
// Old: pulls icons from androidx.compose.material.icons
Icon(imageVector = Icons.Default.Search, contentDescription = "Search")
After (Material Symbols as Vector Drawable):
// New: use your downloaded vector drawable
Icon(painter = painterResource(R.drawable.ic_search), contentDescription = "Search")
Repeat for each icon you use. You control which icons land in your APK/AAB, and builds stay snappy.
“I can’t migrate today” — what are my options?
If you absolutely can’t migrate yet, you can manually add the old icons dependency yourself (it’s no longer added automatically by Material 3). Keep in mind it’s not maintained and not recommended going forward:
dependencies {
// Not recommended for new work
implementation("androidx.compose.material:material-icons-core:<version>")
implementation("androidx.compose.material:material-icons-extended:<version>")
}
Material 3 stopped auto-adding material-icons-core, so you must declare it explicitly if you rely on it. Plan to remove it soon.
Styling basics you’ll actually use
- Size:
Icondefaults to 24.dp (Material spec). UseModifier.size(…)to change. - Color: By default,
Icontints toLocalContentColor. Passtint = …to override.
All documented in the Compose Icons page.
Handy links
- Compose Icons documentation (official, updated Sep 25, 2025): why Symbols + how to use vectors.
- Material 3 release notes (Sep 24, 2025): removal of
material-icons-coreas a transitive dependency. - Google Fonts – Icons (Material Symbols): download XML from the Android tab.
- Material Symbols styles overview (Outlined/Rounded/Sharp).
Final word
Treat icons like any other asset: bring only what you need. Switching to Material Symbols as vector drawables gives you the latest look, fewer surprises, and often faster builds—with code that’s just as easy to read and maintain.

