- Breaking Change: The legacy View-based UI module (
com.mikepenz:aboutlibraries) has been removed.- Migrate to the Compose UI modules:
com.mikepenz:aboutlibraries-compose,com.mikepenz:aboutlibraries-compose-m2(M2) orcom.mikepenz:aboutlibraries-compose-m3(M3). - Remove
LibsBuilder,LibsActivity,LibsFragment, andLibsConfigurationusages from your code. - See the README for the Compose UI setup and usage.
- Migrate to the Compose UI modules:
- Breaking Change: Upgrade to Compose 1.11.x which drops support for
macosX64andiosX64targets. If you were using these targets, you will need to migrate to the newmacosArm64andiosArm64targets respectively. - Breaking Change: The Android Gradle Plugin (AGP) version 8.13.0 or greater is now required when applying the
.androidplugin. - Breaking Change (Gradle Plugin): Removed previously deprecated configuration API.
AndroidConfigand theandroid { }block onAboutLibrariesExtensionwere removed (registerAndroidTaskswas already a no-op). Apply thecom.mikepenz.aboutlibraries.plugin.androidplugin to auto-hook the Android build instead.outputFileNameonExportConfigwas removed — useoutputFile(full path) instead.- The
aboutLibraries.outputPathGradle property was removed — useaboutLibraries.outputFileinstead.
- Breaking Change (Compose UI): The Compose UI received a major overhaul (variant system, accent theming, search). The public
LibrariesContainerAPI changed; see Compose UI API migration below.onLibraryClicknow returnsBooleaninstead ofUnit, and the newonActionClickcallback (replacingonFundingClick) returnsBoolean. Returntrueto consume the event and suppress the default handling (URI open / license dialog / sheet).- The
show*boolean parameters (showAuthor,showDescription,showVersion,showLicenseBadges,showFundingBadges) are replaced by a singlebadges: LibraryBadges. - The styling parameters (
typography,padding,dimensions,textStyles,shapes) andlibraryModifier/onFundingClickwere removed from the M2/M3LibrariesContainer. Styling now flows through the variant token system (see below). - The deprecated
rememberLibrariesoverloads and the deprecatedLibrariesContainerwrapper files (deprecated in v12.2.0) were removed.
- Breaking Change (Compose UI M2): The Material 2 license dialog was aligned with the Material 3 variant, which now drives it through the variant token system.
LicenseDialog(M2) now requires aLibrariesStyleparameter (added afterlibrary) and no longer accepts aLibraryPadding. It reads the content padding fromstyle.paddingand the max width fromstyle.dimensions.licenseDialogMaxWidth.- The M2
LibrariesContaineroverloads no longer accept apadding: LibraryPaddingparameter — it only fed the license dialog, which now sources padding from the style. Customize the dialog padding viaLibraryDefaults.defaultVariantPadding(licenseDialogContentPadding = ...)on theLibrariesStyleinstead. - The license dialog now fills the available width up to
VariantDimensions.licenseDialogMaxWidth(default560.dp); override it viaLibraryDefaults.defaultVariantDimensions(licenseDialogMaxWidth = ...).
The styling knobs that used to be individual LibrariesContainer parameters are now grouped into the variant token system. Where each one moved:
| Removed v14 parameter | v15 replacement |
|---|---|
showAuthor / showDescription / showVersion / showLicenseBadges / showFundingBadges |
badges = LibraryBadges(author, description, version, license, funding) |
typography: Typography |
Derived from MaterialTheme.typography inside the style; override via textStyles on LibraryDefaults.librariesStyle(...) |
padding: LibraryPadding |
LibrariesStyle.padding (VariantPadding) via LibraryDefaults.defaultVariantPadding(...) |
dimensions: LibraryDimensions |
LibrariesStyle.dimensions (VariantDimensions) via LibraryDefaults.defaultVariantDimensions(...) |
textStyles: LibraryTextStyles |
LibrariesStyle.textStyles (VariantTextStyles) via LibraryDefaults.m3VariantTextStyles(...) / defaultVariantTextStyles(...) |
shapes: LibraryShapes |
LibrariesStyle.shapes (VariantShapes) via LibraryDefaults.defaultVariantShapes(...) |
colors: LibraryColors |
Kept (chips + license dialog). Header / row / action chrome colors moved to variantColors: VariantColors via LibraryDefaults.m3VariantColors(...) / m2VariantColors(...) |
libraryModifier, onFundingClick, per-slot lambdas (name/version/author/…) |
Replaced by variant / actionMode / detailMode enums and the libraryRow slot |
Note:
LibraryColorsand the legacyLibraryDefaults.libraryColors()/libraryPadding()/libraryDimensions()/libraryTextStyles()/libraryShapes()factories still exist — only theLibrariesContainerparameters changed.
Before (v14.x):
LibrariesContainer(
libraries = libs,
showAuthor = true,
showVersion = true,
showLicenseBadges = true,
showFundingBadges = false,
colors = LibraryDefaults.libraryColors(),
padding = LibraryDefaults.libraryPadding(),
dimensions = LibraryDefaults.libraryDimensions(),
textStyles = LibraryDefaults.libraryTextStyles(),
shapes = LibraryDefaults.libraryShapes(),
onLibraryClick = { library -> /* handle */ },
)After (v15):
LibrariesContainer(
libraries = libs,
badges = LibraryBadges(
author = true,
version = true,
license = true,
funding = false,
description = false,
),
colors = LibraryDefaults.libraryColors(), // chips + license dialog (unchanged)
variantColors = LibraryDefaults.m3VariantColors(), // header / row / action chrome
variant = LibrariesVariant.Traditional, // or .Refined
actionMode = LibraryActionMode.Chips, // or .Icons / .Links
detailMode = LibraryDetailMode.Inline, // or .None / .Sheet
onLibraryClick = { library -> false }, // return true to consume the click
onActionClick = { library, kind -> false }, // return true to suppress default open
)Customizing padding / dimensions / text styles / shapes: the M2/M3 LibrariesContainer builds its LibrariesStyle internally and only exposes variantColors. For full
control over the remaining tokens, use the Material-agnostic Libraries composable from aboutlibraries-compose and pass a LibrariesStyle:
import com.mikepenz.aboutlibraries.ui.compose.variant.Libraries
Libraries(
libraries = libs,
style = LibraryDefaults.m3LibrariesStyle(compact = false), // shortcut, or build granularly:
// style = LibraryDefaults.librariesStyle(
// colors = LibraryDefaults.m3VariantColors(),
// padding = LibraryDefaults.defaultVariantPadding(headerPadding = PaddingValues(20.dp)),
// dimensions = LibraryDefaults.defaultVariantDimensions(headerIconSize = 28.dp),
// textStyles = LibraryDefaults.m3VariantTextStyles(),
// shapes = LibraryDefaults.defaultVariantShapes(),
// ),
)- Breaking Change: The
coreplugin no longer depends on thekotlinx.immutablecollections library.- Collections are marked as stable via the stability config file instead: mikepenz#1267
- Breaking Change: The already deprecated
generateLibraryDefinitions*tasks are now removed - Breaking Change: The plugin will now only work for projects that use AGP 7 or newer, with the new variants API via
AndroidComponentsExtensionavailable - Breaking Change: Due to Paparazzi requiring Java 21 - This project is now also compiled with Java 21
- Breaking Change: Some underlying APIs start to require API 23 instead of 21.
org.jetbrains.compose.components.resources
- Dependency Upgrade: Kotlin 2.3.0
- Dependency Upgrade: Compose 1.10.x
- Behaviour Change: The
Gradle Pluginnow by default enables MERGING duplicates with EXACT matches. In prior releases, duplicates would be kept.
// To enable the prior behavior, you can simply configure this in your build script
aboutLibraries {
library {
duplicationMode = DuplicateMode.KEEP
duplicationRule = DuplicateRule.SIMPLE
}
}
- Breaking Change: Deprecated APIs from v12.x.y were removed
- Breaking Change: The
Gradle Pluginwas split into 2. The main plugin that is registering all the manual tasks, and an Android specific one automatically registering the Android auto generation task.- For most projects the manual tasks are recommended. Only if you require or want to use the generation as part of the android build, use the
.androidplugin. - The main plugin (
com.mikepenz.aboutlibraries.plugin) provides tasks likeexportLibraryDefinitionsthat need to be manually executed - The Android plugin (
com.mikepenz.aboutlibraries.plugin.android) automatically hooks into the Android build process
- For most projects the manual tasks are recommended. Only if you require or want to use the generation as part of the android build, use the
// To use the Android auto registering plugin - add the following to your module:
id("com.mikepenz.aboutlibraries.plugin.android")- Breaking Change: The
AndroidConfigclass and itsregisterAndroidTasksproperty were removed, replaced by the Android-specific plugin - Breaking Change: Reworked the
LibraryColorsinterface to be more descriptive and more flexible- Renamed
backgroundColortolibraryBackgroundColor - Renamed
contentColortolibraryContentColor - Added new background, content color variants for the dialog
- Renamed
- Breaking Change: Renamed
nameTextStylesinlibraryTextStyles/LibraryTextStylestonameTextStyle(to align with other styles). - Breaking Change: Introduced new
libraryPadding()default function to replace the existing one. This moves to use a new class to hold chip paddings. - Breaking Change: Wrappers around the
LibrariesContainerwere deprecated in favor ofremember*functions. To be removed in release13.x.y. - Breaking Change: The
LicenseDialogBodynow also accepts theModifierto include padding in text instead of scrollable container - Deprecate: Deprecate series of APIs to cleanup and simplify API surface, and simplify maintenance.
- Note: Updated README to suggest new non deprecated API for using
LibrariesContaineron Android.
- Dependency Upgrade: Kotlin 2.1.20
- Breaking Change: The
Gradle PluginandCompose UIlibrary have undergone significant changes, including multiple breaking API changes. - Breaking Change: The
Gradle Pluginhas moved to aPropertybased configuration schema with nested configs for better organization. - Breaking Change: The
Gradle Plugin'sconfiguration options which wereArrayorListtypes have been changed toSettypes. - Breaking Change: The
Gradle Pluginnow only has a singularoutputPathproperty, to specify where the generated file should be written to. - Behaviour Change: The
Gradle Pluginwill now do parts of the setup during configuration time to improve configuration cache compatibility. - Breaking Change: The Compose UI APIs were overhauled to improve the API and reduce the number of parameters, and make it more flexible for the future.
API changes to simplify the expansion and configuration of the compose UI.
v11.x.y
LibrariesContainer(
itemContentPadding = PaddingValues(16.dp),
itemSpacing = 2.dp
)v12.x.y
LibrariesContainer(
padding = LibraryDefaults.libraryPadding(contentPadding = PaddingValues(16.dp)),
dimensions = LibraryDefaults.libraryDimensions(itemSpacing = 2.dp),
)- v10 includes a major rewrite of the
Gradle Plugin. The oldxmlstring resource format definitions are no longer supported.- All meta information is now written to a single json file
- Old
enchantconfig files are no longer supported
- The UI module dropped a major amount of configurations to lower complexity.
- TODO
- in case your project has custom licenses, check out the new feature to allow the license description be included as raw file. This helps to solve the potential STRING_TOO_LARGE issue.
- Upgraded the library to be in
kotlindependencies. - Update
FastAdapterto v4 - If you use this library too, please check out the migration guide - Update
Android-Iconicsto v4 - If you use this library too, please check out the migration guide
- Upgraded the library to use
androidXdependencies. This means your project will need to depend onandroidXdependencies too. If you still use appcompat please consider using a version older than v6.2.x. - Further details about migrating to androidX and a overview can be found on the official docs. https://developer.android.com/topic/libraries/support-library/refactor
IMPORTANT IF YOU USE THE FASTADAPTER OR MATERIALDRAWER
- You have to update your FastAdapter dependency to v3.0.0 with this release
- See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md
IMPORTANT IF YOU USE THE Android-Iconics
- You have to update your Android-Iconics dependency to v2.9.0 with this release
- See the MIGRATION information of the Android-Iconics https://github.com/mikepenz/Android-Iconics/blob/develop/MIGRATION.md#290
IMPORTANT IF YOU USE THE FASTADAPTER OR MATERIALDRAWER
- You have to update your FastAdapter dependency to v2.5.0 with this release
- See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md
IMPORTANT IF YOU USE THE FASTADAPTER OR MATERIALDRAWER
- You have to update your FastAdapter dependency to v2.1.0 with this release
- See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md
IMPORTANT IF YOU USE THE FASTADAPTER
- You have to update your FastAdapter dependency to v2.0.0 with this release
- See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md
IMPORTANT IF YOU USE THE FASTADAPTER
- This release brings a breaking interface change. Your items now have to implement
bindView(ViewHolder holder, List payloads)instead ofbindView(VH holder). - The additional payload can be used to implement a more performant view updating when only parts of
the item have changed. Please also refer to the
DiffUtilswhich may provide the payload.
- Dropping support for API < 14. New MinSdkVersion is 14
- Change
void onLibTaskFinished()tovoid onLibTaskFinished(FastItemAdapter fastItemAdapter)
- renamed
withAnimations()towithSlideInAnimation()and change the default tofalse - now use the
DefaultItemAnimatorto animate the displaying of the elements - you can now define a different
ItemAnimatorviaLibsConfiguration.getInstance().setItemAnimator()
- change
.fragment()to.supportFragment()andLibsFragmenttoLibsSupportFragment
INFO
- moved logic of the fragment to the new
LibsFragmentCompatclass - create new
LibsSupportFragmentwhich extends theandroid.support.v4.app.Fragment - change the
LibsFragmentwhich now extends theandroid.app.Fragment - add new method
.supportFragment()which returnsandroid.support.v4.app.Fragment - change
.fragment()which now returnsandroid.app.Fragment