Compose Broadcast
Відкрити в Telegram
Все о Jetpack Compose и Compose Multiplatform По сотрудничеству - @ab_manager
Показати більше5 912
Підписники
Немає даних24 години
-87 днів
-430 день
Триває завантаження даних...
Схожі канали
Хмара тегів
Вхідні та вихідні згадування
---
---
---
---
---
---
Залучення підписників
серпень '26
серпень '26
+42
в 2 каналах
липень '26
+35
в 1 каналах
Get PRO
червень '26
+48
в 2 каналах
Get PRO
травень '26
+74
в 0 каналах
Get PRO
квітень '26
+91
в 1 каналах
Get PRO
березень '26
+71
в 2 каналах
Get PRO
лютий '26
+51
в 1 каналах
Get PRO
січень '26
+47
в 0 каналах
Get PRO
грудень '25
+104
в 2 каналах
Get PRO
листопад '25
+62
в 0 каналах
Get PRO
жовтень '25
+298
в 3 каналах
Get PRO
вересень '25
+106
в 5 каналах
Get PRO
серпень '25
+76
в 1 каналах
Get PRO
липень '25
+54
в 1 каналах
Get PRO
червень '25
+53
в 1 каналах
Get PRO
травень '25
+162
в 7 каналах
Get PRO
квітень '25
+109
в 3 каналах
Get PRO
березень '25
+74
в 1 каналах
Get PRO
лютий '25
+110
в 2 каналах
Get PRO
січень '25
+81
в 0 каналах
Get PRO
грудень '24
+254
в 2 каналах
Get PRO
листопад '24
+116
в 2 каналах
Get PRO
жовтень '24
+255
в 2 каналах
Get PRO
вересень '24
+121
в 1 каналах
Get PRO
серпень '24
+199
в 1 каналах
Get PRO
липень '24
+108
в 1 каналах
Get PRO
червень '24
+153
в 1 каналах
Get PRO
травень '24
+269
в 4 каналах
Get PRO
квітень '24
+393
в 5 каналах
Get PRO
березень '24
+159
в 3 каналах
Get PRO
лютий '24
+197
в 3 каналах
Get PRO
січень '24
+220
в 2 каналах
Get PRO
грудень '23
+130
в 3 каналах
Get PRO
листопад '23
+116
в 4 каналах
Get PRO
жовтень '23
+379
в 3 каналах
Get PRO
вересень '23
+67
в 0 каналах
Get PRO
серпень '23
+2 598
в 0 каналах
| Дата | Залучення підписників | Згадування | Канали | |
| 26 серпня | +1 | |||
| 25 серпня | +1 | |||
| 24 серпня | +1 | |||
| 23 серпня | 0 | |||
| 22 серпня | 0 | |||
| 21 серпня | +3 | |||
| 20 серпня | 0 | |||
| 19 серпня | +1 | |||
| 18 серпня | +11 | |||
| 17 серпня | +4 | |||
| 16 серпня | 0 | |||
| 15 серпня | +4 | |||
| 14 серпня | +2 | |||
| 13 серпня | +4 | |||
| 12 серпня | +3 | |||
| 11 серпня | +1 | |||
| 10 серпня | 0 | |||
| 09 серпня | 0 | |||
| 08 серпня | +1 | |||
| 07 серпня | +1 | |||
| 06 серпня | 0 | |||
| 05 серпня | +3 | |||
| 04 серпня | 0 | |||
| 03 серпня | +1 | |||
| 02 серпня | 0 | |||
| 01 серпня | 0 |
Дописи каналу
Vercel представил Agent Plugins 1.0.0 — открытый стандарт для плагинов, расширяющих AI-агентов
Те, кто делал плагины для ИИ-кодинг-агентов, знают про неудобство с поддержкой плагинов для всех инструментов. Теперь должно стать легче! Agent Plugins — это общий, вендор-нейтральный стандарт упаковки Agent Skills (инструкции и ресурсы) и MCP-серверов (инструменты и сервисы) в единый дистрибутив.
Как это работает?
Плагин — это директория с манифестом
plugin.json и фиксированной структурой:
my-plugin/ ├── plugin.json ├── skills/ │ └── summarize/ │ ├── SKILL.md │ ├── scripts/ │ └── references/ ├── mcp.json └── com.example.client/Клиенты проверяют
plugin.json, находят Skills в skills/, а конфигурацию MCP — в mcp.json. Компоненты валидируются независимо — ошибка в одном не ломает другие.
Ключевые особенности:
📦 Один пакет для всех клиентов — больше не нужно переупаковывать компонент под каждый формат.
🎯 Small on purpose — стандарт определяет только контракт обнаружения и загрузки, оставляя клиентам свободу в UX, политиках и инновациях.
🔧 Гибкость для клиентов — через механизм неймспейсов можно добавлять клиент-специфичные расширения без загрязнения общего формата.
🏢 Открытый мультивендорный проект — инициатива Vercel, доработанная совместно с AWS, Anysphere (Cursor), GitHub, Microsoft и OpenAI. Технический комитет состоит из AWS, Cursor, Microsoft, OpenAI и Vercel.
Где уже поддерживается:
- ChatGPT и Codex
- Cursor
- GitHub Copilot
- Kiro
- VS Code
Плагины, упакованные по этому стандарту, автоматически работают во всех перечисленных клиентах.
Для авторов расширений (подключение) — документация и схемы JSON на agent-plugins.org.
Для разработчиков AI-агентов (интеграция формата) — чеклист соответствия в репозитории спецификации.
#AI| 2 | 🐱 Адаптивный UI в Compose Multiplatform через набор простый функций
KitFlow — небольшая KMP-либа, которая показывает, как можно держать адаптив в одном месте.
Главная идея — Adaptive.value():
val padding = Adaptive.value(
sm = 12.dp,
md = 16.dp,
lg = 20.dp,
tab = 24.dp,
desktop = 28.dp
)
То же самое для высоты кнопки, ширины карточки, scale шрифта, Boolean, цветов, любых кастомных значений. Есть Adaptive.layoutValue() (по текущей ширине, включая split-screen и resize) и Adaptive.onOrientationChange для портрета/ландшафта.
Подключать как зависимость я не рекомендую. Всё, что там есть, легко реализовать самому, и тогда получаешь полную гибкость под свой дизайн-систем и breakpoints. А вот разобрать реализацию и вдохновиться будет полезно, особенно если пишешь shared UI под Android + iOS + Desktop + Web. Я еще для себя делал расширение в зависимости от таргет платформы.
#Compose #CMP #Adaptive #UI | 1 895 |
| 3 | ⚙️ mediaQuery в Compose: один вызов вместо кучи WindowSizeClass + posture + input
Официально появился mediaQuery — лямбда, которая смотрит на текущий UiMediaScope и возвращает boolean. Внутри можно проверять:
👉 windowWidth / windowHeight
👉 windowPosture (Tabletop, Book, Flat)
👉 pointerPrecision (Fine → Coarse → Blunt → None)
👉 keyboardKind (Physical / Virtual / None)
👉 hasCamera / hasMicrophone
👉 viewingDistance (Near / Medium / Far)
Включается одним флагом при запуске приложения:
ComposeUiFlags.isMediaQueryIntegrationEnabled = true
Для размеров, которые дёргаются часто, лучше использовать derivedMediaQuery (обёртка над derivedStateOf):
// Composable code
val narrowerThanMedium by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND.dp
}
val narrowerThanExpanded by derivedMediaQuery {
windowWidth < WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND.dp
}
when {
narrowerThanMedium -> SinglePaneLayout()
narrowerThanExpanded -> TwoPaneLayout()
else -> ThreePaneLayout()
}
Самый чистый кейс — foldable в tabletop:
// Composable code
if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {
TabletopLayout()
} else {
FlatLayout()
}
Это API не замена WindowSizeClass, но удобный единый вход для всего, что меняется в рантайме. Если пишете адаптив под foldable / desktop / TV — возьмите на заметку. Пока не перенесли в Compose Multiplatform.
Документация Media Query API
#Compose #JetpackCompose #Adaptive #UI #Android | 6 657 |
| 4 | JetBrains исследует Compose HTML для Server-Side Rendering (SSR)
Frederik Pietzko из JetBrains решил проверить идею: что если Compose-компоненты рендерить в HTML на сервере, а не только в canvas/JS.
Сейчас JVM в SSR почти всегда сидит на шаблонах. Параметры — строки, переименовал count → itemCount и узнал об ошибке только в рантайме. В Compose это обычная Composable функция с типами:
@Composable
fun Card(title: String, count: Int) {
Div({ classes("card") }) {
H3 { Text(title) }
Span { Text(count.toString()) }
}
}
Rename ломает компиляцию, IDE подхватывает, autocomplete работает. Идея — добавить JVM-таргет в Compose HTML с renderToString / renderToBytes, чтобы один раз прогнать composition и получить строку HTML. Без браузера, без DOM, без recomposition и effects (как классический SSR).
Важно! Это не roadmap и не commitment. Просто исследование
Мне нравится направление. Если Compose HTML получит нормальный серверный рендер, у Kotlin наконец появится шанс на type-safe fullstack без ухода в JS-фреймворки. Пока же это просто интересный разговор, который стоит почитать.
🔗 [Источник](https://blog.jetbrains.com/kotlin/2026/08/exploring-compose-html-for-server-side-rendering/)
#Compose #ComposeHTML #Kotlin #SSR | 3 267 |
| 5 | ⚙️ MCP сервер в для Compose Desktop Hot Reload: агент сам видит UI и кликает
В Compose Multiplatform 1.12.0-rc01 (через Compose Hot Reload 1.2.0) появился экспериментальный MCP-сервер для Hot Reload.
Агент теперь может:
👉 reload — пересобрать и хотрелоудить
👉 take_screenshot — снять текущее окно
👉 get_semantic_tree — получить semantic tree (включая Dialog/Popup)
👉 click / type_text / scroll — симулировать ввод
👉 get_logs — читать runtime-логи и ошибки
Подключается через Gradle-таску. В конфиге агента (.mcp.json):
{
"mcpServers": {
"compose-hot-reload": {
"command": "./gradlew",
"args": [
"--no-daemon",
"--quiet",
"--console=plain",
"hotMcpServer"
]
}
}
}
#Compose #CMP #Desktop #HotReload | 3 474 |
| 6 | ⚙️ Новые релиз Material3 Adaptive 1.3.0
Новая библиотека adaptive-navigation3. Теперь можно легко строить адаптивные Material-интерфейсы в связке с Navigation 3. Что внутри:
Scene Strategies
👉 ListDetailSceneStrategy + rememberListDetailSceneStrategy — канонический list-detail
👉 SupportingPaneSceneStrategy + rememberSupportingPaneSceneStrategy — supporting pane
👉 В ListDetailPaneScaffold и SupportingPaneScaffold. Теперь поддерживают margins и edge-to-edge.
🔄 RTL-поддержка для pane expansion.
tive:adaptive-navigation3:1.3.0")
🔗 Полный changelog
#AndroidDev #JetpackCompose #Material3 | 3 887 |
| 7 | ⚙️ В Compose 1.12.0 появилась экспериментальная реализация Slot Table на основе связного списка (LinkBuffer).
Slot Table — это внутренняя структура данных, в которой Compose Runtime хранит всё дерево композиции: каждый Composable, каждое состояние remember, ключи и связи между элементами. С момента первого релиза Slot Table был реализован на основе Gap Buffer — структуры, вдохновлённой текстовыми редакторами.
Gap Buffer хранит все группы в плоском IntArray с пустой областью (gap), которая перемещается к месту следующей записи. Его проблема что при удалении или переупорядочивании элементов gap должен переместиться к нужной позиции, копируя все элементы на своём пути.
Для композиции с 1000 группами удаление группы №500 требует перемещения gap через 500 позиций. Переупорядочивание одного элемента в списке из 100 записей требует двух перемещений gap, каждое с копированием части массива. По итогу чем больше композиция, тем дороже структурные изменения.
Новая экспериментальная реализация Slot Table на основе связного списка — LinkBuffer. Вместо плоского массива группы хранятся в виде связного списка с явными указателями на родителя, первого потомка и следующего соседа. Ключевое преимущество - структурные операции (удаление, перемещение, переупорядочивание) теперь требуют обновления указателей вместо копирования массивов.
По тестам разработчиков переупорядочивание списков стало более чем в 2 раза быстрее. Большинство других операций стали примерно на 10% быстрее
Флаг новой реализации отключён по умолчанию. Включить можно двумя способами:
1. Программно (только для debug-сборок):
// ДО вызова setContent()
ComposeRuntimeFlags.isLinkBufferComposerEnabled = true
2. Через R8/ProGuard (для release-сборок):
-assumevalues public class androidx.compose.runtime.ComposeRuntimeFlags {
static boolean isLinkBufferComposerEnabled return true;
}
В R8 release-сборках правило ProGuard всегда имеет приоритет над программной установкой.
#Compose #UnderHood | 3 342 |
| 8 | Немає тексту... | 2 537 |
| 9 | 🚀 Kotlin DSL: от теории к практике и созданию JsonBuilder
Одна из лучших фич Kotlin — возможность писать выразительные DSL. Они превращают сложную бизнес-логику в читаемый код, похожий на естественный язык.
Многие разработчики каждый день используют готовые DSL (например, в Gradle или Ktor), но не до конца понимают, как они устроены «под капотом». С этим можно разобраться на бесплатном вебинаре курса «Проектирование и разработка Kotlin-бэкенда».
🗓 Когда: 19 августа в 20:00 (мск)
🎯 Для кого: Kotlin-разработчики и тех, кто хочет выйти за рамки базового синтаксиса и понять главные фичи языка.
Что будет на вебинаре?
☑️ Теория DSL: зачем нужны предметно-ориентированные языки и в каких сценариях они действительно экономят время.
☑️ Практика: с нуля напишем собственный JsonBuilder.
☑️ Инструменты языка: глубоко изучим лямбды с получателем (lambdas with receiver) и extension-функции.
☑️ Архитектура API: разберём, как создавать удобные, безопасные к типам и читаемые интерфейсы.
👉 Регистрация на вебинар тут
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru | 1 761 |
| 10 | В Compose 1.12.0 появилась экспериментальная реализация Slot Table на основе связного списка (LinkBuffer).
Это серьёзное изменение внутренней архитектуры Compose, которое влияет на производительность.
Slot Table — это внутренняя структура данных, в которой Compose Runtime хранит всё дерево композиции: каждый Composable, каждое состояние remember, ключи и связи между элементами.
С момента первого релиза Slot Table был реализован на основе Gap Buffer — структуры, вдохновлённой текстовыми редакторами.
Gap Buffer (текущая реализация) хранит все группы в плоском IntArray с пустой областью (gap), которая перемещается к месту следующей записи.
Проблема: при удалении или переупорядочивании элементов gap должен переместиться к нужной позиции, копируя все элементы на своём пути.
📉 Для композиции с 1000 группами удаление группы №500 требует перемещения gap через 500 позиций. Переупорядочивание одного элемента в списке из 100 записей требует двух перемещений gap, каждое с копированием части массива.
Итог: чем больше композиция, тем дороже структурные изменения.
Новая экспериментальная реализация Slot Table на основе связного списка — LinkBuffer. Вместо плоского массива группы хранятся в виде связного списка с явными указателями на родителя, первого потомка и следующего соседа.
Ключевое преимущество: структурные операции (удаление, перемещение, переупорядочивание) теперь требуют обновления указателей вместо копирования массивов.
📈 Цифры:
Переупорядочивание списков стало более чем в 2 раза быстрее
Большинство других операций стали примерно на 10% быстрее
⚙️ Как включить?
Флаг отключён по умолчанию. Включить можно двумя способами:
1. Программно (только для debug-сборок):
kotlin
// ДО вызова setContent()
ComposeRuntimeFlags.isLinkBufferComposerEnabled = true
2. Через ProGuard (для release-сборок):
pro
-assumevalues public class androidx.compose.runtime.ComposeRuntimeFlags {
static boolean isLinkBufferComposerEnabled return true;
}
В R8 release-сборках правило ProGuard всегда имеет приоритет над программной установкой. | 4 |
| 11 | ⚙️ Улучшения текстовых полей в Compose 1.12.0
👉 В BasicTextField можно теперь программно применять SpanStyle и ParagraphStyle через edit { addStyle(...) }:
state.edit {
addStyle(SpanStyle(fontWeight = FontWeight.Bold), start = 0, end = 9)
}
Стили сохраняются при смене конфигурации.
👉 Программное управление выделением. Новый SelectionState с методами selectAll(), clear(), select(range) и extendSelectionByWord()
val selectionState = rememberSelectionState()
val characterCount = selectionState.selectedTexts.sumOf { it.text.length }
Column {
SelectionContainer(state = selectionState) {
Column { BasicText(text = "Text to be selected...") }
}
if (characterCount > 0) {
BasicText(text = "Characters selected: $characterCount")
}
}
👉 Текстовые поля теперь нативно поддерживают Android Credential Manager (API 34+) через семантическое свойство credentialRequest. Passkeys, сохранённые учётные данные — прямо из поля ввода.
👉 Новые KeyboardType: Date, Time, DateTime, SignedDecimal.
👉 BasicSecureTextField теперь по умолчанию использует TextObfuscationMode.System
#Compose | 2 539 |
| 12 | 🚀 В Compose 1.12.0 прокачали производительность и по бенчмарку Google, на котором тестируются все версии, уже сравнялись с View.
Очень хочется верить в то, что это реально, а также что это можно сделать просто без отладки и замера характеристик рендеринга.
#Compose #Performance | 2 668 |
| 13 | ⚙️ Compose Grid стал удобнее
Теперь области можно задавать через имя в Grid в дополнение к индексу. Дайте областям имена и размещайте элементы с помощью gridItem(areaId = "header"):
Grid(
config = {
area("header", row = 0, column = 0, rowSpan = 1, columnSpan = 2)
area("sidebar", row = 1, column = 0)
area("content", row = 1, column = 1)
}
) {
HeaderSection(modifier = Modifier.gridItem(areaId = "header"))
Sidebar(modifier = Modifier.gridItem(areaId = "sidebar"))
Content(modifier = Modifier.gridItem(areaId = "content"))
}
#Compose | 2 535 |
| 14 | Немає тексту... | 2 593 |
| 15 | ⚙️ Вышла стабильная версия Jetpack Compose 1.12.0! CMP уже подходе
Для обновления просто обновите BOM
implementation(platform("androidx.compose:compose-bom:2026.08.00"))
⚠️ Важно: требуется compileSdk = 37 и AGP 9.2.0+.
В этом релизе:
🎨 Mesh‑градиенты и HDR
📐 Именованные области в Grid
✍️ Редактируемое форматирование текста
🎬 Двухстадийные анимации
⚡️ Ускоренный старт и Keyed SideEffect
🔧 Не обошлось без breaking changes
В ближайших постах разберу каждую фичу подробно с примерами. Подпишись на @ComposeBroadcast, чтобы ничего не пропустить!
Compose Multiplatform 1.12.0 уже на стадии RC
#Compose #Android | 2 680 |
| 16 | Немає тексту... | 5 201 |
| 17 | 5️⃣ 5 лет назад вышел Jetpack Compose 1.0 | 11 175 |
| 18 | Немає тексту... | 6 603 |
| 19 | 🔥 БИТВА ТЯЖЕЛОВЕСОВ: Spring Boot 4, Quarkus, Micronaut, Kotlin Multiplatform, Go и Rust.
Выбрать технологию «по душе» — роскошь. В прод-среде за ошибку в выборе платформы платят деньги: за память, за холодный старт, за бесконечный дебаг.
🗓 5 августа в 20:00 на открытом вебинаре курса «Проектирование и разработка Kotlin-бэкенда» мы берем 6 технологий:
🍃 Spring Boot 4
⚡️ Quarkus & Micronaut
🧩 Kotlin Multiplatform Native
🦀 Go & Rust
И ставим их в одинаковые условия.
Запустим одну вычислительную нагрузку и честно сравним:
✔️Скорость старта (кто «летает», а кто «прогревается»).
✔️ Потребление памяти (считаем каждый мегабайт).
✔️ RPS (производительность под ударной нагрузкой).
Вы узнаете, когда переход на нативный код — это необходимость, а когда — просто хайп.
👉 Ссылка для регистрации на вебинар
❗️Не для маркетологов. Для инженеров, которые считают циферки.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 | 2 222 |
| 20 | 🏝 Всем, кто ждал Kotlin 2.4.10 для обновления на новую версию языка — обновляйтесь!
Из того, что реально касается продакшн-кода - исправлена регрессия в Compose Compiler: классы, которые раньше считались stable, в 2.4.0 иногда определялись как runtime/Uncertain.
Если недавно обновились на 2.4.0 и столкнулись со странными лишними рекомпозициями — обновляйтесь на новую версию.
#Kotlin #Compose | 5 050 |
