mikepenz/Android-Iconics
63.4
Adequate · 25 September 2026
37.2k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This system is an Android library framework for rendering font-based icons, providing a unified API to integrate various icon sets like FontAwesome, Google Material, and Community Material into Android applications. It supports both traditional View-based widgets and modern Jetpack Compose UIs, handling icon rendering, styling, and animation through dedicated modules. The project is currently in maintenance mode, focusing on critical fixes, build tooling updates, and migration guides rather than new feature development.
How it got here
2014 — maintenance mode and legacy cleanup
10 changes.
The project entered maintenance mode, shifting focus from new features to repository stability and developer tooling. Significant legacy code, including old sample apps, bundled fonts, and deprecated rendering classes, was removed to streamline the codebase. The period also involved updating build configurations for modern Android standards and adding utilities for font extraction.
2015–2017 — Jetpack Startup migration and new icon libraries
10 changes.
The project modernized its initialization strategy by migrating all typeface libraries from legacy ContentProviders to Jetpack App Startup, improving startup performance and compatibility. Concurrently, several new icon libraries were added, including Community Material, Weather, Foundation, and Pixeden 7 Stroke, each integrated with automatic registration and ProGuard rules.
2019–2020 — Compose integration and modernization
15 changes.
The project expanded its ecosystem by adding new icon libraries and introducing Jetpack Compose support through a dedicated module. It modernized the core architecture by migrating all typeface libraries to AndroidX Startup for reliable initialization and refactoring the view system into a new Kotlin-based module.
2022–2025 — Typeface library integration and build standardization
4 changes.
This period focused on integrating external icon typeface libraries, specifically Simple-Icons and Google Material Symbols, into the Android application using the Iconics framework. Concurrently, the project standardized its build environment by enforcing Java 17 across Kotlin modules and isolating Ruby gem dependencies within the vendor directory.
Features
Add Community Material Design icon library and ProGuard rules
This change introduces the Community Material Design icon typeface library, providing a comprehensive set of Material Design icons for use in the application. To ensure compatibility with Android's code shrinking and obfuscation tools, consumer ProGuard rules are included to preserve the icon class, and a Go script is added to automate the export of icon data from the source JSON.
community-material-typeface-library · high confidence
Add Compose integration for displaying Iconics icons
The iconics-compose module now provides a new \Image\ composable and \IconicsPainter\ that allow developers to render Iconics font icons directly within Jetpack Compose UIs. The \Image\ composable accepts an \IIcon\ asset and supports standard Compose modifiers for sizing, alignment, and scaling, while \IconicsPainter\ handles the actual drawing logic, including support for custom colors, alpha, color filters, and configurable padding or offset adjustments via \IconicsConfig\.
iconics-compose · high confidence
Add Google Material Symbols Outlined typeface library
This change introduces a new Android library module providing the Google Material Symbols Outlined typeface (version 0.39.3). It includes the font file, a Kotlin implementation of the Iconics typeface interface, and an AndroidX Startup initializer to automatically register the font with the Iconics framework. A ProGuard rule is also added to preserve the typeface class during obfuscation.
material-symbols-typeface/material-symbols-typeface-outlined-library · high confidence
Add Material Design DX typeface library
The Material Design DX typeface library (version 5.0.1) is now available for use within the Iconics framework. This addition includes the full set of Material Design DX icons, configured for automatic initialization via Jetpack App Startup, and comes with the necessary ProGuard rules, AndroidManifest provider registration, and license metadata to integrate seamlessly into applications.
material-design-dx-typeface-library · high confidence
Add Phosphor Icons typeface library
The application now includes the Phosphor Icons font family (version 1.0.0) as a new icon source. This update adds the necessary library components, including the Kotlin-based typeface implementation, Android manifest initialization, and ProGuard rules, allowing users to access Phosphor's icon set within the app's UI.
phosphor-typeface-library · high confidence
Add Pixeden 7 Stroke icon font support
This change introduces the Pixeden 7 Stroke icon font to the library, making these iOS 7-inspired vector icons available for use. The implementation registers the font via Jetpack App Startup for automatic initialization and includes the necessary ProGuard rules to ensure the font classes are preserved during code shrinking.
pixeden-7-stroke-typeface-library · high confidence
Add Simple-Icons typeface library (v17.0.0)
This location introduces the Simple-Icons typeface library, providing a font containing icons for popular brands (version 17.0.0). The change adds the necessary Android components to integrate this library, including a ProGuard rule to preserve the \SimpleIcons\ class, an \AndroidManifest.xml\ registering an \androidx.startup.Initializer\ for automatic initialization, and Kotlin source files (\Initializer.kt\, \SimpleIcons.kt\) that define the icon set and register it with the Iconics framework. It also includes resource definitions (\font\_description.xml\) describing the library's metadata.
simple-icons-typeface-library · high confidence
Foundation Icons typeface library added
The Foundation Icons typeface library (v3.0.0.1) is now available as a dependency. It provides a set of 283 icons from ZURB Inc. under the MIT license. The library uses Jetpack App Startup for automatic initialization and includes ProGuard rules to ensure the icon classes are preserved during minification.
foundation-icons-typeface-library · high confidence
Initial release of the Weather Icons typeface library
This change introduces the Weather Icons typeface library (version 2.0.10) to the project, providing 222 weather-themed icons for use in Android applications. The library is implemented as a Kotlin object and utilizes Jetpack App Startup for automatic initialization, ensuring the font is registered without requiring manual setup or legacy content providers. It includes necessary ProGuard rules and resource definitions to integrate seamlessly with the existing iconics framework.
weather-icons-typeface-library · high confidence
Initial release of the iconics-typeface-api module
This change introduces the new \iconics-typeface-api\ module, which provides the core typeface and icon interfaces (\ITypeface\, \IIcon\) for the library. It includes the \IconicsHolder\ singleton for managing registered fonts and application context, an \IconicsInitializer\ for automatic setup via AndroidX Startup, and utility classes like \IconicsPreconditions\ to enforce font mapping prefix rules. The \IIcon\ interface is marked as \Immutable\ to support Compose runtime optimizations.
iconics-typeface-api · high confidence
Introduction of iconics-views module with Kotlin-based icon-aware Android widgets
The iconics-views module is introduced, providing a suite of Android view extensions (IconicsImageView, IconicsTextView, IconicsButton, IconicsCheckBox, IconicsCheckableTextView, IconicsCompoundButton, and IconicsImageButton) that integrate with the Iconics library. These views, implemented in Kotlin, allow developers to apply icon drawables to standard UI components via XML attributes (defined in attrs.xml) and code, supporting compound drawables (start, top, end, bottom), checked/unchecked states, and various styling options like colors, sizes, and shadows. The module includes internal logic for attribute parsing, icon bundling, and state management, along with a ProGuard rules file and a basic AndroidManifest.
iconics-views · high confidence
New Outlined, Rounded, and Sharp icon variants added
The library now includes three new icon style variants—Outlined, Rounded, and Sharp—allowing users to select the specific visual style of Google Material Design icons they prefer. Each variant is provided as a separate module with its own typeface implementation (e.g., OutlinedGoogleMaterial, RoundedGoogleMaterial, SharpGoogleMaterial) and automatic initialization via androidx.startup, making them available for immediate use alongside the existing standard icons.
google-material-typeface/google-material-typeface-outlined-library, google-material-typeface/google-material-typeface-rounded-library, google-material-typeface/google-material-typeface-sharp-library · high confidence
New font icon extraction utilities added
Added a JavaScript script (extract.js) and a CSS test file (test.css) to extract icon mappings from Fontello-style font files, and moved the existing Font Awesome extraction logic into a separate directory (DEV/fa-extractor) with a new shell script (fontawesome\_extractor.sh) that fetches and parses the Font Awesome cheatsheet.
DEV/extractor · high confidence
Removals
Removal of bundled font implementations and interface
The bundled typeface implementations for CustomFont and FontAwesome, along with the ITypeface interface, have been removed from the library. This eliminates the built-in support for these specific icon sets and their underlying font files, meaning users can no longer access these icons directly through the library's default typeface providers.
app/src/main/java/com/mikpenz/iconics/sample/typeface, library/src/main/java/com/mikpenz/iconics/typeface · high confidence
Removal of legacy Iconics and IconicsDrawable classes
The \Iconics\ utility class and the \IconicsDrawable\ class have been removed from the library. This eliminates the previous implementation that handled icon rendering via \SpannableString\ styling for text views and a custom \Drawable\ for image-based icon usage, effectively breaking any direct API dependency on these specific classes in favor of newer alternatives.
library/src/main/java/com/mikpenz/iconics · high confidence
Removal of legacy iconics utility classes
The \IconicsTypefaceSpan\ and \Utils\ classes in the \com.mikpenz.iconics.utils\ package have been removed. This eliminates the custom \TypefaceSpan\ implementation that previously handled font styling via fake bold/italic flags and removes the utility methods for converting density-independent pixels to pixels, checking view states, and extracting icon font resources to the local file system. Users relying on these specific internal utilities for custom text rendering or resource extraction will need to adopt the library's current public API.
library/src/main/java/com/mikpenz/iconics/utils · high confidence
Removal of legacy sample application components
The sample application's legacy UI and setup code has been removed, specifically deleting the CustomApplication class (which previously registered fonts via code), the MainActivity and PlaygroundActivity screens, and the IconAdapter. This eliminates the manual font registration and the previous RecyclerView-based icon browsing interface from the sample app.
app/src/main/java/com/mikpenz/iconics/sample · high confidence
Behavioural changes
1 commit (0 fixes) modifying DEV/icon
A change to existing behaviour in DEV/icon — 1 commit, 7 files.
DEV/icon · medium confidence · unverified
Added ProGuard configuration for Octicons library
The Octicons typeface library now includes consumer ProGuard rules to ensure the icon class is preserved during code shrinking. This prevents issues where the icon font might be stripped or obfuscated in release builds, ensuring icons display correctly for end users.
octicons-typeface-library · high confidence
Added ProGuard rules for FontAwesome library
The FontAwesome typeface library now includes a consumer ProGuard rules file to ensure the main FontAwesome class is preserved during code shrinking, preventing potential runtime issues for applications using the library. A separate project-specific ProGuard rules file is also added for local configuration needs.
fontawesome-typeface-library, meteocons-typeface-library · high confidence
Configured Bundler to install gems in vendor/bundle
A new .bundle/config file has been added to the project, setting the BUNDLE\_PATH to "vendor/bundle". This change ensures that Ruby gem dependencies are installed locally within the project's vendor directory rather than the system-wide or user-wide gem path, which helps isolate dependencies and keeps the repository's environment self-contained.
.bundle · high confidence
Entypo font library now initializes automatically via Jetpack App Startup
The Entypo typeface library has been updated to version 1.0.0.1 and now uses Jetpack App Startup for automatic initialization, replacing the previous ContentProvider-based approach. This change ensures the font is registered with the Iconics framework without requiring manual setup or reflection, while also adding ProGuard rules to prevent obfuscation of the Entypo class and including metadata for aboutLibraries support.
entypo-typeface-library · high confidence
FontAwesome updated to v5.13.3 with split typefaces
The FontAwesome typeface library has been updated to version 5.13.3. To align with Font Awesome's structure, the icons are now distributed across three distinct typeface objects: FontAwesome (Solid, prefix 'faw'), FontAwesomeRegular (Regular, prefix 'far'), and FontAwesomeBrand (Brands, prefix 'fab'). An AndroidX Startup Initializer has been added to automatically register these three typefaces with the Iconics framework upon application initialization.
fontawesome-typeface-library/src/main/java · high confidence
Google Material Design Icons updated to v4 with new style variants
The Google Material icon set has been upgraded to version 4.0.0.0, introducing rounded, sharp, and outlined style variants alongside the existing filled icons. This update refreshes the icon library to align with the latest Material Design guidelines, providing users with a broader range of visual styles for their applications.
google-material-typeface/google-material-typeface-library · high confidence
Iconics-core library initialization and core drawable logic
The iconics-core module now includes its own AndroidManifest.xml which registers androidx.startup.InitializationProvider for animation processors (SpinProcessor, BlinkAlphaProcessor, BlinkScaleProcessor), ensuring they are initialized automatically. The core Iconics object provides a new respectFontBoundsDefault flag to control icon bounds handling globally, and logs a warning if no fonts are registered during init. IconicsDrawable and its supporting classes (IconicsBrush, IconicsColor, IconicsSize) are present to handle icon rendering, color state lists, and size extraction, while the animation subsystem (IconicsAnimatedDrawable, IconicsAnimationProcessor, and specific processors) enables animated icons with pause/resume and listener support.
iconics-core · high confidence
Ionicons typeface library now initializes automatically via Jetpack App Startup
The Ionicons font addon has been updated to use Jetpack App Startup for automatic initialization, replacing the previous ContentProvider-based approach. This change ensures the Ionicons typeface is registered with the Iconics framework without requiring manual setup or explicit provider configuration in the host application. The library now includes a dedicated Initializer class and corresponding AndroidManifest entry to handle this registration seamlessly.
devicon-typeface-library, ionicons-typeface-library · high confidence
Java 17 toolchain and JVM target enforced for Kotlin modules
A new Gradle convention plugin (gradle/compile.groovy) has been introduced to standardize the build environment. This change enforces Java 17 as both the source and target compatibility for Java code and sets the JVM target to 17 for Kotlin compilation, ensuring consistent runtime behavior and access to newer language features across all modules.
gradle · high confidence
Material Design Iconic font library updated to v2.2.0 with Jetpack Startup initialization
The Material Design Iconic font addon has been upgraded to version 2.2.0, introducing a new icon set with the 'gmi' prefix (e.g., gmi\_home) and requiring the androidx.startup library for automatic initialization. This change replaces the previous ContentProvider-based registration with a modern Initializer approach, ensuring fonts are registered automatically upon app startup without manual configuration, while also adding ProGuard rules to preserve the library classes.
material-design-iconic-typeface-library · high confidence
Meteocons typeface library now uses AndroidX Startup for initialization
The Meteocons icon library has been refactored to use the AndroidX Startup library for font registration. The font definition is now a Kotlin object, and a new Initializer class handles the registration of the Meteoconcs typeface with the IconicsHolder, ensuring compatibility with Android API 28 and later by avoiding object-based initializers that previously caused failures. This change ensures the weather icons are correctly loaded at app startup without manual configuration.
meteocons-typeface-library/src/main/java · high confidence
Octicons typeface updated to v11.1.0 with AndroidX Startup integration
The Octicons icon set has been upgraded to version 11.1.0, reflecting the latest release from GitHub's Primer project. To ensure reliable initialization on all Android versions, including API 28, the library now uses a dedicated \Initializer\ class implementing \androidx.startup.Initializer\ instead of a static object initializer, resolving previous compatibility issues. The font resource is now explicitly mapped to \octicons\_v11\_1\_0\.
octicons-typeface-library/src/main/java · high confidence
Repository maintenance mode announcement and developer tooling setup
The project has entered maintenance mode, meaning no new features or icon fonts will be added, though critical and security fixes will continue. To support this, the repository now includes a Dangerfile that enforces pull request standards (such as blocking 'DO NOT MERGE' labels and running lint/detekt checks) and a release script to automate publishing to Maven Central. Documentation has been updated with a Migration guide for upgrading core versions, an FAQ for known issues, and a README section detailing how to migrate away from Android-Iconics to modern Compose ImageVector APIs.
(repo-wide) · high confidence
Sample app upgraded to Material 3 and edge-to-edge display
The Android-Iconics sample application has been updated to use Material 3 (Material You) theming, enabling dynamic colors via \DynamicColors.applyToActivitiesIfAvailable\ in the \CustomApplication\. The UI now supports edge-to-edge rendering on modern Android versions, implemented through \enableEdgeToEdge()\ and a new \applyEdgeToEdgeInsets\ utility that handles system bar and cutout insets. The sample also migrates to ViewBinding for layout inflation and uses the new \IconicsImageView\ component for displaying icons in the list items.
app/src/main/java/com/mikepenz · high confidence
Typeicons font library upgraded to version 2.0.7.1 with Jetpack App Startup integration
The Typeicons icon library has been updated to version 2.0.7.1, bringing the latest icon definitions. Initialization has been migrated from the legacy ContentProvider approach to Jetpack App Startup, ensuring the font is automatically registered via the new Initializer class. This change improves startup performance and compatibility, particularly on Android API 28 and above, while maintaining the same public interface for accessing icons.
typeicons-typeface-library · high confidence
Update Community Material icons to v7.0.96 with Jetpack App Startup integration
The Community Material typeface library has been updated to version 7.0.96, increasing the icon count to over 7,000. To accommodate the larger dataset, the icon definitions are now split across three separate enums (Icon, Icon2, Icon3) to prevent compilation issues, and the library now utilizes Jetpack App Startup for automatic initialization instead of the previous ContentProvider approach. Users will see the new icons available via the 'cmd' prefix, and the library will initialize automatically upon app startup.
community-material-typeface-library/src/main/java · high confidence
Fixes
Added ProGuard rules for Google Material icon variants
ProGuard keep rules have been added for the Google Material icon libraries to prevent class stripping during minification. This ensures that the standard, outlined, rounded, and sharp variants of the Google Material typeface remain accessible and functional in release builds.
google-material-typeface · high confidence
Test coverage
Added unit tests for icon string generation and menu inflation; Removed obsolete Android instrumentation tests.
Dependencies
Add Danger CI linting tools and update Android library build configurations
This change introduces Danger CI linting tools (danger, danger-android\_lint, danger-kotlin\_detekt) to the project's Gemfile and lockfile for automated code quality checks. It also updates the build configurations for multiple Android library modules (including iconics-core, iconics-compose, iconics-typeface-api, and various typeface add-ons like FontAwesome, Google Material, and Community Material) to use the new Android Gradle plugin namespace declarations, Jetpack Compose compiler plugins, and centralized version management via Gradle properties.
(dependencies) · high confidence
Upgrade Gradle wrapper to version 8.13
The project's Gradle wrapper has been updated to use Gradle 8.13. This change ensures that builds are executed with a consistent, modern version of the Gradle build tool, leveraging its latest performance improvements and features while maintaining reproducible build environments across different development machines.
gradle/wrapper · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 43 → 63 (+19.9)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 97 (-2.8)
- Architecture 96 → 100 (+4.4)
- Maturity 51 → 56 (+5.1)
- Readiness 28 → 55 (+27.7)
- Security 43 → 73 (+30.4)
Resolved (14)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- No artifact signing
- No exposed public API
- No tests found
- Test reliability not included
New (45)
- ClassTooLong: IconicsDrawable (iconics-core/src/main/java/com/mikepenz/iconics/IconicsDrawable.kt)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (20 lines × 2) (iconics-core/src/main/java/com/mikepenz/iconics/IconicsDrawable.kt)
- FileTooLong: fontawesome/FontAwesome.kt (fontawesome-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/fontawesome/FontAwesome.kt)
- FileTooLong: googlematerial/GoogleMaterial.kt (google-material-typeface/google-material-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/googlematerial/GoogleMaterial.kt)
- FileTooLong: googlematerial/OutlinedGoogleMaterial.kt (google-material-typeface/google-material-typeface-outlined-library/src/main/java/com/mikepenz/iconics/typeface/library/googlematerial/OutlinedGoogleMaterial.kt)
- FileTooLong: googlematerial/RoundedGoogleMaterial.kt (google-material-typeface/google-material-typeface-rounded-library/src/main/java/com/mikepenz/iconics/typeface/library/googlematerial/RoundedGoogleMaterial.kt)
- FileTooLong: googlematerial/SharpGoogleMaterial.kt (google-material-typeface/google-material-typeface-sharp-library/src/main/java/com/mikepenz/iconics/typeface/library/googlematerial/SharpGoogleMaterial.kt)
- FileTooLong: ionicons/Ionicons.kt (ionicons-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/ionicons/Ionicons.kt)
- FileTooLong: material/CommunityMaterial.kt (community-material-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/community/material/CommunityMaterial.kt)
- FileTooLong: materialdesigndx/MaterialDesignDx.kt (material-design-dx-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/materialdesigndx/MaterialDesignDx.kt)
- FileTooLong: materialdesigniconic/MaterialDesignIconic.kt (material-design-iconic-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/materialdesigniconic/MaterialDesignIconic.kt)
- FileTooLong: materialsymbols/OutlinedMaterialSymbols.kt (material-symbols-typeface/material-symbols-typeface-outlined-library/src/main/java/com/mikepenz/iconics/typeface/library/materialsymbols/OutlinedMaterialSymbols.kt)
- FileTooLong: phosphor/Phosphor.kt (phosphor-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/phosphor/Phosphor.kt)
- FileTooLong: simpleicons/SimpleIcons.kt (simple-icons-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/simpleicons/SimpleIcons.kt)
- FileTooLong: weathericons/WeatherIcons.kt (weather-icons-typeface-library/src/main/java/com/mikepenz/iconics/typeface/library/weathericons/WeatherIcons.kt)
- Further orphaned files (smaller)
- High CVE: [GHSA redacted] (Gemfile.lock)
- High CVE: [GHSA redacted] (Gemfile.lock)
- …and 25 more
Changes since last survey
- 9 commits — 5 feature/other, 4 fixes
By area
- (repo) — 3 commits
- (root) — 2 commits
- app/src — 2 commits
- iconics-core/src — 2 commits
Notable commits
- fix: Merge pull request #668 from mikepenz/fix/sample-edge-to-edge
- fix: Merge pull request #669 from mikepenz/fix/menu-inflater-keeps-existing-icons
- fix: fix(core): don't overwrite existing icons when no ico_ attribute is set
- fix: fix(sample): repair toolbar theming and do an edge-to-edge pass
- change: - [release] v5.6.0
- change: IconicsMenuInflaterUtil: don't unset non-iconics menu item icons
- change: Merge pull request #667 from PrOF-kk/menu_inflater_fix
- change: docs: announce maintenance mode and add Compose migration guide
- change: refactor(core): drop the ico_ prefix check in the menu inflater
Architecture
- Containers 0 added · 0 removed · contexts 3 added · 0 removed · edges 1 added · 0 removed
Added bounded contexts (3)
- app
- iconics-compose
- iconics-core
Added dependency edges (1)
- app → iconics-core
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
mikepenz/Android-Iconics was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 51c85cbc5eff0eb834a4c36fd614ff64b081e5bb — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.