mikepenz/MaterialDrawer
59.3
Weak · 25 September 2026
9.4k
lines of production code
Kotlin
primary language
4
measurements over time
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.