Skip to content
CAI
Software that uses CAICheck a score

mikepenz/MaterialDrawer

59.3

Weak · 25 September 2026

9.4k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

MaterialDrawer is an Android library that provides a customizable navigation drawer component with support for Material 3 theming. It offers a modular architecture for creating various drawer items, including integration with Iconics for vector icons and Jetpack Navigation for seamless screen transitions. The system is designed to be extensible, allowing developers to define custom styles and behaviors through a modern Kotlin API.

Features

Initial release of MaterialDrawer v10.0.0-b01 with Material 3 support

This entry marks the initial commit for the MaterialDrawer library, introducing version 10.0.0-b01 which adds support for Material 3 (M3) theming and requires Android API Level 16 or higher. The release includes the core library code, a sample application, and comprehensive documentation including a README, migration guide, and FAQ. The library is licensed under the Apache License 2.0 and utilizes the Gradle Wrapper for builds.

(repo-wide) · high confidence

New Iconics integration for Material Drawer items

The materialdrawer-iconics module now provides Kotlin extension properties and a dedicated ImageHolder class to seamlessly integrate Iconics vector icons into Material Drawer list items. This change allows developers to assign Iconics icons to drawer entries with automatic handling of icon tinting and selection states, ensuring consistent visual appearance across different Android API levels.

materialdrawer-iconics · high confidence

Removals

Removal of HoloKitKatDrawer sample application

The HoloKitKatDrawer sample application has been completely removed from the codebase. This deletion eliminates the demo implementation of a navigation drawer with custom Holo styling, including the main activity, drawer list adapter, system UI hiding utilities, and all associated layout, drawable, and style resources.

HoloKitKatDrawer · high confidence

Architecture

MaterialDrawer restructured with new holder classes and drawer item models

The MaterialDrawer library has been refactored to introduce a new architecture for styling and content. New holder classes (BadgeStyle, ColorHolder, DimenHolder, ImageHolder, StringHolder) now manage visual properties and content resolution, allowing for more flexible theming and easier adjustment of attributes like elevation and padding. The drawer item model layer has been reorganized with new abstract base classes (AbstractDrawerItem, BaseDrawerItem, BaseDescribeableDrawerItem) and specific implementations (AbstractBadgeableDrawerItem, AbstractSwitchableDrawerItem, AbstractToggleableDrawerItem, ContainerDrawerItem, DividerDrawerItem) that leverage these holders. This change improves the maintainability and extensibility of the drawer items, particularly for Material 3 theming, by centralizing style and content logic.

materialdrawer · high confidence

Behavioural changes

Added ProGuard configuration and relocated project structure

The app module now includes a proguard-rules.pro file containing default comments and optional rules for WebView JavaScript interfaces, allowing for code shrinking and obfuscation configuration. Additionally, the project's root directory has been renamed from HoloKitKatDrawer to app, with the .gitignore file moved accordingly to reflect this structural change.

app · medium confidence

Deprecate old setupWithNavController and add successListener support

The Material Drawer navigation integration now supports a new \successListener\ callback in \setupWithNavController\, allowing developers to receive notifications when a drawer item successfully triggers navigation. The previous two-argument overload of \setupWithNavController\ is deprecated in favor of the new three-argument version that includes this listener, ensuring backward compatibility while encouraging adoption of the enhanced API.

materialdrawer-nav · high confidence

Sample app converted to Kotlin and Material Drawer v8 API

The sample application activities (such as DrawerActivity, AdvancedActivity, and CollapsingToolbarActivity) have been rewritten in Kotlin and migrated to the Material Drawer v8 architecture. This update introduces ViewBinding for layout inflation, replaces the legacy Glide image loader with Coil, and adopts the new v8 drawer item models and AccountHeader integration patterns. Users exploring the sample code will now see idiomatic Kotlin usage and the modern API surface for configuring drawer items, headers, and navigation.

app/src/main/java/com/mikepenz/materialdrawer/app · high confidence

Sample app drawer items migrated to Kotlin with modern styling APIs

The sample application's drawer item implementations (such as AccountDivider, CustomPrimary, Gmail, Icon, and OverflowMenu items) have been rewritten in Kotlin. This update introduces a Gmail-style drawer item with custom rounded corners, replaces legacy color handling with ColorStateList and theme-aware styling, and adopts MaterialShapeDrawable for backgrounds. It also deprecates the old 'with\*' builder methods in favor of direct property setters and extension properties, simplifying the API for users creating custom drawer items.

app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems · high confidence

Sample fragments migrated to ViewBinding and Jetpack Navigation

The sample application fragments (DemoFragment, DemoMessageFragment, DrawerFragment, SecondDrawerFragment) have been rewritten in Kotlin to use ViewBinding instead of synthetic view accessors, and DemoMessageFragment now utilizes Jetpack Navigation for fragment transitions. This improves type safety and aligns the demo code with modern Android development practices.

app/src/main/java/com/mikepenz/materialdrawer/app/fragment · high confidence

Dependencies

Added Gradle wrapper for version 8.12

The project now includes a Gradle wrapper configuration file that pins the build tool to version 8.12. This ensures that all developers and CI environments use the same specific Gradle distribution, improving build consistency and reproducibility across the team.

gradle · high confidence

Migrate to Gradle Version Catalogs and modernize build configuration

The project has been restructured to use Gradle Version Catalogs (defined in \gradle/libs.versions.toml\) for centralized dependency management, replacing the previous ad-hoc dependency declarations. This update upgrades key libraries to their latest stable versions, including AndroidX AppCompat (1.7.0), Material Components (1.12.0), Navigation (2.8.6), and FastAdapter (5.7.0). The build system now utilizes convention plugins for shared configuration across the \app\, \materialdrawer\, \materialdrawer-iconics\, and \materialdrawer-nav\ modules. Additionally, the legacy \HoloKitKatDrawer\ sample module has been removed, and the project version has been bumped to 10.0.0-b01.

(dependencies) · 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 46 → 59 (+13.8)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 97 → 93 (-4.2)
  • Architecture 94 → 100 (+5.9)
  • Maturity 49 → 53 (+4.1)
  • Readiness 40 → 57 (+17.4)
  • Security 35 → 56 (+20.7)

Resolved (21)

  • Dimension evaluation failed
  • Duplicated block (6 lines × 2) (app/src/main/java/com/mikepenz/materialdrawer/app/MultiDrawerActivity.kt)
  • 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)
  • 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)
  • High: security finding (details withheld)
  • Medium: security finding (details withheld)
  • No artifact signing
  • No exposed public API
  • …and 1 more

New (62)

  • AccountHeaderView.buildProfiles (cognitive 42) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • AccountHeaderView.buildProfiles (cyclomatic 29) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • AccountHeaderView.calculateProfiles (cognitive 41) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • AccountHeaderView.calculateProfiles (cyclomatic 27) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • AccountHeaderView.switchProfiles (cognitive 26) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • AccountHeaderView.switchProfiles (cyclomatic 16) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • BezelImageView.onDraw (cognitive 20) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.kt)
  • ClassTooLong: AccountHeaderView (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt)
  • ClassTooLong: MaterialDrawerSliderView (materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/MaterialDrawerSliderView.kt)
  • CrossfadeDrawerLayout.dispatchTouchEvent (cognitive 31) (app/src/main/java/com/mikepenz/materialdrawer/app/widget/CrossfadeDrawerLayout.kt)
  • CrossfadeDrawerLayout.dispatchTouchEvent (cyclomatic 17) (app/src/main/java/com/mikepenz/materialdrawer/app/widget/CrossfadeDrawerLayout.kt)
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • DrawerUtilsKt.onFooterDrawerItemClick (cognitive 23) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUtils.kt)
  • Duplicated block (10 lines × 3) (app/src/main/java/com/mikepenz/materialdrawer/app/CollapsingToolbarActivity.kt)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/mikepenz/materialdrawer/app/EmbeddedDrawerActivity.kt)
  • Duplicated block (13 lines × 4) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.kt)
  • Duplicated block (15 lines × 2) (app/src/main/java/com/mikepenz/materialdrawer/app/MiniDrawerActivity.kt)
  • Duplicated block (15 lines × 2) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.kt)
  • Duplicated block (24 lines × 2) (materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.kt)
  • …and 42 more

Changes since last survey

  • 12 commits — 12 feature/other, 0 fixes

By area

  • (repo) — 6 commits
  • .github/workflows — 6 commits

Notable commits

  • change: Bump actions/setup-java from 5 to 6
  • change: Bump github/codeql-action from 4.37.4 to 4.37.6
  • change: Bump github/codeql-action from 4.37.6 to 4.37.8
  • change: Bump github/codeql-action from 4.37.8 to 4.37.9
  • change: Bump github/codeql-action from 4.37.9 to 4.38.0
  • change: Bump gradle/actions from 6.2.0 to 6.3.0
  • change: Merge pull request #2856 from mikepenz/dependabot/github_actions/gradle/actions-6.3.0
  • change: Merge pull request #2857 from mikepenz/dependabot/github_actions/github/codeql-action-4.37.6
  • change: Merge pull request #2859 from mikepenz/dependabot/github_actions/github/codeql-action-4.37.8
  • change: Merge pull request #2860 from mikepenz/dependabot/github_actions/actions/setup-java-6
  • change: Merge pull request #2861 from mikepenz/dependabot/github_actions/github/codeql-action-4.37.9
  • change: Merge pull request #2862 from mikepenz/dependabot/github_actions/github/codeql-action-4.38.0

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/MaterialDrawer 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 91850d5e66f9e0b14491f018cd0360e6303e9691 — 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.