Skip to content

Add Kotlin Multiplatform support and enhance caching integrations#1

Merged
logickoder merged 14 commits into
mainfrom
kmp
Apr 26, 2026
Merged

Add Kotlin Multiplatform support and enhance caching integrations#1
logickoder merged 14 commits into
mainfrom
kmp

Conversation

@logickoder

Copy link
Copy Markdown
Owner

Summary

Library — converted to Kotlin Multiplatform (Maven Central distribution):

  • retrostash-core, retrostash-annotations, retrostash-ktor → android, jvm, ios{X64,Arm64,SimulatorArm64}, wasmJs.
  • retrostash-okhttp → android, jvm (OkHttp is JVM-only); AndroidRetrostashStore + RetrostashOkHttpAndroid factory split into androidMain.
  • iOS distribution: XCFramework built from retrostash-ktor (exports core + annotations) + Package.swift for SPM consumption.
  • Publishing: com.vanniktech.maven.publish to Sonatype Central Portal; JitPack removed.
  • AGP 9 KMP migration: KMP modules use com.android.kotlin.multiplatform.library; required new hierarchy template + node/yarn/binaryen Ivy repos in settings.gradle.kts.

Bug fixes (with regression tests):

  • InMemoryRetrostashStore thread-safety — kotlinx.coroutines.sync.Mutex guards mutations + concurrent test.
  • Ktor plugin: invalidate now gated on 2xx (was unconditional); response persistence wired for @CacheQuery on 2xx via response.call.save(); logger plumbing.
  • Ktor runtime: invalidate(...) resolves placeholder templates against bindings (parity with OkHttp interceptor) — fixes mutation not invalidating cache.

Playground app — Compose Multiplatform:

  • Split :app (legacy android.application) into :composeApp (KMP-library) + :androidApp (android.application). Avoids AGP 9 incompatibility with kotlin.multiplatform + android.application in same module.
  • Targets: android, jvm desktop, ios*, wasmJs (browser).
  • Three transport demos via segmented switcher: Ktor (all platforms), OkHttp (android + desktop), Retrofit (android-only). Disabled platforms show inline hint.
  • iOS shell: iosApp/ Xcode project consumes composeApp framework via embedAndSignAppleFrameworkForXcode Gradle task.
  • jvmAndAndroidMain shared dir for OkHttpDemoEngine (used by both desktop + android).

Other:

  • :retrostash legacy module deleted (replaced by KMP modules).
  • release.yml rewritten — macos-latest runner, runs full KMP test suite, builds + zips XCFramework, computes SHA-256, patches Package.swift, publishes via vanniktech, attaches XCFramework to GitHub Release.
  • update_readme_version.py updates per-module Maven Central coords (was JitPack-style single coord).
  • CONTRIBUTING.md + development.md rewritten for KMP/Maven Central/SPM workflow.
  • README rewritten with module table, per-platform install (Gradle + SPM), 0.0.4 → 0.0.5 migration table.
  • Heap bumped -Xmx2g → -Xmx6g (iOS framework link OOM'd).
  • Compose Multiplatform 1.10.3, Kotlin 2.3.20, AGP 9.1.0.

Test plan

  • ./gradlew :retrostash-core:jvmTest :retrostash-core:iosSimulatorArm64Test passes
  • ./gradlew :retrostash-okhttp:jvmTest passes
  • ./gradlew :retrostash-ktor:jvmTest :retrostash-ktor:iosSimulatorArm64Test passes (incl. invalidate-with-bindings + 5xx-no-invalidate + persistence)
  • ./gradlew :retrostash-annotations:assemble passes
  • ./gradlew :composeApp:assemble :androidApp:assembleDebug :composeApp:desktopMainClasses :composeApp:compileKotlinIosSimulatorArm64 :composeApp:compileKotlinWasmJs all succeed
  • ./gradlew :retrostash-ktor:assembleRetrostashReleaseXCFramework produces retrostash-ktor/build/XCFrameworks/release/Retrostash.xcframework
  • ./gradlew publishToMavenLocal emits per-target artifacts under ~/.m2/repository/dev/logickoder/retrostash-{core,annotations,ktor,okhttp}/
  • :androidApp:installDebug runs on emulator; switch between Ktor / OkHttp / Retrofit tabs; query → mutate → re-query shows cache-hit then network refresh
  • :composeApp:run launches desktop window; Ktor + OkHttp tabs work
  • :composeApp:wasmJsBrowserDevelopmentRun opens browser; only Ktor tab available
  • iOS: follow iosApp/README.md, ⌘R in Xcode; only Ktor tab available
  • Maven Central secrets configured in repo (MAVEN_CENTRAL_USERNAME, MAVEN_CENTRAL_PASSWORD, SIGNING_KEY, SIGNING_KEY_ID, SIGNING_KEY_PASSWORD) before triggering release workflow

Migration note for consumers

Coords change from com.github.logickoder:retrostash:0.0.4 (JitPack) to dev.logickoder:retrostash-{core,annotations,ktor,okhttp}:<v> (Maven Central). Migration table in README.

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…dyBytes support

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…s for metadata handling

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…ata handling

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…d OkHttp integration

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…integration

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…event logging and controls

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…nce logging

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…stsApi

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…y and updating response handling

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
…r consistency

Signed-off-by: Jeffery Orazulike <chukwudumebiorazulike@gmail.com>
@logickoder logickoder self-assigned this Apr 26, 2026
Copilot AI review requested due to automatic review settings April 26, 2026 13:02
@logickoder logickoder added the enhancement New feature or request label Apr 26, 2026
@logickoder logickoder merged commit 7f25a09 into main Apr 26, 2026
5 checks passed
@logickoder logickoder removed the request for review from Copilot April 26, 2026 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant