Skip to content
CAI
Software that uses CAICheck a score

mikepenz/Android-Iconics

63.4

Adequate · 25 September 2026

37.2k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.