{"id":"ca317f2b-230d-4624-b5b2-69e54e98b190","shortId":"rhuVER","kind":"skill","title":"cometchat-android-v6-migration","tagline":"V5→V6 migration recipes for native Android. CometChat ships V5 (chat-uikit-android:5.x — Java + Kotlin Views) and V6 beta (chatuikit-{compose,kotlin}-android:6.x — Compose surface OR Kotlin Views, calls bundled) side-by-side. Covers when to migrate vs stay, the cohort-selection d","description":"## Purpose\n\nMigration recipes for moving from CometChat Android UIKit V5 (`chat-uikit-android:5.x`) to V6 (`chatuikit-{compose,kotlin}-android:6.0.0-beta2`). V6 is beta — most production apps should stay on V5 today; this skill is for teams evaluating V6 or planning the eventual migration.\n\nV6 is a different SDK, not a drop-in replacement. The migration is roughly the size of jumping from React Native UIKit v5 to v6 — package coordinates, builder APIs, theme system, calls handling all change.\n\n**Read these other skills first:**\n- `cometchat-android-v5-core` — current state baseline\n- `cometchat-android-v6-core` — destination state\n- `cometchat-android-v6-builder-settings` — the new UIKitSettings API in detail\n- `cometchat-android-v6-{compose,kotlin}-{components,placement,theming,customization}` — surface-specific destination skills\n- `cometchat-android-v6-calls` — calls migration (calls SDK is bundled in V6)\n\n**Ground truth:**\n- V5 source — installed `com.cometchat:chat-uikit-android@5.x` artifacts under `~/.gradle/caches/`\n- V6 source — installed `chatuikit-{compose,kotlin}-android@6.0.0-beta2` artifacts\n- Sister skill — `cometchat-flutter-v6-migration` (different platform, same migration shape)\n\n---\n\n## 1. When to migrate vs stay\n\n**Stay on V5 if:**\n\n- Your app is in production and stable\n- You're not actively shipping new chat features\n- You don't need V6's specific additions (Compose-first surface, AI Agent integration, Material 3 theming defaults)\n- Your minSdk is 21-27 (V6 requires minSdk 28)\n\n**Move to V6 if:**\n\n- You're starting a new project\n- You're rewriting your existing app's UI to Compose anyway\n- You need V6 features that aren't backported to V5 (e.g. some AI Agent components)\n- You've validated V6 beta against your use cases on a sample project first\n\n**The dispatcher (`cometchat-android-v6`) routes by detected version.** Both V5 and V6 skill sets ship in `npx @cometchat/skills add --family android` — the migration here lives under V6 because that's the destination cohort.\n\n---\n\n## 2. The cohort decision (Compose vs Kotlin Views)\n\nV6 is split into two surfaces:\n\n| Surface | Package | When to pick |\n|---|---|---|\n| Compose | `com.cometchat:chatuikit-compose-android:6.0.0-beta2` | New apps; existing apps already on Compose |\n| Kotlin Views | `com.cometchat:chatuikit-kotlin-android:6.0.0-beta2` | Existing apps on Java + XML layouts; teams not ready for Compose |\n\n**You can mix both in the same app**, but a single chat surface is one or the other — not both.\n\nThe migration plan asks the user upfront: which surface for each chat screen? Default = match the surrounding app.\n\n---\n\n## 3. Gradle dependency migration\n\n### V5 (today)\n\n```kotlin\n// app/build.gradle.kts\ndependencies {\n  implementation(\"com.cometchat:chat-uikit-android:5.0.+\")     // chat\n  implementation(\"com.cometchat:calls-sdk-android:5.0.+\")      // separate calls SDK\n}\n```\n\n### V6 (Compose path)\n\n```kotlin\ndependencies {\n  implementation(\"com.cometchat:chatuikit-compose-android:6.0.0-beta2\")\n  // No separate calls SDK — calls bundled into the same artifact\n  // Compose dependencies (if not already present)\n  implementation(platform(\"androidx.compose:compose-bom:2024.02.00\"))\n  implementation(\"androidx.compose.material3:material3\")\n  implementation(\"androidx.compose.ui:ui\")\n  implementation(\"androidx.compose.ui:ui-tooling-preview\")\n}\n```\n\n### V6 (Kotlin Views path)\n\n```kotlin\ndependencies {\n  implementation(\"com.cometchat:chatuikit-kotlin-android:6.0.0-beta2\")\n  // No separate calls SDK\n  // Material Components for theming (`CometChatTheme.DayNight` extends Material themes)\n  implementation(\"com.google.android.material:material:1.11.+\")\n}\n```\n\n### `gradle.properties` rules carry over\n\n```properties\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n```\n\nBoth still required on V6.\n\n### `minSdk` floor\n\nV5: minSdk 21. V6: **minSdk 28**. If you're on minSdk 21-27 and want V6, this is the first thing to address — bump minSdk and audit your other dependencies for compatibility.\n\n---\n\n## 4. Init API rewrite\n\n### V5 — `UIKitSettingsBuilder`\n\n```kotlin\nval settings = UIKitSettingsBuilder()\n  .setRegion(\"us\")\n  .setAppId(BuildConfig.COMETCHAT_APP_ID)\n  .setAuthKey(BuildConfig.COMETCHAT_AUTH_KEY)\n  .subscribePresenceForAllUsers()\n  .build()\n\nCometChatUIKit.init(this, settings, object : CometChat.CallbackListener<String>() {\n  override fun onSuccess(s: String) { /* ... */ }\n  override fun onError(e: CometChatException) { /* ... */ }\n})\n```\n\n### V6 — `UIKitSettings.Builder()`\n\n```kotlin\nval settings = UIKitSettings.Builder()\n  .setAppId(BuildConfig.COMETCHAT_APP_ID)\n  .setRegion(BuildConfig.COMETCHAT_REGION)\n  .setAuthKey(BuildConfig.COMETCHAT_AUTH_KEY)\n  .subscribePresenceForAllUsers()\n  .enableCalling()                                // ← calls toggled on here, not via separate SDK\n  .build()\n\nCometChatUIKit.init(this, settings) { result ->\n  when (result) {\n    is CometChatUIKit.Result.Success -> { /* ... */ }\n    is CometChatUIKit.Result.Error   -> { /* surface to UI */ }\n  }\n}\n```\n\nDifferences:\n\n- Class name: `UIKitSettingsBuilder` → `UIKitSettings.Builder()`\n- Calls: separate SDK init → `.enableCalling()` flag\n- Result: `CallbackListener` → `Result.Success` / `Result.Error` sealed class\n\nFor full builder option mapping, see `cometchat-android-v6-builder-settings`.\n\n---\n\n## 5. Calls integration migration\n\nV5 has a separate `calls-sdk-android` artifact + a separate `CometChatCalls.init`. V6 bundles calls into `chatuikit-{compose,kotlin}-android` and toggles via `.enableCalling()`.\n\n### V5 calls init\n\n```kotlin\n// In Application.onCreate\nCometChat.init(this, BuildConfig.COMETCHAT_APP_ID, appSettings, /* callback */)\n\nval callAppSettings = CallAppSettingsBuilder()\n  .setAppId(BuildConfig.COMETCHAT_APP_ID)\n  .setRegion(BuildConfig.COMETCHAT_REGION)\n  .build()\nCometChatCalls.init(this, callAppSettings, /* callback */)\n```\n\n### V6 calls init\n\n```kotlin\nval settings = UIKitSettings.Builder()\n  // ... appId, region, authKey ...\n  .enableCalling()              // ← that's it; calls SDK init happens internally\n  .build()\n\nCometChatUIKit.init(this, settings) { /* ... */ }\n```\n\n### Permissions + manifest carry over\n\nV5's manifest entries (FOREGROUND_SERVICE_*, MANAGE_OWN_CALLS, BIND_TELECOM_CONNECTION_SERVICE, RECORD_AUDIO, CAMERA, POST_NOTIFICATIONS) are unchanged on V6. Same `foregroundServiceType=\"phoneCall|microphone|camera\"` rule applies. See `cometchat-android-v5-calls/references/voip-calling.md` — the VoIP push implementation works as-is on V6.\n\n### KEEP `calls-sdk-android:5.0.+` — V6 still needs it as a peer dep\n\n**⚠️ Despite vendor marketing of \"bundled calling,\" chatuikit-compose-android:6.0.0 ships without the calls SDK and CRASHES on init without it.** Keep `com.cometchat:calls-sdk-android:5.0.+` in `app/build.gradle.kts` plus apply the W3 stub-class workaround. Full set of five required workarounds is in `cometchat-android-v6-calls` §\"Five required workarounds\" — apply them all if your app uses calls.\n\nEarlier guidance to \"drop calls-sdk-android\" was wrong; validated end-to-end against a web peer on 2026-05-12 confirmed the dep is mandatory.\n\n---\n\n## 6. Theme system rewrite\n\n### V5 — XML theme attrs + style classes\n\n```xml\n<!-- res/values/themes.xml -->\n<style name=\"Theme.YourApp\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n  <item name=\"cometchatPrimaryColor\">@color/your_primary</item>\n  <item name=\"cometchatBackgroundColor\">@color/your_bg</item>\n  <!-- ... -->\n</style>\n```\n\nPlus programmatic overrides via `CometChatTheme.getInstance().palette.setPrimary(...)`.\n\n### V6 Compose — `CometChatTheme` composable\n\n```kotlin\nsetContent {\n  CometChatTheme(\n    colorScheme = lightColorScheme(\n      primary = Color(0xFF6750A4),\n      // ...\n    ),\n    typography = ourTypography,\n    shapes = ourShapes,\n  ) {\n    AppNavigation()\n  }\n}\n```\n\n### V6 Kotlin Views — `CometChatTheme.DayNight` parent\n\n```xml\n<!-- res/values/themes.xml -->\n<style name=\"Theme.YourApp\" parent=\"CometChatTheme.DayNight\">\n  <item name=\"cometchatPrimaryColor\">@color/your_primary</item>\n  <!-- ... -->\n</style>\n```\n\n**CRITICAL:** Activity themes hosting V6 Kotlin Views components MUST inherit from `CometChatTheme.DayNight` (or its `.Light` / `.Dark` variants) — NOT `Theme.AppCompat.*` or `Theme.MaterialComponents.*`. V6 components extend `MaterialCardView` and reference kit-specific theme attrs that aren't in the older theme parents. Crash signature: `Failed to resolve attribute at index N`.\n\nThis is documented in `cometchat-android-v6-troubleshooting` and surfaced in the V6 calls smoke (calls components are the canary that exposes the bug first).\n\n### Migration plan for theme\n\n1. Audit V5 theme attrs (`grep cometchat res/values/`)\n2. Map each to its V6 equivalent (most are same names; some have been renamed for Material 3 alignment)\n3. Activity manifest: change `android:theme=\"@style/Theme.AppCompat.*\"` → `android:theme=\"@style/Theme.YourApp\"` where the new theme inherits `CometChatTheme.DayNight`\n4. Programmatic theme overrides: rewrite via Compose `CometChatTheme(colorScheme = ...)` or Kotlin Views `CometChatTheme.singleton.colors.primary = ...` (depending on surface)\n\nFor full mapping, see `cometchat-android-v6-{compose,kotlin}-theming`.\n\n---\n\n## 7. Component name + import migration\n\nThe component names (`CometChatConversations`, `CometChatMessageList`, `CometChatMessageHeader`, `CometChatMessageComposer`, `CometChatUsers`, `CometChatGroups`, `CometChatCallButtons`, etc.) are unchanged in V6. The packages differ:\n\n### V5 imports\n\n```kotlin\nimport com.cometchat.chatuikit.conversations.CometChatConversations\nimport com.cometchat.chatuikit.messages.CometChatMessageList\n```\n\n### V6 Compose imports\n\n```kotlin\nimport com.cometchat.chatuikit.compose.conversations.CometChatConversations\nimport com.cometchat.chatuikit.compose.messages.CometChatMessageList\n```\n\n### V6 Kotlin Views imports\n\n```kotlin\nimport com.cometchat.chatuikit.kotlin.conversations.CometChatConversations\nimport com.cometchat.chatuikit.kotlin.messages.CometChatMessageList\n```\n\nThe skill rewrites imports during migration. Most projects can do a regex sweep:\n\n```bash\n# Compose path\nsed -i 's|com.cometchat.chatuikit.conversations|com.cometchat.chatuikit.compose.conversations|g' app/src/main/kotlin/**/*.kt\n# Kotlin Views path\nsed -i 's|com.cometchat.chatuikit.conversations|com.cometchat.chatuikit.kotlin.conversations|g' app/src/main/kotlin/**/*.kt\n```\n\nBut verify each rewrite — some V5 modules have been split or merged in V6 in ways the agent should review case-by-case.\n\n---\n\n## 8. Side-by-side cohort selection\n\nV5 and V6 skill sets both ship in `--family android`. During migration, the dispatcher detects which is in use from `app/build.gradle.kts`:\n\n- `chat-uikit-android:5.x` only → V5 cohort\n- `chatuikit-{compose,kotlin}-android:6.x` only → V6 cohort\n- Both present → ASK (rare; usually means in-progress migration)\n\nFor an in-progress migration, you can have V5 and V6 in the same module temporarily, but they'll fight over runtime singletons (`CometChatUIKit.init` exists in both). Best practice: migrate one feature at a time, fully — don't leave a half-migrated state.\n\n---\n\n## 9. Migration plan template\n\n```\n□ Audit current V5 integration\n  □ Which V5 skills' patterns are in use?\n  □ List Activities / Fragments hosting CometChat surfaces\n  □ List custom views, decorators, request builders\n  □ List theme attrs in use\n\n□ Pick V6 surface\n  □ Compose vs Kotlin Views per chat screen\n  □ Bump minSdk if below 28\n\n□ Update gradle\n  □ Remove chat-uikit-android:5.x\n  □ KEEP calls-sdk-android:5.0.+ (V6 needs it as peer dep — see §\"Drop the calls-sdk-android dependency\" above)\n  □ Add chatuikit-{compose,kotlin}-android:6.0.0-beta2\n  □ Add Compose deps (if applicable) or Material Components (if Kotlin Views)\n\n□ Rewrite init\n  □ UIKitSettingsBuilder → UIKitSettings.Builder()\n  □ Drop separate CometChatCalls.init; add .enableCalling() on UIKitSettings\n  □ CallbackListener → Result sealed class\n\n□ Rewrite themes\n  □ Activity theme parent → CometChatTheme.DayNight (Kotlin Views)\n  □ Compose entry uses CometChatTheme composable\n  □ Re-map any custom theme attrs\n\n□ Rewrite imports\n  □ All com.cometchat.chatuikit.* → com.cometchat.chatuikit.{compose,kotlin}.*\n\n□ Migrate custom views / decorators / request builders\n  □ See cometchat-android-v6-{compose,kotlin}-customization\n\n□ Verify build\n  □ ./gradlew clean assembleDebug\n  □ Resolve any \"Duplicate class\" errors (drop conflicting V5 deps)\n\n□ Smoke on real device\n  □ Login → see conversations\n  □ Send message\n  □ Call (voice + video)\n  □ Theme renders correctly (light + dark)\n  □ No crashes from theme parent mismatch\n```\n\n---\n\n## 10. Common migration failure modes\n\n| Symptom | Cause | Fix |\n|---|---|---|\n| Build error: \"Duplicate class com.cometchat.chatuikit.*\" | Both V5 and V6 deps in `app/build.gradle.kts` | Remove `chat-uikit-android:5.x` |\n| `IllegalArgumentException` at activity start | Activity theme not `CometChatTheme.DayNight` | Update theme parent |\n| Calls don't ring / `E/CallManager: Calling module not found` | chatuikit-compose:6.0.0 needs `calls-sdk-android:5.0.+` as explicit peer + W1–W5 workarounds | See `cometchat-android-v6-calls` §\"Five required workarounds\" — do NOT remove calls-sdk-android |\n| Theme attrs missing | V5 attr name renamed in V6 | Audit `cometchat-android-v6-{compose,kotlin}-theming` for the V6 attr name |\n| `Failed to resolve attribute at index N` | Activity theme inherits `Theme.AppCompat.*` | Change parent to `CometChatTheme.DayNight` |\n| Init never resolves | V5 `CometChat.init` still being called alongside V6 `CometChatUIKit.init` | Remove the V5 call |\n| `minSdk` build error | Trying to use V6 with minSdk < 28 | Bump minSdk to 28 |\n\n---\n\n## 11. Verification checklist\n\n- [ ] `app/build.gradle.kts` has only one CometChat dep tree (V5 OR V6, not both)\n- [ ] `minSdk = 28` or higher\n- [ ] All V5 imports rewritten to the V6 surface (`compose` or `kotlin` namespace)\n- [ ] `UIKitSettingsBuilder` → `UIKitSettings.Builder()` everywhere\n- [ ] `.enableCalling()` on the builder if calls are used\n- [ ] Activity themes inherit `CometChatTheme.DayNight` (Kotlin Views path)\n- [ ] No `CometChatCalls.init` calls outside what V6 does internally\n- [ ] `calls-sdk-android:5.0.+` retained as explicit peer dep (V6 needs it; despite vendor marketing of \"bundled calls\")\n- [ ] Build succeeds: `./gradlew clean assembleDebug`\n- [ ] Real-device smoke: login + chat + voice call + video call\n- [ ] Theme smoke: light mode + dark mode + custom palette renders correctly\n\n## 12. Pointers\n\n- `cometchat-android-v6-core` — V6 init/login/build setup\n- `cometchat-android-v6-builder-settings` — full UIKitSettings options\n- `cometchat-android-v6-{compose,kotlin}-{components,placement,theming,customization}` — destination skills per surface\n- `cometchat-android-v6-calls` — calls integration delta\n- `cometchat-android-v6-troubleshooting` — common V6-specific failure modes (theme parent, R8, Compose runtime)\n- `cometchat-flutter-v6-migration` — sibling skill for Flutter (same migration shape on a different platform)","tags":["cometchat","android","migration","skills","agent-skills","ai-agent","chat","claude-code","cursor","messaging","nextjs","react"],"capabilities":["skill","source-cometchat","skill-cometchat-android-v6-migration","topic-agent-skills","topic-ai-agent","topic-chat","topic-claude-code","topic-cometchat","topic-cursor","topic-messaging","topic-nextjs","topic-react","topic-react-native","topic-ui-kit"],"categories":["cometchat-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/cometchat/cometchat-skills/cometchat-android-v6-migration","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add cometchat/cometchat-skills","source_repo":"https://github.com/cometchat/cometchat-skills","install_from":"skills.sh"}},"qualityScore":"0.463","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 27 github stars · SKILL.md body (15,116 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:47.183Z","embedding":null,"createdAt":"2026-05-18T07:04:18.981Z","updatedAt":"2026-05-18T19:04:47.183Z","lastSeenAt":"2026-05-18T19:04:47.183Z","tsv":"'-05':954 '-12':955 '-27':284,600 '/.gradle/caches':213 '/gradlew':1510,1768 '/references/voip-calling.md':845 '0xff6750a4':989 '1':236,1080 '1.11':571 '10':1545 '11':1690 '12':1791 '2':374,1088 '2024.02.00':528 '2026':953 '21':283,590,599 '28':288,593,1403,1685,1689,1706 '3':277,466,1105,1107 '4':620,1123 '5':20,70,209,727,1288,1411,1570 '5.0':481,489,861,898,1418,1601,1751 '6':32,961,1297 '6.0.0':78,221,399,415,504,554,880,1439,1595 '7':1150 '8':1256 '9':1357 'activ':256,1002,1108,1373,1469,1574,1576,1653,1732 'add':359,1434,1441,1459 'addit':268 'address':610 'agent':274,323,1249 'ai':273,322 'align':1106 'alongsid':1669 'alreadi':405,520 'android':3,12,19,31,63,69,77,146,154,161,173,188,208,220,343,361,398,414,480,488,503,553,723,738,750,842,860,879,897,919,940,1056,1111,1114,1145,1272,1287,1296,1410,1417,1431,1438,1503,1569,1600,1611,1623,1636,1750,1795,1803,1812,1826,1834 'android.enablejetifier':579 'android.useandroidx':577 'androidx.compose':524,530 'androidx.compose.ui':534,537 'anyway':309 'api':132,168,622 'app':85,247,304,402,404,418,435,465,634,665,764,773,930 'app/build.gradle.kts':473,900,1283,1564,1693 'app/src/main/kotlin':1219,1230 'appid':790 'appli':838,902,925 'applic':1445 'application.oncreate':760 'appnavig':994 'appset':766 'aren':315,1034 'artifact':211,223,515,739 'as-i':851 'ask':451,1304 'assembledebug':1512,1770 'attr':968,1032,1084,1386,1486,1625,1628,1644 'attribut':1046,1649 'audio':824 'audit':614,1081,1361,1633 'auth':638,672 'authkey':792 'backport':317 'baselin':151 'bash':1210 'best':1340 'beta':27,82,329 'beta2':79,222,400,416,505,555,1440 'bind':819 'bom':527 'bug':1074 'build':641,684,778,802,1509,1553,1677,1766 'buildconfig.cometchat':633,637,664,668,671,763,772,776 'builder':131,163,717,725,1383,1499,1727,1805 'bump':611,1399,1686 'bundl':40,196,511,744,874,1764 'call':39,135,190,191,193,486,491,508,510,558,676,703,728,736,745,756,784,797,818,844,858,875,884,895,921,932,938,1064,1066,1415,1429,1531,1583,1588,1598,1613,1621,1668,1675,1729,1741,1748,1765,1778,1780,1828,1829 'callappset':769,781 'callappsettingsbuild':770 'callback':767,782 'callbacklisten':710,1463 'calls-sdk-android':485,735,857,894,937,1414,1428,1597,1620,1747 'camera':825,836 'canari':1070 'carri':574,808 'case':333,1253,1255 'case-by-cas':1252 'caus':1551 'chang':138,1110,1657 'chat':17,67,206,259,439,459,478,482,1285,1397,1408,1567,1776 'chat-uikit-android':16,66,205,477,1284,1407,1566 'chatuikit':28,74,217,396,412,501,551,747,877,1293,1435,1593 'chatuikit-compos':1592 'chatuikit-compose-android':395,500,876 'chatuikit-kotlin-android':411,550 'checklist':1692 'class':699,714,907,970,1466,1516,1556 'clean':1511,1769 'cohort':53,373,376,1261,1292,1301 'cohort-select':52 'color':988 'colorschem':985,1131 'com.cometchat':204,394,410,476,484,499,549,893 'com.cometchat.chatuikit':1490,1491,1557 'com.cometchat.chatuikit.compose.conversations':1217 'com.cometchat.chatuikit.compose.conversations.cometchatconversations':1185 'com.cometchat.chatuikit.compose.messages.cometchatmessagelist':1187 'com.cometchat.chatuikit.conversations':1216,1227 'com.cometchat.chatuikit.conversations.cometchatconversations':1177 'com.cometchat.chatuikit.kotlin.conversations':1228 'com.cometchat.chatuikit.kotlin.conversations.cometchatconversations':1194 'com.cometchat.chatuikit.kotlin.messages.cometchatmessagelist':1196 'com.cometchat.chatuikit.messages.cometchatmessagelist':1179 'com.google.android.material':569 'cometchat':2,13,62,145,153,160,172,187,227,342,722,841,918,1055,1086,1144,1376,1502,1610,1635,1697,1794,1802,1811,1825,1833,1849 'cometchat-android-v5-calls':840 'cometchat-android-v5-core':144 'cometchat-android-v6':171,341,1143,1501,1634,1810 'cometchat-android-v6-builder-settings':159,721,1801 'cometchat-android-v6-calls':186,917,1609,1824 'cometchat-android-v6-core':152,1793 'cometchat-android-v6-migration':1 'cometchat-android-v6-troubleshooting':1054,1832 'cometchat-flutter-v6-migration':226,1848 'cometchat.callbacklistener':646 'cometchat.init':761,1665 'cometchat/skills':358 'cometchatcallbutton':1164 'cometchatcalls.init':742,779,1458,1740 'cometchatconvers':1158 'cometchatexcept':656 'cometchatgroup':1163 'cometchatmessagecompos':1161 'cometchatmessagehead':1160 'cometchatmessagelist':1159 'cometchatthem':980,984,1130,1478 'cometchattheme.daynight':564,998,1012,1122,1472,1579,1660,1735 'cometchattheme.getinstance':976 'cometchattheme.singleton.colors.primary':1135 'cometchatuikit.init':642,685,803,1336,1671 'cometchatuikit.result.error':694 'cometchatuikit.result.success':692 'cometchatus':1162 'common':1546,1837 'compat':619 'compon':177,324,561,1008,1023,1067,1151,1156,1448,1816 'compos':29,34,75,175,218,270,308,378,393,397,407,427,494,502,516,526,748,878,979,981,1129,1147,1181,1211,1294,1392,1436,1442,1475,1479,1492,1505,1594,1638,1717,1814,1846 'compose-bom':525 'compose-first':269 'confirm':956 'conflict':1519 'connect':821 'convers':1528 'coordin':130 'core':148,156,1797 'correct':1536,1790 'cover':45 'crash':887,1041,1540 'critic':1001 'current':149,1362 'custom':180,1379,1484,1495,1507,1787,1819 'd':55 'dark':1016,1538,1785 'decis':377 'decor':1381,1497 'default':279,461 'delta':1831 'dep':869,958,1424,1443,1521,1562,1698,1756 'depend':468,474,497,517,547,617,1136,1432 'despit':870,1760 'destin':157,184,372,1820 'detail':170 'detect':347,1277 'devic':1525,1773 'differ':106,231,698,1172,1862 'dispatch':340,1276 'document':1052 'drop':111,936,1426,1456,1518 'drop-in':110 'duplic':1515,1555 'e':655 'e.g':320 'e/callmanager':1587 'earlier':933 'enablecal':675,707,754,793,1460,1724 'end':945,947 'end-to-end':944 'entri':813,1476 'equival':1094 'error':1517,1554,1678 'etc':1165 'evalu':96 'eventu':101 'everywher':1723 'exist':303,403,417,1337 'explicit':1603,1754 'expos':1072 'extend':565,1024 'fail':1043,1646 'failur':1548,1841 'famili':360,1271 'featur':260,313,1344 'fight':1332 'first':143,271,338,607,1075 'five':912,922,1614 'fix':1552 'flag':708 'floor':587 'flutter':228,1850,1856 'foreground':814 'foregroundservicetyp':833 'found':1591 'fragment':1374 'full':716,909,1140,1807 'fulli':1348 'fun':648,653 'g':1218,1229 'gradl':467,1405 'gradle.properties':572 'grep':1085 'ground':199 'guidanc':934 'half':1354 'half-migr':1353 'handl':136 'happen':800 'higher':1708 'host':1004,1375 'id':635,666,765,774 'illegalargumentexcept':1572 'implement':475,483,498,522,529,533,536,548,568,849 'import':1153,1174,1176,1178,1182,1184,1186,1191,1193,1195,1200,1488,1711 'in-progress':1308,1314 'index':1048,1651 'inherit':1010,1121,1655,1734 'init':621,706,757,785,799,889,1453,1661 'init/login/build':1799 'instal':203,216 'integr':275,729,1364,1830 'intern':801,1746 'java':22,420 'jump':121 'keep':856,892,1413 'key':639,673 'kit':1029 'kit-specif':1028 'kotlin':23,30,37,76,176,219,380,408,413,472,496,543,546,552,626,659,749,758,786,982,996,1006,1133,1148,1175,1183,1189,1192,1221,1295,1394,1437,1450,1473,1493,1506,1639,1719,1736,1815 'kt':1220,1231 'layout':422 'leav':1351 'light':1015,1537,1783 'lightcolorschem':986 'list':1372,1378,1384 'live':365 'll':1331 'login':1526,1775 'manag':816 'mandatori':960 'manifest':807,812,1109 'map':719,1089,1141,1482 'market':872,1762 'match':462 'materi':276,560,566,570,1104,1447 'material3':531,532 'materialcardview':1025 'mean':1307 'merg':1243 'messag':1530 'microphon':835 'migrat':5,8,48,57,102,115,192,230,234,239,363,449,469,730,1076,1154,1202,1274,1311,1317,1342,1355,1358,1494,1547,1852,1858 'minsdk':281,287,586,589,592,598,612,1400,1676,1684,1687,1705 'mismatch':1544 'miss':1626 'mix':430 'mode':1549,1784,1786,1842 'modul':1238,1327,1589 'move':60,289 'must':1009 'n':1049,1652 'name':700,1098,1152,1157,1629,1645 'namespac':1720 'nativ':11,124 'need':264,311,864,1420,1596,1758 'never':1662 'new':166,258,297,401,1119 'notif':827 'npx':357 'object':645 'older':1038 'one':442,1343,1696 'onerror':654 'onsuccess':649 'option':718,1809 'ourshap':993 'ourtypographi':991 'outsid':1742 'overrid':647,652,974,1126 'packag':129,389,1171 'palett':1788 'palette.setprimary':977 'parent':999,1040,1471,1543,1582,1658,1844 'path':495,545,1212,1223,1738 'pattern':1368 'peer':868,951,1423,1604,1755 'per':1396,1822 'permiss':806 'phonecal':834 'pick':392,1389 'placement':178,1817 'plan':99,450,1077,1359 'platform':232,523,1863 'plus':901,972 'pointer':1792 'post':826 'practic':1341 'present':521,1303 'preview':541 'primari':987 'product':84,250 'programmat':973,1124 'progress':1310,1316 'project':298,337,1204 'properti':576 'purpos':56 'push':848 'r8':1845 'rare':1305 're':254,294,300,596,1481 're-map':1480 'react':123 'read':139 'readi':425 'real':1524,1772 'real-devic':1771 'recip':9,58 'record':823 'refer':1027 'regex':1208 'region':669,777,791 'remov':1406,1565,1619,1672 'renam':1102,1630 'render':1535,1789 'replac':113 'request':1382,1498 'requir':286,583,913,923,1615 'res/values':1087 'resolv':1045,1513,1648,1663 'result':688,690,709,1464 'result.error':712 'result.success':711 'retain':1752 'review':1251 'rewrit':301,623,964,1127,1199,1235,1452,1467,1487 'rewritten':1712 'ring':1586 'rough':117 'rout':345 'rule':573,837 'runtim':1334,1847 'sampl':336 'screen':460,1398 'sdk':107,194,487,492,509,559,683,705,737,798,859,885,896,939,1416,1430,1599,1622,1749 'seal':713,1465 'sed':1213,1224 'see':720,839,1142,1425,1500,1527,1608 'select':54,1262 'send':1529 'separ':490,507,557,682,704,734,741,1457 'servic':815,822 'set':164,354,628,644,661,687,726,788,805,910,1267,1806 'setappid':632,663,771 'setauthkey':636,670 'setcont':983 'setregion':630,667,775 'setup':1800 'shape':235,992,1859 'ship':14,257,355,881,1269 'sibl':1853 'side':42,44,1258,1260 'side-by-sid':41,1257 'signatur':1042 'singl':438 'singleton':1335 'sister':224 'size':119 'skill':92,142,185,225,353,1198,1266,1367,1821,1854 'skill-cometchat-android-v6-migration' 'smoke':1065,1522,1774,1782 'sourc':202,215 'source-cometchat' 'specif':183,267,1030,1840 'split':384,1241 'stabl':252 'start':295,1575 'state':150,158,1356 'stay':50,87,241,242 'still':582,863,1666 'string':651 'stub':906 'stub-class':905 'style':969 'style/theme.appcompat':1113 'style/theme.yourapp':1116 'subscribepresenceforallus':640,674 'succeed':1767 'surfac':35,182,272,387,388,440,456,695,1060,1138,1377,1391,1716,1823 'surface-specif':181 'surround':464 'sweep':1209 'symptom':1550 'system':134,963 'team':95,423 'telecom':820 'templat':1360 'temporarili':1328 'theme':133,179,278,563,567,962,967,1003,1031,1039,1079,1083,1112,1115,1120,1125,1149,1385,1468,1470,1485,1534,1542,1577,1581,1624,1640,1654,1733,1781,1818,1843 'theme.appcompat':1019,1656 'theme.materialcomponents':1021 'thing':608 'time':1347 'today':90,471 'toggl':677,752 'tool':540 'topic-agent-skills' 'topic-ai-agent' 'topic-chat' 'topic-claude-code' 'topic-cometchat' 'topic-cursor' 'topic-messaging' 'topic-nextjs' 'topic-react' 'topic-react-native' 'topic-ui-kit' 'tree':1699 'tri':1679 'troubleshoot':1058,1836 'true':578,580 'truth':200 'two':386 'typographi':990 'ui':306,535,539,697 'ui-tooling-preview':538 'uikit':18,64,68,125,207,479,1286,1409,1568 'uikitset':167,1462,1808 'uikitsettings.builder':658,662,702,789,1455,1722 'uikitsettingsbuild':625,629,701,1454,1721 'unchang':829,1167 'updat':1404,1580 'upfront':454 'us':631 'use':332,931,1281,1371,1388,1477,1681,1731 'user':453 'usual':1306 'v5':6,15,65,89,126,147,201,244,319,350,470,588,624,731,755,810,843,965,1082,1173,1237,1263,1291,1321,1363,1366,1520,1559,1627,1664,1674,1700,1710 'v6':4,7,26,73,80,97,103,128,155,162,174,189,198,214,229,265,285,291,312,328,344,352,367,382,493,542,585,591,603,657,724,743,783,831,855,862,920,978,995,1005,1022,1057,1063,1093,1146,1169,1180,1188,1245,1265,1300,1323,1390,1419,1504,1561,1612,1632,1637,1643,1670,1682,1702,1715,1744,1757,1796,1798,1804,1813,1827,1835,1839,1851 'v6-specific':1838 'val':627,660,768,787 'valid':327,943 'variant':1017 've':326 'vendor':871,1761 'verif':1691 'verifi':1233,1508 'version':348 'via':681,753,975,1128 'video':1533,1779 'view':24,38,381,409,544,997,1007,1134,1190,1222,1380,1395,1451,1474,1496,1737 'voic':1532,1777 'voip':847 'vs':49,240,379,1393 'w1':1605 'w3':904 'w5':1606 'want':602 'way':1247 'web':950 'without':882,890 'work':850 'workaround':908,914,924,1607,1616 'wrong':942 'x':21,33,71,210,1289,1298,1412,1571 'xml':421,966,971,1000","prices":[{"id":"e712013b-5ee2-4056-86f1-d42295039b9b","listingId":"ca317f2b-230d-4624-b5b2-69e54e98b190","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"cometchat","category":"cometchat-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T07:04:18.981Z"}],"sources":[{"listingId":"ca317f2b-230d-4624-b5b2-69e54e98b190","source":"github","sourceId":"cometchat/cometchat-skills/cometchat-android-v6-migration","sourceUrl":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-android-v6-migration","isPrimary":false,"firstSeenAt":"2026-05-18T07:04:18.981Z","lastSeenAt":"2026-05-18T19:04:47.183Z"}],"details":{"listingId":"ca317f2b-230d-4624-b5b2-69e54e98b190","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"cometchat","slug":"cometchat-android-v6-migration","github":{"repo":"cometchat/cometchat-skills","stars":27,"topics":["agent-skills","ai-agent","chat","claude-code","cometchat","cursor","messaging","nextjs","react","react-native","ui-kit"],"license":null,"html_url":"https://github.com/cometchat/cometchat-skills","pushed_at":"2026-05-18T05:04:24Z","description":"Add CometChat chat to any React, Next.js, React Native, Angular, Android, iOS, or Flutter project through your AI coding agent. Works with Claude Code, Cursor, Codex, VS Code Copilot, Windsurf, Cline, Kiro, and 50+ more agents.","skill_md_sha":"8b4214f0cd221da422f9973244687c9504fb6434","skill_md_path":"skills/cometchat-android-v6-migration/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/cometchat/cometchat-skills/tree/main/skills/cometchat-android-v6-migration"},"layout":"multi","source":"github","category":"cometchat-skills","frontmatter":{"name":"cometchat-android-v6-migration","license":"MIT","description":"V5→V6 migration recipes for native Android. CometChat ships V5 (chat-uikit-android:5.x — Java + Kotlin Views) and V6 beta (chatuikit-{compose,kotlin}-android:6.x — Compose surface OR Kotlin Views, calls bundled) side-by-side. Covers when to migrate vs stay, the cohort-selection decision (Compose vs Kotlin Views on V6), gradle dependency rewrites, builder API changes (UIKitSettings replaces UIKitSettingsBuilder), theme system rewrite (CometChatTheme.DayNight), calls integration delta (calls bundled — drop calls-sdk-android), Activity theme rules, side-by-side cohort selection during migration, and a verification checklist.","compatibility":"Migrating FROM com.cometchat:chat-uikit-android:5.x TO com.cometchat:chatuikit-{compose,kotlin}-android:6.0.0-beta2; minSdk 28+ (V6 raised the floor from 21 to 28); Kotlin >= 1.9 for V6 Compose"},"skills_sh_url":"https://skills.sh/cometchat/cometchat-skills/cometchat-android-v6-migration"},"updatedAt":"2026-05-18T19:04:47.183Z"}}