Готовится к релизу Koin 4.2 где уже в RC версии появился Gradle плагин, которые будет использоваться для включения Compile Time Safety в будущем. Плагин способен работать с Koin Annotations и традиционным DSL подходом.
Что нужно сделать
io.insert-koin.compiler.pluginСложность может быть одна - нужен Gradle 8.X и Kotlin 2.3.20, а по результатам опроса не всего на него перешли
🔗 Источник - официальный блог Koin на Medium
#Kotlin #Koin #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍7👎2🤔2
Что важного в исправлениях
👉 Исправлены баги в рефлексии
🛠 Исправление проблемы с null типами
Кажется пора переехать на новую версию и посмотреть, подойдет ли она вам
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42👍10❤3👏1
Для тех кто активно используется Kotlin на JVM и любит работать с Auto Service - теперь есть решение которое под капотом полностью работает на Kotlin и его технологиях без хождения в Java механизмы генерации.
// Подключаем Gradle плагин AutoService IR
plugins {
kotlin("jvm") version "2.3.0"
id("com.fueledbycaffeine.autoservice") version "<latest>"
}
// Пример использования
import com.fueledbycaffeine.autoservice.AutoService
// Описываете ваш сервис
interface Logger {
fun log(message: String)
}
// Добавляете @AutoService аннотацию
@AutoService
class ConsoleLogger : Logger
// Еще вариант объявления
@AutoService(Logger::class)
class FileLogger : Logger
#Kotlin #JVM #OpenSource
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👎4👍1
JetBrains выкатили очень приличную серию «Building AI Agents in Kotlin» про Koog.
Koog — это официальный open‑source фреймворк от JetBrains для сборки AI‑агентов на Kotlin с идиоматичным Kotlin DSL и мультиплатформенной поддержкой
Старт с нуля: собираем минимального coding‑агента на Koog, который умеет читать/редактировать файлы в проекте и применять изменения через инструменты. По сути, «LLM + tools» в виде нормальной Kotlin‑архитектуры.
Дальше копают в сторону tools: как описывать инструменты, прокидывать параметры, интегрироваться с внешними сервисами и оборачивать всё это в удобные Kotlin‑абстракции. Хорошо показывает, как не превратить агента в «god‑object».
Этот выпуск про наблюдаемость: логирование шагов агента, трейсинг tool‑вызовов, что именно решает LLM и где всё ломается. Полезно, если вы хотите не «магический чёрный ящик», а систему, которую можно дебажить.
Как только один агент начинает уметь слишком много, появляется потребность в делегации. Здесь как раз показывают sub‑agents, композицию агентов через tools и разбиение сложных задач на специализированные роли.
Финальная часть про память и «забывание»: как управлять историей, не раздувая контекст до бесконечности, какие куски опыта агента сохранять, а какие сбрасывать, чтобы он оставался полезным и дешёвым.
Если вы смотрите в сторону своих AI‑агентов на Kotlin (IDE‑помощник, internal‑бот, автотюнинг CI и т.д.), серия даёт очень неплохой «скелет» архитектуры на Koog: от минимального агента до наблюдаемости, делегации и памяти.
Также эта серия статей поможет вам понять как устроены современные AI агенты.
#Kotlin #AI #Koog
Please open Telegram to view this post
VIEW IN TELEGRAM
❤20👍9👎2🤔1
Если используете Koin и Detekt, то знаете, что стандартный Detekt ничего не знает о специфике Koin. Можно написать рабочий, но проблемный код — и никаких предупреждений.
Что ловит библиотека:
👉 Service Locator антипаттерны (5 правил)
👉 Ошибки в Module DSL (14 правил)
👉 Проблемы управления скоупами (8 правил)
👉 Platform-специфичные проблемы (8 правил)
👉 Архитектурные нарушения (4 правила)
👉 Koin Annotations (12 правил)
Подключение:
// build.gradle.kts
dependencies {
detektPlugins("dev.androidbroadcast.rules.koin:detekt-koin4-rules:1.0.0")
}
Требования: Kotlin 2.0+, Detekt 1.23.8+, Koin 4.x
Жду фидбэк — каких не хватает, ложные срабатывания, что настраивается неудобно и всё всё. Пишите в комментариях к этому посту или в Issues репозитория 🙌
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👎7👍2
Forwarded from Aurora Developers (Vitaliy Zarubin)
🔥 Compose Multiplatform доступен на ОС Аврора!
Отличные новости для Kotlin-сообщества и всех, кто интересуется российской мобильной разработкой. Теперь вы можете создавать приложения для ОС Аврора, используя современный и привычный инструментарий — Kotlin и Compose Multiplatform.
Что опубликовано:
В репозитории на mos.hub выложены компоненты, необходимые для разработки:
- Проекты Compose Multiplatform для сборки.
- Готовые артефакты в репозитории Aurora Maven.
- Плагин для Gradle, упрощающий сборку приложений.
Что дальше?
В планах — расширение поддержки платформы и стабилизация проекта. А уже сейчас в документации вы найдете подробное руководство по началу работы, а также два демонстрационных приложения, которые помогут быстро разобраться с особенностями платформы.
👉 Документация
Хотите помочь проекту стать лучше?
Присоединяйтесь к разработке на mos.hub! Мы открыты к вашему коду и экспертизе. Только #ВМЕСТЕ мы сможем сделать инструмент максимально полезным для всего сообщества.
👉 Репозиторий
Отличные новости для Kotlin-сообщества и всех, кто интересуется российской мобильной разработкой. Теперь вы можете создавать приложения для ОС Аврора, используя современный и привычный инструментарий — Kotlin и Compose Multiplatform.
Что опубликовано:
В репозитории на mos.hub выложены компоненты, необходимые для разработки:
- Проекты Compose Multiplatform для сборки.
- Готовые артефакты в репозитории Aurora Maven.
- Плагин для Gradle, упрощающий сборку приложений.
Что дальше?
В планах — расширение поддержки платформы и стабилизация проекта. А уже сейчас в документации вы найдете подробное руководство по началу работы, а также два демонстрационных приложения, которые помогут быстро разобраться с особенностями платформы.
👉 Документация
Хотите помочь проекту стать лучше?
Присоединяйтесь к разработке на mos.hub! Мы открыты к вашему коду и экспертизе. Только #ВМЕСТЕ мы сможем сделать инструмент максимально полезным для всего сообщества.
👉 Репозиторий
🔥46👎41🤔11❤5
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔22👎3👍2
Вчера обновили Kotlin roadmap. И там произошло много интересного.
За полгода завершили 14 пунктов (Swift Export finally released, улучшения в Gradle, стабилизация Kotlin/Native). Добавили новые направления (и это индикатор того, что команда видит пробелы в экосистеме). Убрали несколько старых (это тоже информация — о чем они отказались и почему).
Дальше я разберу каждое направление отдельно: что произошло в мультиплатформе, что с инструментами, как развивается язык и экосистема. Потому что в одном посте это просто каша будет.
🔗 Roadmap тут
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11👎1🤔1
Когда я смотрю на roadmap, первое, что кидается в глаза — четыре ключевых приоритета. И один из них звучит просто: "Language evolution: keep Kotlin concise and expressive, prioritizing meaningful semantics over ceremony." Это значит что новых фичей в синтаксисе будет меньше и приоритет улучшению семантики
Это важно для долгосрочных проектов, которые втянут Kotlin — ты теперь знаешь, что Kotlin не будет делать breaking changes ради новой фишки. Код, написанный сегодня, будет понятен и работать через год.
Второй пункт в списке после развития языка - Kotlin Multiplatform. В целом уже и так было понятно важность этого направления развития Kotlin
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21👎1
Если ты используешь KMP, то ты знаешь боль: сборка проекта занимает времени. Особенно когда меняешь common код. Почему? Потому что когда JetBrains переходили на K2 компилятор, они изменили схему компиляции. Инкрементальная сборка вдруг перестала работать для KMP проектов так, как работала до Kotlin 2.X.
Реализация будет в июне 2026 года. Ждем.
#Kotlin #K2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤔8👎1🥰1
Компилятор:
✅ JSpecify support (null-safety в интеропе с Java)
✅ K1 компилятор deprecated (K2 теперь основной)
✅ Kotlin/Wasm Beta
Мультиплатформа:
✅ CMS GC by default (производительность)
✅ KMP IDE plugin на Windows и Linux
✅ Compose for Web в Beta
✅ Compose Hot Reload в Stable
Инструменты:
✅ K2 mode вIDEA теперь основной режим
✅ Улучшение импортов (IDE работает быстрее)
✅ NPM publishing для JS/Wasm артефактов
✅ Улучшили опыт разработки под Kotlin/Wasm в IDEA
Экосистема:
✅ OpenAPI для Ktor
✅ WebRTC client в Ktor
✅ Exposed 1.0.0 (работа с БД)
✅ Поддержка R2DBC в Exposed
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥10👎1🤔1
После долгих лет в experimental статусе, JetBrains планируют стабилизировать kotlinx.collections.immutable. Добавят новые типы (PersistentOrderedSet, PersistentHashSet), улучшат API, документацию. Может вовсе стоит их сделать частью stdlib ?
Это долгожданная новость. Но вот интересный вопрос: нужна ли она вообще сейчас?
Immutable collections были критичны для Compose, потому что помогали избежать рекомпозиций. Но потом пришел Strong Skipping Mode в Compose. И теперь Compose намного умнее в том, что перерисовывать и что нет. Нужна ли immutable collection для этого теперь? Я честно не знаю ответ. 🤷
Потому что вопрос к вам:
👉 Кто сейчас юзает immutable collections в Compose проектах? Зачем?
👉 Помогает ли это производительности, или это уже не нужно?
👉 Где вы их юзаете еще, кроме Compose?
👉 А может быть, наоборот, нужны еще больше?
#Kotlin #KotlinX #Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤3🙏2👎1
JetBrains будет поддерживать новые версии Kotlin Stdlib на протяжении 18 месяцев. Это значит: если ты обновился на какую-то версию Kotlin — JetBrains гарантирует исправления уязвимостей и критические баги для этой версии. Потом можешь обновляться, когда будешь готов.
Кому это вообще нужно? Командам кто не гонится за новыми фичами и обновлениями. Новая версия выходит, а с ней баги или непредсказуемое поведение:
👉 Tooling не подтянулся
👉 Просто нет времени на большое обновление
👉 У вас внешние требования и надо всё перепроверять перед обновлением
Это как Java с LTS-версиями. Есть гарантии и предсказуемость, что важнее новых фичей.
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👎9👍5🤔2
Please open Telegram to view this post
VIEW IN TELEGRAM
👎86👍6🔥2
🤯 «Если работает — какая разница, что там внутри» — так думает любой менеджер. Посмотрите на свой стек: сколько там софта, на который вы постоянно жалуетесь? Я видел десятки приложений с сомнительными решениями, тяжёлой поддержкой и горами легаси, но ведь работает и деньги приносит. Смартфоны становятся мощнее и вытягивают это всё, а до бюджетников большинству разработчиков просто нет дела.
Я не оправдываю утверждение «писать говнокод — это нормально». Конечно нет! Но бизнесу, который за всё это платит, важно одно: чтобы работало и приносило деньги.
Руками писали плохой код — ИИ тоже пишет плохой код. Проблема не в инструменте, а в том, кто его использует. Инструментом нужно учиться пользоваться, правильно его настраивать. Но у ИИ есть особая опасность: низкий порог входа. Взял, запустил, что-то получилось — и понеслось. Это открывает дверь для людей без достаточной квалификации, которые даже не понимают, что именно они сгенерировали.
Я не оправдываю утверждение «писать говнокод — это нормально». Конечно нет! Но бизнесу, который за всё это платит, важно одно: чтобы работало и приносило деньги.
Руками писали плохой код — ИИ тоже пишет плохой код. Проблема не в инструменте, а в том, кто его использует. Инструментом нужно учиться пользоваться, правильно его настраивать. Но у ИИ есть особая опасность: низкий порог входа. Взял, запустил, что-то получилось — и понеслось. Это открывает дверь для людей без достаточной квалификации, которые даже не понимают, что именно они сгенерировали.
💯69❤11🔥4👎2
DecomposeSettings.👉 Тип
Child#key изменён с Any на String — это breaking change, но нужный. Раньше иногда падало с Key XYZ was used multiple times в Compose. Теперь ключ можно использовать напрямую как Compose key без лишних приседаний.👉 Новый
DecomposeSettings API собирает глобальную конфигурацию в одном месте. Настроить можно через update {}:// Инициализация в точке входа (Application / main)
DecomposeSettings.update { settings ->
settings.copy(
duplicateConfigurationsEnabled = true,
mainThreadCheckEnabled = false,
onDecomposeError = { error -> Timber.e(error) }
)
}
👉 Из остального: поддержка per-child аниматоров в Child Panels, новые
ChildPages composable с доступом к PagerState, улучшенный handleDeepLink с дополнительными параметрами, Compose обновлён до 1.9.3.#KMP #Kotlin #Decompose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👍5👎4🎉1
👉 Name-based destructuring — пожалуй, самое интересное. Раньше деструктуризация работала по позиции через componentN(), и если порядок полей в data class не совпадал с переменными — получали молчаливый баг. Теперь можно явно привязать переменную к имени свойства. Пока это Experimental, включается через -Xname-based-destructuring. Жду когда дойдёт до Stable.
👉 Поддержка Gradle 9.3.0. Плюс Kotlin/JVM теперь по умолчанию использует Build Tools API при компиляции. Тихое, но важное изменение для тех, кто следит за тулингом.
👉 Kotlin/Native получил новый экспериментальный режим интероперабельности с C/ObjC — призван решить проблему совместимости KMP-библиотек между версиями компилятора. Если используете cinterop — стоит попробовать и оставить фидбек.
🔗 Больше подробностей в "What's new"
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍9👎2
Destructuring Declarations - несамая популярная фича в Kotlin. На мой взгляд, её привязка к порядку декларации свойств делает его очень ненадёжной. Теперь же можно будет делать привязку "имя - имя" помимо "имя - позиция":
data class User(val username: String, val email: String)
val user = User("alice", "alice@example.com")
// Было
val (email, username) = user
// Стало
(val mail = email, val name = username) = user
Фича экспериментальная и требует включения через опции компилятора
// build.gradle.kts
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xname-based-destructuring=only-syntax")
}
}
🔗 Подробности в документации
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33🤔18👍6
@OptIn(ExperimentalStdlibApi::class)
fun main() {
val map = mutableMapOf(
1 to 1,
2 to 2,
3 to 3,
4 to 4
)
val toRemove = map.entries
.filter { it.key % 2 == 0 }
.map { it.copy() }
map.entries.removeAll(toRemove)
println("map = $map")
// map = {1=1, 3=3}
}
#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯35🔥9🤔8🏆3
Вышел стабильный Koin 4.2.0 — изменений ощутимо больше, чем обычно в минорных релизах. Kotlin 2.3.20 внутри и несколько новых модулей.
Что появилось:
EntryProvider с передачей метаданных (анимации и прочее), generic EntryProvider, навигационные скоупы. Плюс скоупированная навигация теперь есть и для классического Compose Nav 2👉 strictOverride — новая опция для явного переопределения дефиниций. Раньше override был неявным, теперь можно сделать это контролируемым
BeanDef.На мой взгляд, Dagger Bridge и поддержка Navigation3 — самые интересные новинки. Первый открывает путь к постепенной миграции с Dagger, второй закрывает ожидаемый пробел для тех, кто уже на новом стеке навигации.
#Kotlin #KMP #DI #Koin #AndroidDev #Compose #AndroidJetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥11👎5
kotlinx.datetime extension функциями.// Парсинг с кастомным форматом
val date = "11/15/2024".toLocaldate("MM/dd/yyyy")
// Вместо plus(n * -1, DateTimeUnit.DAY)
val yesterday = date.minusDays(1)
// Готовые утилиты
val isWeekend = LocalDate.today().isWeekend()
val nextMonday = LocalDate.nextMonday()
До 1.0 ещё далеко, но для KMP-проекта подключить и не писать одни и те же хелперы в каждом модуле — звучит разумно.
#Kotlin #KMP #Android #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40👎11🥰2