Skip to content
CAI
Software that uses CAICheck a score

ChuckerTeam/chucker

63.4

Adequate · 25 September 2026

7.9k

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 a debugging library for Android applications that intercepts and records HTTP and HTTPS network transactions using OkHttp. It provides a public API for developers to configure request filtering, custom body decoding, and data retention policies, while storing captured traffic in a local Room database. The library supports exporting transaction logs in HAR or plain text formats and includes a sample application to demonstrate integration with various networking protocols and libraries.

How it got here

2017 — Initial scaffolding and legacy cleanup

11 changes.

The project was initialized with standard configuration, build workflows, and testing infrastructure. Concurrently, legacy Java-based components, including the HTTP interceptor, data persistence layer, and sample application, were removed to prepare for a modernized architecture.

2018–2021 — API expansion and architecture modernization

20 changes.

This period focused on significantly expanding the Chucker library's public API with features like custom body decoding, request filtering, and HAR export, while introducing a no-op stub module for safer integration. The internal architecture was modernized by migrating to a repository pattern, refactoring the database layer with Room, and rewriting the UI and data models in Kotlin. Comprehensive test coverage was added to validate these new capabilities and ensure the stability of the underlying data handling and export logic.

2022–2025 — Compose migration and test coverage

4 changes.

The sample application's user interface was rewritten using Jetpack Compose and Material 3, introducing modern responsive layouts and accessibility improvements. Concurrently, unit and UI tests were added for both the Chucker library's UI components and the sample app to verify functionality and interaction.

Features

API changes: BodyDecoder integration, skipPaths/skipDomains, HAR export, and builder shortcuts

The Chucker library API now supports custom body decoding via the new BodyDecoder interface and ChuckerInterceptor.Builder.addBodyDecoder, allowing users to customize how request/response bodies are decoded. The interceptor builder adds skipPaths and skipDomains methods (accepting Regex or String arrays) to selectively exclude specific requests from being recorded. Export functionality is expanded with the new ExportFormat enum (HAR and LOG) and ChuckerCollector.writeTransactions, enabling transaction export to HAR or log files. Additionally, ChuckerInterceptor.Builder.createShortcut allows creating a launcher shortcut for the Chucker UI, and ChuckerCollector now supports configurable retention periods via RetentionManager.Period (ONE\_HOUR, ONE\_DAY, ONE\_WEEK, FOREVER) and a showNotification flag. The ChuckerInterceptor also exposes redactHeaders for sensitive header redaction.

library-no-op/api, library/api · high confidence

Added GraphQL sample assets for character and location queries

The sample application now includes a GraphQL query definition (Search.graphql) and the corresponding schema files (schema.json and schema.json.graphql) for the Rick and Morty API. This allows users to test and inspect GraphQL requests involving character searches, location details, and episode lists within the sample app.

sample/src/main/graphql · high confidence

Added Pokemon protobuf schema for sample app

The sample application now includes a new protocol buffer definition (pokemon.proto) that defines a Pokemon message with name and level fields, enabling the sample to demonstrate custom body decoding for Protobuf payloads.

sample/src/main/proto · high confidence

Added script to generate GIF assets from video sources

A new shell script, \assets/generate\_gif.sh\, has been added to automate the creation of GIF files from MP4 video sources. This tool uses FFmpeg to process specific videos (chucker-http, chucker-error, chucker-multiwindow) into optimized GIFs with consistent frame rates and scaling, supporting the updated documentation and screenshots for version 3.0.0.

assets · high confidence

Initial project scaffolding and configuration

The repository is initialized with essential configuration files including an Apache 2.0 license, a detailed README with integration instructions, and a comprehensive changelog. Build and development workflows are established through a Gradle wrapper, a pre-commit hook for code quality checks (detekt and ktlint), and a Renovate configuration for automated dependency updates. Editor settings are standardized via .editorconfig and .gitattributes, while .gitignore is updated to exclude Kotlin build artifacts.

(repo-wide) · high confidence

Introduce no-op library stubs for Chucker API

This change adds a new \library-no-op\ module containing stub implementations of the Chucker API classes (such as \ChuckerInterceptor\, \ChuckerCollector\, \Chucker\, \BodyDecoder\, \ExportFormat\, and \RetentionManager\). These classes provide the same public interfaces and builder methods as the main library but perform no actual network inspection or data storage, allowing applications to include Chucker in their dependency graph for compilation purposes without enabling the debugging functionality at runtime.

library-no-op/src · high confidence

Introduces internal support utilities for Chucker's core functionality

This change adds a comprehensive set of internal support classes to the library, establishing the foundation for request/response processing, data formatting, and UI assistance. Key additions include RequestProcessor and ResponseProcessor to handle HTTP transaction metadata and payload decoding (including gzip/brotli uncompression and body limiting), FormatUtils for pretty-printing JSON/XML and formatting byte counts, and HarUtils to enable HAR export. It also introduces UI helpers like BitmapUtils for color extraction, ChessboardDrawable for visual patterns, SearchHighlightUtil for search result highlighting, and LiveDataUtils for combining and deduplicating streams. Infrastructure components such as FileSaver, FileFactory, and ReportingSink manage file I/O, while NotificationHelper and ClearDatabaseService handle background cleanup and notification updates. Finally, it adds HttpHeaderSerializer to prevent NPEs during JSON serialization and OkHttpUtils/OkioUtils for stream handling and plain-text detection.

library/src/main/kotlin/com/chuckerteam/chucker/internal/support · high confidence

New public API for HTTP transaction export, custom body decoding, and request filtering

The Chucker library now exposes a public API that allows developers to export captured HTTP transactions to files in LOG or HAR formats via \ChuckerCollector.writeTransactions\. It introduces a \BodyDecoder\ interface, enabling custom logic to decode request and response bodies for display in the UI. Additionally, the \ChuckerInterceptor.Builder\ now supports \skipPaths\, \skipDomains\, and their regex counterparts, allowing selective filtering of requests to exclude specific URLs or hosts from being recorded.

library/src/main/kotlin/com/chuckerteam/chucker/api · high confidence

Sample app adds dedicated HTTP task implementations for Cronet/QUIC, GraphQL, and HttpBin

The sample application now includes specific HTTP task classes to demonstrate diverse networking scenarios. CronetHttpTask introduces support for Google's Cronet engine with QUIC protocol enabled, allowing users to observe HTTP/3 traffic. GraphQlTask integrates Apollo Client and Retrofit to generate GraphQL queries and REST calls against the Rick and Morty API. HttpBinHttpTask provides a comprehensive suite of requests to httpbin.org, covering various HTTP methods, status codes, compression, and redirects. These additions expand the sample's ability to test Chucker's interception capabilities across different protocols and libraries.

sample/src/main/kotlin/com/chuckerteam/chucker/sample · high confidence

Removals

ChuckInterceptor removed from library

The ChuckInterceptor class, which previously handled HTTP request/response logging, notification display, and data persistence via Cupboard, has been deleted from the library. This removes the core mechanism for intercepting OkHttp calls and storing transaction details in the local database.

library/src/main/java/com/github/jgilfelt/chuck · high confidence

Removal of legacy Android UI components

The \ChuckMainActivity\, \TransactionAdapter\, and \TransactionListFragment\ classes have been removed from the library. This eliminates the legacy implementation that used \AppCompatActivity\, \CursorAdapter\, and \LoaderManager\ to display HTTP transactions in a list, indicating a shift away from these specific Android framework components in the UI layer.

library/src/main/java/com/github/jgilfelt/chuck/ui · high confidence

Removal of legacy data persistence and model classes

The \ChuckContentProvider\, \ChuckDbOpenHelper\, \HttpTransaction\, \HttpHeader\, and \JsonConvertor\ classes have been removed from the \library/src/main/java/com/github/jgilfelt/chuck/data\ package. This eliminates the previous implementation that relied on Android's \ContentProvider\ and Cupboard ORM for storing HTTP transaction data, indicating a shift away from this specific local storage and data-access mechanism.

library/src/main/java/com/github/jgilfelt/chuck/data · high confidence

Removal of sample application source code

The sample application module located in sample/src/main/java has been removed. This deletes the Java source files for the sample app, including the main activity, the HTTP service implementation using Retrofit and OkHttp, and utility classes for database browsing, effectively removing the sample app from the project.

sample/src/main/java · high confidence

Architecture

Introduces a new repository layer for HTTP transaction data

The library now uses a dedicated repository pattern to manage HTTP transaction data, introducing the \HttpTransactionRepository\ interface and its \HttpTransactionDatabaseRepository\ implementation backed by Room. This change centralizes data operations such as inserting, updating, deleting, and filtering transactions, and provides a \RepositoryProvider\ singleton to initialize and access this repository. Users benefit from a cleaner separation of concerns and more maintainable data access logic within the Chucker library.

library/src/main/kotlin/com/chuckerteam/chucker/internal/data/repository · high confidence

Behavioural changes

HAR export data model migrated to Kotlin

The HAR (HTTP Archive) export functionality has been rewritten in Kotlin, replacing the previous Java implementation. This change introduces a new set of internal data classes (Har, Log, Entry, Request, Response, etc.) in the \library/src/main/kotlin/com/chuckerteam/chucker/internal/data/har\ package to structure the export data according to the HAR 1.2 specification. For users, this ensures that exported HAR files are generated using the modern Kotlin codebase while maintaining compatibility with the standard HAR format for debugging and analysis.

library/src/main/kotlin/com/chuckerteam/chucker/internal/data/har · high confidence

Introduce structured HTTP header serialization and GraphQL detection fields

The data layer now uses a dedicated \HttpHeader\ data class to serialize request and response headers, replacing previous string-based storage with structured JSON lists for better parsing and formatting. Additionally, \HttpTransaction\ and \HttpTransactionTuple\ now include \graphQlDetected\ and \graphQlOperationName\ fields to identify and display GraphQL operations, and \HttpTransaction\ adds a \hostIp\ column to store the server's IP address.

library/src/main/kotlin/com/chuckerteam/chucker/internal/data/entity · high confidence

Redesigned transaction detail view with host IP display and URL encoding controls

The transaction detail screen has been rebuilt using a new Activity and Fragment architecture, introducing a tabbed interface with Overview, Request, and Response sections. Users can now view the Host IP address in the Overview tab, toggle URL encoding via a new menu option, and access a long-press copy menu to choose between raw or formatted body text. The change also includes a fix for a memory leak in the transaction activity by properly detaching TabLayout callbacks.

library/src/main/kotlin/com/chuckerteam/chucker/internal/ui/transaction · high confidence

Refactor database layer to use modern Room migration API

The internal database implementation has been refactored to use the modern Room migration API. The database schema version has been bumped to 11, and the migration strategy now defaults to destructive migration (dropping all tables) to simplify schema updates. The data access layer has been restructured into dedicated Kotlin files for the database singleton and the transaction DAO, which now exposes queries for retrieving, filtering, and managing HTTP transactions, including support for GraphQL operation names.

library/src/main/kotlin/com/chuckerteam/chucker/internal/data/room · high confidence

Refactored UI architecture and added multi-select transaction management

The internal UI layer has been restructured by introducing a BaseChuckerActivity to centralize lifecycle management and fix a memory leak in Toast handling by using the application context. The main transaction list now supports multi-select operations, allowing users to select multiple transactions via long-press or toggle actions, which enables batch operations such as exporting selected items or deleting them together. Additionally, the UI has been updated to properly handle Android 13 notification permissions and applies window insets for better layout compatibility with system bars.

library/src/main/kotlin/com/chuckerteam/chucker/internal/ui · high confidence

Refined ProGuard rules for Gson and internal data entities

The library's ProGuard configuration has been updated to explicitly preserve the \HttpTransaction\ entity used for internal data storage and to allow shrinking and obfuscation of \com.google.gson.reflect.TypeToken\ and its subclasses. This change addresses potential issues with code minification (such as those encountered with \LinearLayoutManager\ or Gson serialization) by ensuring critical reflection-based classes are not incorrectly removed or obfuscated during release builds.

library · high confidence

Sample app UI migrated to Jetpack Compose

The Chucker sample application's user interface has been rewritten using Jetpack Compose and Material 3, replacing the previous XML-based implementation. This change introduces a modern UI with responsive layouts that adapt to different screen sizes (compact vs. expanded), supports system dark mode automatically, and includes new accessibility features such as merged semantics for radio buttons to improve TalkBack navigation. The sample app now uses Compose-specific components like Scaffold and TopAppBar, along with a dedicated theme definition for consistent styling across light and dark modes.

sample/src/main/kotlin/com/chuckerteam/chucker/sample/compose · high confidence

Update sample app configuration for Kotlin DSL and dependency warnings

The sample app's ProGuard configuration now references the Kotlin DSL build script (build.gradle.kts) instead of the Groovy version, and includes rules to suppress warnings for okio and retrofit2 dependencies.

sample · high confidence

Test coverage

Added UI tests for the sample app's main activity; Added instrumentation tests for SpanTextUtil; Added test utilities for Chucker interceptor and HAR generation; Added tests for ChuckerInterceptor API behaviors; Added unit tests for Chucker UI components; Added unit tests for HAR data model components; Added unit tests for HTTP transaction repository and repository provider; Added unit tests for HttpTransactionTuple entity; Added unit tests for internal support utilities; Added unit tests for the HTTP transaction data access object; Removed obsolete unit test file.

Dependencies

Gradle wrapper upgraded to version 9.8.0

The Gradle wrapper has been updated from version 2.14.1 to 9.8.0. This upgrade brings the build system to a significantly newer version, which may affect build performance, compatibility with existing plugins, and the behavior of Gradle tasks. Users should ensure their development environment supports this version and be aware that any custom Gradle scripts or plugins may need updates to remain compatible.

gradle · high confidence

Migrate to Gradle Kotlin DSL and Version Catalogs

The project build system has been migrated from Groovy to Kotlin DSL (build.gradle.kts) and now uses a central version catalog (gradle/libs.versions.toml) to manage dependencies and plugins. This change introduces significant version updates, including Android Gradle Plugin 9.4.1, Kotlin 2.4.20, OkHttp 5.4.0, and JUnit 6.1.3, while also enforcing Java 17 bytecode compatibility for the published library.

(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 43 → 63 (+20.4)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.1)
  • Architecture 94 → 88 (-5.8)
  • Maturity 51 → 59 (+7.4)
  • Readiness 32 → 59 (+27.2)
  • Security 33 → 62 (+28.4)

Resolved (41)

  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • Duplicated block (55 lines × 2) (sample/src/main/kotlin/com/chuckerteam/chucker/sample/compose/ChuckerSampleControls.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)
  • High: security finding (details withheld)
  • …and 21 more

New (49)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: contradicts the code (docs/migrating-from-chuck.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (33 lines × 2) (sample/src/main/kotlin/com/chuckerteam/chucker/sample/compose/ChuckerSampleControls.kt)
  • High secret: WD-SECRET-0004 (sample/debug.keystore)
  • 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 29 more

Changes since last survey

  • 29 commits — 19 feature/other, 10 fixes

By area

  • gradle/libs.versions.toml — 19 commits
  • library/src — 6 commits
  • gradle/wrapper — 3 commits
  • (root) — 1 commit

Notable commits

  • fix: Revert translated export markers to English for es, ja, ko, ru (#1689)
  • fix: fix(deps): update apollo graphql packages to v5.2.0 (#1691)
  • fix: fix(deps): update dependency androidx.appcompat:appcompat to v1.8.0 (#1664)
  • fix: fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.12.0 (#1666)
  • fix: fix(deps): update dependency androidx.compose.ui:ui-test-junit4 to v1.12.1 (#1686)
  • fix: fix(deps): update dependency androidx.fragment:fragment-ktx to v1.9.0 (#1667)
  • fix: fix(deps): update dependency androidx.fragment:fragment-ktx to v1.9.1 (#1694)
  • fix: fix(deps): update dependency com.apollographql.apollo:apollo-runtime to v5.1.0 (#1672)
  • fix: fix(deps): update junit-framework monorepo to v6.1.3 (#1662)
  • fix: fix(deps): update kotlin monorepo to v2.4.20 (#1684)
  • change: Add Arabic translations (#1682)
  • change: Add Hindi translations (#1690)
  • change: Add Urdu translations (#1681)
  • change: Add Uzbek and Kazakh translations (#1680)
  • change: Feat: Add Host IP address in the overview and sharable (#1180)
  • change: chore(deps): update androidgradleplugin to v9.3.2 (#1673)
  • change: chore(deps): update androidgradleplugin to v9.4.1 (#1692)
  • change: chore(deps): update dependency com.android.library to v9.4.0 (#1677)
  • change: chore(deps): update dependency com.google.devtools.ksp to v2.3.12 (#1685)
  • change: chore(deps): update dependency com.squareup.wire to v6.4.6 (#1670)
  • …and 9 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

ChuckerTeam/chucker 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 0f6727941ea1fb3921a22a1d18d311c5266b5b02 — 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.