mirror of
https://github.com/bitsycore/compose-desktop-native.git
synced 2026-10-05 10:47:26 +00:00
Closes the request in issue #4. org.jetbrains.compose.material3.adaptive:* 1.3.0-rc01 publishes ios_arm64 / ios_simulator_arm64 / macos_arm64 and nothing else - no linux, no mingw. (It does carry macosArm64, which answers the reporter's open question.) All four artifacts are now vendored and built for every desktop-native target, with ZERO source edits. Two things made it a pure re-target: - every platform actual the native legs need already exists upstream: adaptive/nonAndroidMain (calculatePosture), adaptive-layout/skikoMain (~75 l10n tables + Strings + the drag handle) and adaptive-layout/nativeMain (identityHashCode, isGraphicsLayerElement) - androidx.window:window-core - the dependency `adaptive` api-exposes and the obvious suspect for the apple-only publication - has shipped linux_x64 / linux_arm64 / mingw_x64 / macos_arm64 klibs all along, under BOTH the google and jetbrains coordinates So the artifacts were missing only because upstream never enabled the targets, not because anything blocked them. 125 files vendored off the existing COMPOSE_CORE_REF pin - no new SET_REPO. Upstream's skikoMain lands in src/vendor/native/ beside upstream's own nativeMain; the two actualise disjoint expects so they share one source set. Both bridges substitute all four coordinates, so consumers keep declaring the official org.jetbrains.compose.material3.adaptive:* coords. Verified: all four compile for mingwX64 + linuxX64 + linuxArm64, API dumps generated, vendor-clean and audit-exclusions pass, and `demo --screen=Adaptive` renders a live ListDetailPaneScaffold with the window size class resolving correctly. adaptive-navigation3 builds and dumps API but has no demo screen yet, so its nav3 SceneStrategy path is unproven at runtime. Two notes for later: - the new demo screen hit the granular-metadata trap documented in CLAUDE.md: because `adaptive` is substituted on native configs, KGP drops its transitives from the commonMain metadata classpath, so window-core had to be declared DIRECTLY in demo's commonMain - demo's JVM parity leg moves navigation3-ui 1.2.0-alpha02 -> 1.1.2 to follow CMP 1.12.1's navigation3 reset onto the 1.1 line
163 lines
8.2 KiB
TOML
163 lines
8.2 KiB
TOML
# ==========================================================================
|
|
# VERSION POLICY - read before bumping anything
|
|
# ==========================================================================
|
|
#
|
|
# 1. If Compose Multiplatform integrates it, pin what CMP ships. For the
|
|
# androidx mirrors that means the JETPACK version CMP's release notes map
|
|
# its org.jetbrains.androidx.* artifact to - the port consumes the GOOGLE
|
|
# coordinates, never the mirrors (mixing both duplicates every class).
|
|
# Do not upgrade these past CMP on a hunch: the vendored sources under
|
|
# src/vendor were compiled against them.
|
|
# 2. If CMP does not integrate it, pin the latest release.
|
|
# 3. Deliberate exceptions to (1) are allowed, but each one is COMMENTED with
|
|
# why it is safe. Today there is one: androidxSavedState.
|
|
#
|
|
# Keep in lockstep with the upstream git refs in
|
|
# scripts/compose-fork/compose.properties, and with the "Pinned versions"
|
|
# tables in README.md.
|
|
#
|
|
# ==========================================================================
|
|
|
|
[versions]
|
|
|
|
# ============
|
|
# Toolchain
|
|
|
|
# Policy 2 (not something CMP dictates): latest release. Newer than the Kotlin
|
|
# CMP 1.12.1 is itself built with (2.3.20), which is fine - Kotlin/Native reads
|
|
# older klibs, and the whole port + both sample apps compile and link clean on
|
|
# 2.4.20 with no klib API diff against 2.4.0.
|
|
kotlin = "2.4.20"
|
|
|
|
# ============
|
|
# Compose Multiplatform (CMP-pinned - policy 1)
|
|
#
|
|
# compose = ui / foundation / animation / material
|
|
# composeMaterial3 = material3, which rides its own train upstream:
|
|
# 1.12.0-alpha03 IS what CMP 1.12.1 ships
|
|
# (Jetpack material3 1.5.0-alpha22)
|
|
# composeMaterial3Adaptive = material3-adaptive, its own train again
|
|
# (CMP 1.12.1 maps it to Jetpack adaptive 1.3.0-beta02)
|
|
# composeRuntime = the official runtime klibs, never substituted
|
|
#
|
|
# Consumed by the bridge plugin (stamped into bridge-version.properties and
|
|
# exposed to consumers) and by demo / apidemo / material-symbols.
|
|
|
|
compose = "1.12.1"
|
|
composeMaterial3 = "1.12.0-alpha03"
|
|
# material3-adaptive rides its own train too. Used ONLY for the apps' JVM parity
|
|
# leg - the native leg gets the vendored :compose:material3:adaptive:* modules.
|
|
composeMaterial3Adaptive = "1.3.0-rc01"
|
|
composeRuntime = "1.12.1"
|
|
|
|
# ============
|
|
# Skia
|
|
|
|
# CMP 1.12.1 pins skiko 0.150.1, so macOS/Linux use exactly that.
|
|
skiko = "0.150.1"
|
|
# The bitsycore skiko FORK for mingwX64 (skiko + Skia inside
|
|
# skiko-windows-x64.dll). Its `-mingw.N` base MUST stay equal to `skiko` above.
|
|
# Overridable per-build with -PskikoMingwVersion.
|
|
skikoMingw = "0.150.1-mingw.2"
|
|
|
|
# ============
|
|
# AndroidX (CMP-pinned - policy 1)
|
|
|
|
androidxLifecycle = "2.11.0"
|
|
androidxCollection = "1.5.0"
|
|
# material3-adaptive api-exposes window-core. GOOGLE coordinates like the rest of
|
|
# the androidx stack here - both sets publish linux + mingw + macos for this one.
|
|
androidxWindow = "1.5.0"
|
|
androidxGraphicsShapes = "1.1.0"
|
|
# CMP ships org.jetbrains.androidx.navigationevent 1.1.0 == Jetpack 1.1.1; 1.1.2
|
|
# is the latest PATCH of that same minor, so it stays inside policy 1.
|
|
androidxNavigationEvent = "1.1.2"
|
|
# CMP 1.12.1 moved navigation3 BACKWARDS off the alpha line onto stable 1.1.7
|
|
# (redirectversions.toml; upstream re-checked navigation3 out of release/1.11).
|
|
# The vendored :navigation3:navigation3-ui is that same 1.1.7 source, so the
|
|
# runtime has to follow it down - a 1.2.0-alpha runtime no longer matches.
|
|
navigation3Runtime = "1.1.7"
|
|
# EXCEPTION to policy 1, deliberate: CMP 1.12.1 builds against savedstate 1.5.0-alpha01,
|
|
# and androidx.lifecycle 2.11.0 *requires* 1.4.0 - but only as a MINIMUM, so
|
|
# 1.5.0 resolves with no conflict. Taken on purpose to hand consumers the newer
|
|
# savedstate API; the delta is additive within the same major.
|
|
androidxSavedState = "1.5.0"
|
|
|
|
# ============
|
|
# Vendored ecosystem libraries (not in CMP - latest release, policy 2)
|
|
#
|
|
# These numbers double as the upstream git refs the sources are vendored from
|
|
# (KOIN_REF / COIL_REF in scripts/compose-fork/compose.properties) - bump both.
|
|
|
|
koin = "4.2.2"
|
|
coil = "3.6.3"
|
|
|
|
# ============
|
|
# Infrastructure (not in CMP - latest release, policy 2)
|
|
|
|
kotlinxCoroutines = "1.11.0"
|
|
kotlinxDateTime = "0.8.0"
|
|
kotlinxSerialization = "1.11.0"
|
|
kotlinxIoOkio = "0.9.1"
|
|
okio = "3.18.2"
|
|
ktor = "3.6.0"
|
|
|
|
[libraries]
|
|
|
|
# ============
|
|
# Skia
|
|
|
|
skiko = { module = "org.jetbrains.skiko:skiko", version.ref = "skiko" }
|
|
|
|
# ============
|
|
# AndroidX - used AS-IS (these publish real Kotlin/Native desktop klibs, so
|
|
# nothing here is vendored or substituted). GOOGLE coordinates throughout: the
|
|
# org.jetbrains.androidx.* mirrors carry the same classes, so pulling both puts
|
|
# every class on the path twice.
|
|
|
|
androidx-collection = { module = "androidx.collection:collection", version.ref = "androidxCollection" }
|
|
androidx-window-core = { module = "androidx.window:window-core", version.ref = "androidxWindow" }
|
|
androidx-graphics-shapes = { module = "androidx.graphics:graphics-shapes", version.ref = "androidxGraphicsShapes" }
|
|
androidx-lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidxLifecycle" }
|
|
androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidxLifecycle" }
|
|
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" }
|
|
androidx-lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "androidxLifecycle" }
|
|
androidx-lifecycle-viewmodel-savedstate = { module = "androidx.lifecycle:lifecycle-viewmodel-savedstate", version.ref = "androidxLifecycle" }
|
|
androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "navigation3Runtime" }
|
|
androidx-navigationevent-compose = { module = "androidx.navigationevent:navigationevent-compose", version.ref = "androidxNavigationEvent" }
|
|
androidx-savedstate = { module = "androidx.savedstate:savedstate", version.ref = "androidxSavedState" }
|
|
androidx-savedstate-compose = { module = "androidx.savedstate:savedstate-compose", version.ref = "androidxSavedState" }
|
|
|
|
# ============
|
|
# Koin. koin-core publishes mingwX64 + linux klibs and is consumed from Maven
|
|
# as-is; only the viewmodel / compose layers are vendored (see koin/).
|
|
|
|
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
|
|
|
|
# ============
|
|
# Infrastructure
|
|
|
|
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
|
|
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinxCoroutines" }
|
|
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinxCoroutines" }
|
|
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDateTime" }
|
|
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
|
|
# coil-network-ktor3 bridges ktor's kotlinx-io sinks onto okio.
|
|
kotlinx-io-okio = { module = "org.jetbrains.kotlinx:kotlinx-io-okio", version.ref = "kotlinxIoOkio" }
|
|
okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
|
|
|
|
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
|
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" }
|
|
ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
|
|
ktor-client-curl = { module = "io.ktor:ktor-client-curl", version.ref = "ktor" }
|
|
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
|
|
|
[plugins]
|
|
|
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
|
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
|
kotlin-plugin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
|
kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
|
compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "compose" }
|
|
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.18.1" }
|