This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
JsonCMP is a Kotlin Multiplatform (KMP) library providing JSON viewer and editor composables for Android, iOS, and JVM Desktop. Published to Maven Central as dev.skymansandy:json-cmp (currently 1.0.0-RC2). All public APIs are marked @ExperimentalJsonCmpApi.
# Build
./gradlew build # Full build
./gradlew :json-cmp:jvmTest # Run JVM tests
./gradlew :json-cmp:iosSimulatorArm64Test # Run iOS simulator tests
./gradlew :json-cmp:jvmTest --tests "fully.qualified.TestClass" # Single test class
# Code Quality
./gradlew detektAll # Detekt static analysis (strict: 0 issues allowed)
./gradlew apiCheck # Binary compatibility validation
# Coverage
./gradlew :json-cmp:jvmTest koverXmlReport # JVM tests + coverage report
# Sample App
./gradlew :androidApp:assembleRelease # Build sample Android APK
# Publishing (requires credentials via env vars)
./gradlew publishAndReleaseToMavenCentral --no-configuration-cache
# Documentation
mkdocs build # Build docs site (requires: pip install mkdocs-material)Modules:
json-cmp— Core KMP library (the published artifact)composeApp— Multiplatform Compose sample app (Android/iOS/Desktop)androidApp— Native Android sample app
Library structure (json-cmp/src/commonMain):
domain/— Core logic: JSON parser, serializer, syntax highlighter, Redux-like state store (JsonHolderImpldispatchingJsonAction), line-based virtualization,JsonNodetree modelui/viewer/—JsonViewerCMPcomposable +JsonViewerState(read-only, virtualized)ui/editor/—JsonEditorCMPcomposable +JsonEditorState(editable, with validation)ui/common/— Shared UI components (highlighter, gutter, line view)theme/— Built-in themes (Dark, Light, Monokai, Dracula, Solarized Dark) +JsonTheme.Custom
Key patterns:
- Observable state holders (
@Stable,mutableStateOf, Flow) — no callback-based API - Virtualized rendering via line calculation for large JSON
rememberJsonViewerState/rememberJsonEditorStateuse Compose retain API for lifecycle
Platform targets: Android (minSdk 24, compileSdk 36), iOS (Arm64 + Simulator), JVM
- Detekt with auto-correct, strict mode (maxIssues: 0), baseline in
detekt-baseline.xml @Composablefunctions are exempt from LongMethod and LongParameterList rules- Binary compatibility validator tracks API surface at
json-cmp/api/jvm/json-cmp.api - Kotlin code style:
official
- API compatibility check (
apiCheck) - Detekt code quality
- JVM tests
- iOS simulator tests
Managed in gradle/libs.versions.toml: Kotlin 2.3.10, Compose Multiplatform 1.10.2, AGP 9.1.0, Gradle 9.3.1