Skip to content
CAI
Software that uses CAICheck a score

google/accompanist

50.0

Adequate · 25 September 2026

5.1k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Added Spotless configuration files to standardize code formatting and enforce copyright headers. The new \spotless/copyright.txt\ file provides the Apache 2.0 license header template, while \spotless/greclipse.properties\ configures Groovy and Java formatting rules, including indentation, brace placement, and line wrapping settings.

spotless · high confidence

Add adaptive layout samples for two-pane and fold-aware columns

The sample app now includes new demo activities for adaptive layouts: BasicTwoPaneSample, HorizontalTwoPaneSample, and VerticalTwoPaneSample showcase the TwoPane component with horizontal and vertical splitting strategies, while DraggableFoldAwareColumnSample, NavDrawerFoldAwareColumnSample, and NavRailFoldAwareColumnSample demonstrate the FoldAwareColumn in navigation contexts. These samples illustrate how to use the new fold-aware APIs to adapt UI to device form factors.

sample/src/main/java/com/google/accompanist/sample/adaptive · high confidence

Add fold-aware layout components for adaptive UI

The adaptive module introduces new layout components to handle folding devices. A new \FoldAwareColumn\ composable places children in a column while avoiding horizontal folds, allowing developers to create layouts that adapt to screen splits. Additionally, a \TwoPane\ layout is added to manage two distinct content slots, automatically adjusting their arrangement based on display features like hinges and folds. These components enable applications to build adaptive interfaces that respect hardware constraints on foldable devices.

adaptive/src/main/java · high confidence

Add new permissions API for Compose

The permissions module introduces new APIs for managing permissions in Compose, including \rememberPermissionState\ and \rememberMultiplePermissionsState\ to observe and request single or multiple permissions. The implementation supports Compose previews by allowing developers to provide mock permission statuses for testing in the preview environment. The public APIs are marked as experimental.

permissions/src/main/java · high confidence

Add permission request samples for location, multiple, and single permissions

The permissions sample directory now includes three new Kotlin files—RequestLocationPermissionsSample, RequestMultiplePermissionsSample, and RequestPermissionSample—demonstrating how to request location, multiple, and single permissions respectively using the new multiple and single permission state APIs.

sample/src/main/java/com/google/accompanist/sample/permissions · high confidence

Added lint check to prevent calling permission request methods in Compose compositions

A new lint check has been added to the \permissions-lint\ module. It detects calls to \PermissionState.launchPermissionRequest\ and \MultiplePermissionsState.launchMultiplePermissionRequest\ made directly within a Composable function or lambda. These calls will now trigger an error, as invoking them in the Composition body throws a runtime exception. Users should instead call these methods inside a regular lambda or a side-effect.

permissions-lint · high confidence

Added release signing setup and cleanup scripts

Two new shell scripts, signing-setup.sh and signing-cleanup.sh, have been added to the release directory. The setup script handles decrypting GnuPG keyrings and Play Store signing properties using a provided encryption key, while the cleanup script removes sensitive files like .gpg and .properties artifacts after the release process.

release · high confidence

Added sample code for DrawablePainter usage

A new Kotlin file, DocSamples.kt, was added to the sample module, providing a composable function that demonstrates how to use the DrawablePainter library to display a drawable resource in a Compose Image.

sample/src/main/java/com/google/accompanist/sample/drawablepainter · high confidence

Initial project scaffolding and documentation infrastructure

The repository was initialized with core project files including a comprehensive README explaining the Accompanist library suite, a CONTRIBUTING guide for developers, and a LICENSE file. Additionally, a MkDocs configuration (mkdocs.yml) and shell scripts (generate\_docs.sh, checksum.sh) were added to support automated documentation generation and site navigation, establishing the foundation for the project's public-facing documentation.

(repo-wide) · high confidence

Introduce DrawablePainter for rendering Android Drawables in Compose

Adds the DrawablePainter component, enabling Compose UI to render Android Drawables (including animated ones) as Painters. The implementation handles lifecycle events (start/stop animations), respects intrinsic sizes, and includes a workaround for AnimatedImageDrawable rendering on Android versions below 12.

drawablepainter · high confidence

Introduce experimental Permissions API

The permissions module exposes a new public API for managing Android permissions in Compose, including \PermissionState\ and \MultiplePermissionsState\ interfaces along with \rememberPermissionState\ and \rememberMultiplePermissionsState\ functions. All public components are marked with the \@ExperimentalPermissionsApi\ annotation, indicating that the API is experimental and subject to change.

permissions/api · high confidence

Introduce fold-aware layout primitives and TwoPane support

The adaptive API now exposes new layout primitives for handling device folds and multi-pane layouts. A new FoldAwareColumn composable and its associated scope allow content to be aligned or ignored relative to fold boundaries. Additionally, a TwoPane composable and corresponding Horizontal/Vertical strategy builders are provided to manage split-screen or dual-pane arrangements, along with a SplitResult model to describe gap geometry and orientation.

adaptive/api · high confidence

New Android library convention plugins for build configuration

The build-logic/convention module introduces four new Gradle convention plugins to standardize Android library setups. AndroidLibraryConventionPlugin configures Kotlin, Android library defaults (targetSdk 35), and test dependencies. AndroidLibraryComposeConventionPlugin integrates Jetpack Compose. AndroidLintConventionPlugin applies lint checks conditionally based on the Android plugin type. AndroidLibraryPublishedConventionPlugin adds publishing, Dokka, and Metalava API tracking for published libraries. These changes streamline the build configuration for Android library modules.

build-logic/convention/src/main/kotlin · high confidence

Behavioural changes

4 commits (0 fixes) modifying images

A change to existing behaviour in images — 4 commits, 1 file.

images · medium confidence · unverified

Migrated Accompanist build logic into build-logic conventions

The build configuration for the Accompanist library has been consolidated into the project's shared build-logic conventions. This includes new Gradle plugin scripts for Android Compose setup, Kotlin/Java compilation targets, and a helper utility for bundling dependencies inside AARs and lint jars. As a result, the sample app's activity has been converted to use Jetpack Compose, and the build system now automatically configures Compose features, source information, and dependency bundling for all modules using these conventions.

build-logic/convention/src/main/kotlin/com · medium confidence

Sample app converted to Compose with Material 3 theming

The sample application has been converted to use Jetpack Compose for its UI, replacing the previous implementation. This includes a new Compose-based MainActivity that dynamically lists available samples, a MainScreen using Material 3 components like TopAppBar and ListItem, and a Theme configuration that applies Material 3 color schemes for both light and dark modes.

sample/src/main/java/com/google/accompanist/sample · medium confidence

Test coverage

Added Android instrumented tests for the permissions module; Added Robolectric configuration for adaptive module tests; Added UI tests for adaptive layout components; Added internal test utilities for Android and Compose testing; Added test activities for permissions testing; Added test execution script with sharding and flaky test filtering.

Dependencies

Migrate project build configuration to Kotlin DSL and Gradle version catalogs

The project's build system has been migrated from Groovy to Kotlin DSL, with all module build scripts (including adaptive, drawablepainter, permissions, and sample) converted to .kts files. A centralized Gradle version catalog (gradle/libs.versions.toml) now manages dependency versions for Compose, AndroidX, and other libraries, replacing individual version declarations. The build-logic convention plugins are also defined in Kotlin, and the root settings file uses Kotlin DSL to define the project structure and enforce JDK 17 compatibility.

(dependencies) · high confidence

Updated Gradle wrapper to version 8.10

The Gradle wrapper has been updated to use Gradle 8.10. This change updates the distribution URL and configuration in the wrapper properties file, ensuring the project uses the specified Gradle version for builds.

gradle · 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 40 → 50 (+9.6)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 96 (-2.4)
  • Architecture 94 → 100 (+5.9)
  • Maturity 50 → 50 (-0.4)
  • Readiness 27 → 55 (+27.7)
  • Security 33 → 37 (+3.2)

Resolved (51)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (12 lines × 2) (adaptive/src/main/java/com/google/accompanist/adaptive/TwoPane.kt)
  • Duplicated block (26 lines × 2) (adaptive/src/main/java/com/google/accompanist/adaptive/TwoPane.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)
  • High: security finding (details withheld)
  • …and 31 more

New (78)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (11 lines × 2) (sample/src/main/java/com/google/accompanist/sample/adaptive/NavDrawerFoldAwareColumnSample.kt)
  • Duplicated block (12 lines × 2) (adaptive/src/main/java/com/google/accompanist/adaptive/TwoPane.kt)
  • Duplicated block (12 lines × 2) (adaptive/src/main/java/com/google/accompanist/adaptive/TwoPane.kt)
  • Duplicated block (14 lines × 2) (adaptive/src/main/java/com/google/accompanist/adaptive/FoldAwareColumn.kt)
  • Duplicated block (30 lines × 3) (sample/src/main/java/com/google/accompanist/sample/adaptive/BasicTwoPaneSample.kt)
  • Further orphaned files (smaller)
  • 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)
  • …and 58 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

google/accompanist 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 12ec3408fc101e0006e38dc62f7acff7a822e20b — 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.