Skip to content

Multiplatform Mastery: First-Class Support for KMP Targets (iOS, Desktop, Web, Native) #113

Description

@teogor

Description

Ensure the winds plugin provides a seamless, target-agnostic experience across all Kotlin Multiplatform (KMP) targets, including mobile (iOS/Android), desktop (JVM/Native), web (Wasm/JS), and linux.

Problem Statement

While the core of winds uses robust tools like vanniktech/gradle-maven-publish-plugin, some of the internal automation logic is currently biased toward Android modules. In a modern KMP ecosystem, the plugin must treat all targets as first-class citizens.

Proposed Solution

Refactor the internal plugin application and configuration logic to be fully KMP-aware, ensuring that publishing, documentation, and API validation work across the entire multiplatform surface.

Key Enhancements

  1. Agnostic Publishing: Decouple the maven-publish automation from Android-specific checks. If org.jetbrains.kotlin.multiplatform is present, winds should automatically orchestrate the publication of all configured targets.
  2. KMP Documentation Aggregation: Automatically configure Dokka to handle multiplatform source sets, ensuring that the generated winds documentation reflects the entire cross-platform API.
  3. Target-Aware API Diffing: Ensure the Binary Compatibility features track changes across all platform-specific outputs (JVM, JS, Native).
  4. Platform Metadata Expansion: Provide a DSL for platform-specific metadata, such as CocoaPods configurations for iOS or NPM details for JS targets.

Implementation Details

  • Refactor MavenPublishUtils.kt to use target-agnostic triggers.
  • Update WindsPlugin.kt to properly handle KMP source set hierarchies.
  • Ensure the windsCheck quality gate validates all active KMP targets.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions