Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Kotlin 2.3.20 makes two separate interoperability changes: it introduces an experimental Kotlin/Native mode for importing C and Objective-C libraries, and lets JavaScript or TypeScript code implement exported Kotlin interfaces. The C/Objective-C mode is a testable alternative to existing import support; the TypeScript feature requires an explicit compiler opt-in. Neither change creates one universal interop system across native and web targets.

What “harmonizes” means in Kotlin 2.3.20

The release addresses two different boundaries. Kotlin/Native imports C and Objective-C libraries into Kotlin; Kotlin/JS can now accept JavaScript- or TypeScript-side implementations of Kotlin interfaces that Kotlin exports. The platforms, direction of data flow, maturity, and enablement differ.

Change Platform and direction Status and enablement
Revised C/Objective-C interoperability mode Kotlin/Native imports C or Objective-C libraries into Kotlin Experimental; try the compiler option described in the Kotlin 2.3.20 release notes.
Implement exported Kotlin interfaces from TypeScript Kotlin/JS exports an interface for a JavaScript/TypeScript implementation to satisfy Opt-in compiler flag: -Xenable-implementing-interfaces-from-typescript.
SWC delegated transpilation Kotlin/JS delegates transpilation to SWC Separate experimental feature; set kotlin.js.delegated.transpilation=true in gradle.properties.

What changes for C and Objective-C libraries?

Kotlin/Native already supported importing C and Objective-C libraries before 2.3.20. The new feature is a revised, experimental interoperability mode—not the arrival of native library imports. JetBrains describes the motivation as a compatibility problem: a Kotlin Multiplatform library built with one Kotlin version and importing C or Objective-C could be difficult or impossible for a project using an earlier compiler to consume.

Teams whose KMP applications or libraries rely on those imports can test the new mode using the compiler option documented in the release notes. Because it is experimental, treat the result as something to evaluate in your own build and dependency setup, not as a stabilized migration guarantee.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How can TypeScript implement a Kotlin interface?

Kotlin 2.3.20 removes a previous limitation: an exported Kotlin interface could appear in generated TypeScript definitions, but TypeScript code could not implement it. With the new opt-in, a TypeScript implementation can be passed across the exported boundary to Kotlin code that accepts the interface. This helps when a Kotlin/JS API defines a contract that a web-side implementation needs to fulfill; it does not mean every Kotlin declaration has seamless TypeScript interop.

Enable the compiler option

  1. In the Kotlin/JS Gradle configuration, add -Xenable-implementing-interfaces-from-typescript to the Kotlin compiler free arguments. The official release example shows the relevant configuration and interface pattern.
  2. Export the Kotlin interface with @JsExport and expose a Kotlin function that accepts that interface.
  3. Implement the generated interface contract in TypeScript, then pass that implementation to the Kotlin function. Check the generated declarations and your build output to confirm the boundary matches your intended API.

The compiler flag is the switch for this capability; it is not the setting for C/Objective-C interoperability or SWC.

What is SWC support, and is it the same feature?

No. Kotlin 2.3.20 also adds experimental support for SWC as a delegated Kotlin/JS transpilation platform. Set kotlin.js.delegated.transpilation=true in gradle.properties to enable it. The release notes describe the goal as delegating conversion of newer JavaScript syntax to an external tool while the Kotlin compiler focuses on current JavaScript features. Stabilization is described as a future plan, so this is also an experiment rather than a settled default.

SWC does not enable TypeScript implementations of Kotlin interfaces: that feature uses the compiler flag above. The release treats them as distinct Kotlin/JS changes.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should you try the new interoperability features?

  • Use C or Objective-C from Kotlin/Native: consider testing the experimental mode if compiler-version compatibility has made your KMP library difficult to consume. Keep the current import behavior and your supported compiler range in mind while evaluating it.
  • Need a TypeScript implementation of a Kotlin API contract: try the interface feature with its explicit compiler opt-in, and validate the generated TypeScript declarations against your implementation.
  • Want delegated JavaScript transpilation: assess SWC separately by enabling its Gradle property; it is not required for either of the interface or native-library changes.

These are release-specific capabilities, not evidence that Kotlin has replaced TypeScript or unified native and web interop. The right choice depends on which boundary your project needs to cross.

Release timing and upgrading

Kotlin 2.3.20 was released on March 16, 2026. Kotlin 2.3.21 followed on April 23, 2026 as a bug-fix release for 2.3.20, according to the Kotlin release history. For a present-day upgrade, check the latest suitable patch in the 2.3.20 line rather than assuming 2.3.20 is still the newest patch. JetBrains says Kotlin is included in current IntelliJ IDEA and Android Studio versions and directs developers to change the Kotlin version in build scripts; command-line compiler users can use the GitHub release page linked from the release announcement.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Other changes in 2.3.20 worth knowing

The release is broader than interop. Its other changes include Gradle 9.3.0 compatibility, Kotlin/JVM compilation using the Build Tools API by default, simplified Maven setup, name-based destructuring declarations, an immutable-copy API for Map.Entry, the Lombok compiler plugin moving to Alpha, and JPA plugin improvements. These may matter to an upgrade even if your project does not use the C or TypeScript features.

On the JVM, 2.3.20 adds support for Vert.x @Nullable annotations and reports nullability mismatches as warnings by default, with an option to make checks strict. It also recognizes Java @Unmodifiable and @UnmodifiableView annotations so returned collections are treated as read-only in Kotlin. Assigning one to a mutable Kotlin collection produces a warning; the release notes say that warning is scheduled to become an error in Kotlin 2.5.0.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Kotlin/Wasm adds @nativeInvoke for wasmJs, allowing an external JavaScript object to be called through Kotlin’s invoke operator. The release notes characterize this as temporary pending a stable Kotlin/Wasm–JavaScript interop design; it may change or be removed.

How to interpret the performance figures

JetBrains reports several measurements alongside the release. They are tied to its described benchmarks, workloads, or builds—not a promise of the same result in every project.

  • Up to 4.6 times faster string interpolation in targeted benchmarks.
  • Approximately 5% smaller Wasm binaries in the KotlinConf application build, and around 1% median improvement across Wasm benchmarks.
  • At least 20% faster StringBuilder.append() and Kotlin string concatenation in append-heavy workloads.
  • Reported clean build-time improvement of 65% and incremental build-time improvement of 21% in JetBrains testing.

These figures are attributed to JetBrains’ own release notes and testing; they do not establish that an unrelated project will see those gains.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.