fa
Feedback
Compose Broadcast

Compose Broadcast

رفتن به کانال در Telegram

Все о Jetpack Compose и Compose Multiplatform По сотрудничеству - @ab_manager

نمایش بیشتر
5 912
مشترکین
-224 ساعت
-87 روز
-330 روز
جذب مشترکین
اوت '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-либа, которая показывает, как мо
🐱 Адаптивный 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 (через Compo
⚙️ 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.
🚀 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, на котором тестируются все версии, уже сравнялись с V
🚀 В 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
5️⃣ 5 лет назад вышел Jetpack Compose 1.0
11 175
18
بدون متن...
6 603
19
🔥 БИТВА ТЯЖЕЛОВЕСОВ: Spring Boot 4, Quarkus, Micronaut, Kotlin Multiplatform, Go и Rust. Выбрать технологию «по душе» — роск
🔥 БИТВА ТЯЖЕЛОВЕСОВ: 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 для обновления на новую версию языка — обновляйтесь! Из того, что реально касается продакшн-к
🏝 Всем, кто ждал Kotlin 2.4.10 для обновления на новую версию языка — обновляйтесь! Из того, что реально касается продакшн-кода - исправлена регрессия в Compose Compiler: классы, которые раньше считались stable, в 2.4.0 иногда определялись как runtime/Uncertain. Если недавно обновились на 2.4.0 и столкнулись со странными лишними рекомпозициями — обновляйтесь на новую версию. #Kotlin #Compose
5 050