Home

compose-tvos

A Gradle settings plugin that adds tvOS (tvosArm64/tvosSimulatorArm64) support to JetBrains Compose Multiplatform projects — without JetBrains’s own artifacts needing to support tvOS yet.

  • How it works — the architecture: variant injection, official-first resolution, plugin-marker interception, the version manifest.
  • Supported versions — the full version matrix and what “covered groups” means.
  • App embedding — building and running your KMP app on a real tvOS device or simulator, including the Compose Resources bundle layout.
  • Library authors — adding tvOS to your own Kotlin Multiplatform library.
  • Troubleshooting — WARN blocks, strictMode, caches, offline behavior.

Quickstart

// settings.gradle.kts
plugins {
    id("dev.sajidali.compose-tvos") version "1.4.2"
}

That is the entire required setup: the plugin resolves from the Gradle Plugin Portal, and once applied it takes care of the rest (including adding mavenCentral() to plugin resolution for the tvOS-patched Compose Gradle plugin it substitutes). If your build declares its own pluginManagement.repositories block, keep gradlePluginPortal() and mavenCentral() in it.

That’s it — no other settings are required. Add tvosArm64()/tvosSimulatorArm64() targets to your Kotlin Multiplatform module as you normally would:

// build.gradle.kts
kotlin {
    tvosArm64()
    tvosSimulatorArm64()
}

…and your existing Compose dependency declarations resolve for tvOS too, with no changes:

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation(compose.runtime)
            implementation(compose.foundation)
            implementation(compose.material3)
            implementation(compose.components.resources)
        }
    }
}

See the full list of redirected dependency groups in Supported versions.

Requirements

  • Gradle 8.0+
  • Compose Multiplatform 1.12.0+. The fork publishes JetBrains’ exact versions for the 1.12 line only; older Compose lines are not back-published and will fail to resolve rather than being silently substituted. See Version policy.
  • Kotlin 2.3.20+ for consumer projects targeting tvOS. The fork’s published Compose/AndroidX and Koin klibs are compiled with Kotlin/Native 2.3.x (abi_version=2.3.0) — an older Kotlin version’s compiler is not ABI-compatible with these artifacts on tvOS targets. Non-tvOS targets in the same project are unaffected by this constraint (they never touch a dev.sajidali artifact).
  • Coil 3.6.1 needs Kotlin 2.4.x (upstream Coil 3.6.1 is compiled with Kotlin 2.4.10, abi_version=2.4.0); projects on Kotlin 2.3.x should stay on io.coil-kt.coil3:*:3.5.0, which the fork also publishes.

    // settings.gradle.kts
    dependencyResolutionManagement {
        repositories {
            google()
            mavenCentral()
        }
    }
    

Demo

A working, canonical tvOS Compose Multiplatform consumer of this plugin lives in demo/ in the repository: compose.runtime/foundation/material3/components.resources, navigation-compose, lifecycle-viewmodel-compose, tvOS + iOS targets, and Compose Resources.