В Kotlin 2.4.20 команду kotlin переименовали в kotlinr
Kotlin 2.4.20 переименовал команду запуска kotlin в kotlinr, обновил webpack до 5.108.1 и добавил экспериментальный нативный образ компилятора.

Если у вас в CI или в скриптах сборки вызывается kotlin, обновление на 2.4.20 их сломает: команду запуска переименовали. JetBrains выпустила Kotlin 2.4.20 — разбираем, что придётся починить и что взамен появилось полезного.
Версия уже входит в свежие сборки IntelliJ IDEA и Android Studio, поэтому обновление часто приезжает вместе с обновлением среды разработки, а не отдельным решением.
Коротко
Что нужно знать
Команда запуска kotlin стала kotlinr: старая печатает предупреждение.
Компилятор получил первый экспериментальный нативный образ с быстрым стартом.
Обновлённый webpack 5.108.1 может сломать сборку Kotlin/JS на CommonJS-файлах.
Цель watchosArm32 объявлена устаревшей и уедет в 2.5.0.
Что сломается после обновления
Главное — переименование раннера. Команда kotlin конфликтовала с одноимённой командой из Kotlin Toolchain, поэтому запуск скомпилированного кода переехал на новое имя:
Старое имя пока работает и печатает предупреждение с рекомендацией перейти на новое. Но полагаться на это не стоит: предупреждение обычно предшествует удалению.
Второй источник поломок — фронтенд. В 2.4.20 подтянули webpack 5.108.1, и он перестал игнорировать import.meta при определении типа модуля. Файл с этой конструкцией теперь считается ES-модулем, и если в нём же есть конструкции CommonJS, сборка падает. Для Kotlin/JS помогает переключение цели на ES-модули через useEsModules() в Gradle DSL.
- встроенный минификатор webpack переехал с
terser-webpack-pluginна общий пакет, и проекты, которые настраивали его напрямую, придётся поправить; - цель
watchosArm32устарела вслед за отказом Apple от 32-битных watchOS и будет удалена в Kotlin 2.5.0 ради совместимости с Xcode 27; - компилятор Kotlin/Native запретил атомарные операции AtomicFU внутри публичных inline-функций.
Что появилось полезного
Компилятор впервые получил нативный образ. Это замена командной строке kotlinc с более быстрым стартом, пока в статусе экспериментальной. В образ уже вшиты плагины сериализации, Compose, Lombok и power-assert, так что подключать их отдельно не нужно.
В стандартную библиотеку добавили интерфейс StackTraceRecoverable. Он нужен для отладки корутин: когда одна корутина бросает исключение, а другая его перебрасывает, библиотека восстанавливает стек, создавая новый экземпляр исключения. Раньше это работало автоматически только для исключений с простыми конструкторами. Если у вашего исключения есть обязательные аргументы вроде кода ошибки, теперь можно описать копирование самому.
Появились и функции проверки коллекций: allDistinct() отвечает, все ли элементы уникальны, а allEqual() — все ли равны. До этого такие проверки писали через неочевидные обходные конструкции. Обе пока экспериментальные.
Как обновиться
Обновите среду разработки до свежей версии и поменяйте версию Kotlin в скриптах сборки. Если нужен компилятор командной строки, его забирают со страницы релиза на GitHub.
Частые вопросы
Обязательно ли сразу переходить на kotlinr?
Нет, старая команда работает и предупреждает. Но правку в CI лучше внести сразу, пока она не превратилась в аварию на релизе.
Затронет ли обновление webpack Kotlin/Wasm?
В большинстве случаев нет, дополнительная настройка не нужна. Если ошибка про import.meta всё же возникла, ищите эту конструкцию в своих исходниках и в зависимостях.
Стоит ли пробовать нативный образ компилятора?
Он экспериментальный, поэтому в продакшен-сборку его нести рано. Но замерить на нём время старта локально имеет смысл: ради этого он и сделан.
Выводы
Релиз небольшой по числу заметных фич, но с двумя правками, которые задевают почти всех: переименование раннера и обновление webpack. Полный перечень изменений собран в документации What is new in Kotlin 2.4.20.
Проверьте, не вызывается ли старая команда в ваших пайплайнах, и заодно посмотрите, не использует ли фронтенд-часть проекта CommonJS вперемешку с ES-модулями.












