Ground truth: cometchat_chat_uikit: ^5.2 (legacy/maintenance-only; calls via raw cometchat_calls_sdk ^5.0.2) — pub-cache source + ui-kit/flutter/v5. Official docs: https://www.cometchat.com/docs/ui-kit/flutter/v5/overview · Docs MCP: claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.
CometChat Flutter UIKit v5 — Orchestrator
Entry point skill for the CometChat UIKit v5 packages. Routes to feature skills based on context.
Project Detection
Confirm the project uses CometChat UIKit v5 by checking pubspec.yaml for:
dependencies:
cometchat_chat_uikit: ^5.2.14
cometchat_calls_uikit: ^5.0.15 # part of the v5 kit family — but NOT the calls path (see note)
⚠️ Voice/video calling does NOT use cometchat_calls_uikit. Its prebuilt call widgets are 4.x-bound (it transitively pins cometchat_calls_sdk ^4.2.2). Per the product policy that all families use the V5 calls SDK, Flutter V5 calling integrates the raw cometchat_calls_sdk ^5.0.2 with a custom call surface — load cometchat-flutter-v5-calls. Do not add cometchat_calls_uikit for calls.
The v5 uses separate packages (unlike v6 which bundles everything):
cometchat_chat_uikit — Chat UI components
cometchat_calls_uikit — Call UI components (re-exports cometchat_uikit_shared + cometchat_sdk + cometchat_calls_sdk; does NOT re-export cometchat_chat_uikit)
cometchat_uikit_shared — Shared utilities
Imports — two barrels, not one. For chat-only apps, the chat barrel is sufficient. If you also need voice/video calls, add a SECOND import — the calls barrel does NOT re-export the chat barrel.
// Always:
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
// Add this only if your app uses calls:
import 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';
Key v5 vs v6 Differences
| Aspect |
v5 |
v6 |
| State management |
GetX (GetBuilder, GetxController) |
BLoC (Bloc, Equatable) |
| Packages |
Separate (chat_uikit + calls_uikit) |
Single (cometchat_chat_uikit) |
| Controllers |
Get.put() internally |
ServiceLocator pattern |
| SDK |
cometchat_sdk ^4.1.2 |
cometchat_sdk ^5.0.0 |
Skill Routing
| User mentions |
Route to skill |
| init, login, logout, UIKitSettings, setup, GetX, GetBuilder |
cometchat-flutter-v5-core |
| theme, colors, dark mode, styling, CometChatColorPalette, merge() |
cometchat-flutter-v5-theming |
| conversations, conversation list, recent chats |
cometchat-flutter-v5-conversations |
| messages, message list, composer, compact composer, header, keyboard, threads |
cometchat-flutter-v5-messages |
| users, groups, group members, contacts, CometChatChangeScope |
cometchat-flutter-v5-users-groups |
| calls, voice call, video call, CometChatCallButtons, incoming call, call logs |
cometchat-flutter-v5-calls |
| events, listeners, real-time, typing indicator, online status, receipts |
cometchat-flutter-v5-events |
| custom bubbles, templates, DataSource, decorator, formatters, slot views, extensions |
cometchat-flutter-v5-customization |
enable a feature, polls, reactions, stickers, message translation, AI, apply-feature |
cometchat-flutter-v6-features (proxy — V5 has no separate features skill; feature enablement is the same apply-feature/dashboard path, only UI wiring differs; V5 is legacy/maintenance-only) |
| push notifications, FCM, APNs, VoIP, token, firebase messaging, callkit |
cometchat-flutter-v5-push |
| auth tokens, ProGuard, release build, security, environment, production |
cometchat-flutter-v5-production |
| error, debug, not working, crash, fix, troubleshoot, verify |
cometchat-flutter-v5-troubleshooting |
Architecture Overview
The UIKit v5 follows a GetX controller pattern:
{component}/
├── cometchat_{component}.dart # StatefulWidget
├── cometchat_{component}_controller.dart # extends GetxController
├── cometchat_{component}_style.dart # ThemeExtension with merge()
└── {component}_builder_protocol.dart # Request builder protocol
Golden Path — Minimal Chat App (v5)
import 'package:flutter/material.dart';
import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';
// Add the calls import only if your app uses voice/video calls:
// import 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';
const String appId = 'YOUR_APP_ID';
const String region = 'us';
const String authKey = 'YOUR_AUTH_KEY';
void main() => runApp(const MyApp());
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _initializing = true;
bool _loggedIn = false;
@override
void initState() {
super.initState();
_initCometChat();
}
void _initCometChat() {
final settings = (UIKitSettingsBuilder()
..appId = appId
..region = region
..authKey = authKey
..subscriptionType = CometChatSubscriptionType.allUsers)
.build();
// For voice/video calls, also `import cometchat_calls_uikit` and add
// ..callingExtension = CometChatCallingExtension()
// to the builder above (see cometchat-flutter-v5-calls).
CometChatUIKit.init(
uiKitSettings: settings,
onSuccess: (_) {
setState(() {
_loggedIn = CometChatUIKit.loggedInUser != null;
_initializing = false;
});
},
onError: (e) {
debugPrint('Init failed: ${e.message}');
setState(() => _initializing = false);
},
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: CallNavigationContext.navigatorKey,
home: _initializing
? const Scaffold(body: Center(child: CircularProgressIndicator()))
: _loggedIn
? HomeScreen()
: LoginScreen(),
);
}
}
Key points:
- Always import
package:cometchat_chat_uikit/cometchat_chat_uikit.dart for chat widgets; add package:cometchat_calls_uikit/cometchat_calls_uikit.dart as a second import only when using calls
CometChatUIKit.login(uid) takes a String directly
CallNavigationContext.navigatorKey set on MaterialApp
CometChatCallingExtension() set on UIKitSettingsBuilder
subscriptionType always set
Autonomous Mode
- If
pubspec.yaml has cometchat_chat_uikit v5.x or cometchat_calls_uikit v5.x → proceed without asking
- If credentials exist in code → reuse them
- If user says "messages screen" → generate Scaffold + Header + List + Composer
- Always add
subscriptionType to UIKitSettingsBuilder
- Always use
CometChatThemeHelper for colors, never hardcode
- Always import from
cometchat_chat_uikit barrel for chat widgets. Add cometchat_calls_uikit as a SECOND import for calls — never as a replacement (the calls barrel does not re-export chat).
Android Build Requirements
android.useAndroidX=true and android.enableJetifier=true in gradle.properties
minSdk 26 in android/app/build.gradle
- ProGuard:
-keep class com.cometchat.** { *; }
1---2name: cometchat-flutter-v53description: Use when building chat with CometChat Flutter UIKit v5 (cometchat_chat_uikit v5.2.14, cometchat_calls_uikit v5.0.15). Orchestrator skill that routes to feature-specific skills.4license: MIT5---67> **Ground truth:** `cometchat_chat_uikit: ^5.2` (legacy/maintenance-only; calls via raw `cometchat_calls_sdk ^5.0.2`) — pub-cache source + `ui-kit/flutter/v5`. **Official docs:** https://www.cometchat.com/docs/ui-kit/flutter/v5/overview · **Docs MCP:** `claude mcp add --transport http cometchat-docs https://www.cometchat.com/docs/mcp` (or fetch the URL directly without MCP). Verify symbols against the installed package/source before relying on them.89# CometChat Flutter UIKit v5 — Orchestrator1011Entry point skill for the CometChat UIKit v5 packages. Routes to feature skills based on context.1213## Project Detection1415Confirm the project uses CometChat UIKit v5 by checking `pubspec.yaml` for:1617```yaml18dependencies:19 cometchat_chat_uikit: ^5.2.1420 cometchat_calls_uikit: ^5.0.15 # part of the v5 kit family — but NOT the calls path (see note)21```2223> **⚠️ Voice/video calling does NOT use `cometchat_calls_uikit`.** Its prebuilt call widgets are **4.x-bound** (it transitively pins `cometchat_calls_sdk ^4.2.2`). Per the product policy that all families use the **V5 calls SDK**, Flutter V5 calling integrates the **raw `cometchat_calls_sdk ^5.0.2`** with a custom call surface — load **`cometchat-flutter-v5-calls`**. Do not add `cometchat_calls_uikit` for calls.2425The v5 uses **separate packages** (unlike v6 which bundles everything):26- `cometchat_chat_uikit` — Chat UI components27- `cometchat_calls_uikit` — Call UI components (re-exports `cometchat_uikit_shared` + `cometchat_sdk` + `cometchat_calls_sdk`; does NOT re-export `cometchat_chat_uikit`)28- `cometchat_uikit_shared` — Shared utilities2930**Imports — two barrels, not one.** For chat-only apps, the chat barrel is sufficient. If you also need voice/video calls, add a SECOND import — the calls barrel does NOT re-export the chat barrel.3132```dart33// Always:34import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';3536// Add this only if your app uses calls:37import 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';38```3940## Key v5 vs v6 Differences4142| Aspect | v5 | v6 |43|--------|----|----|44| State management | GetX (GetBuilder, GetxController) | BLoC (Bloc, Equatable) |45| Packages | Separate (chat_uikit + calls_uikit) | Single (cometchat_chat_uikit) |46| Controllers | `Get.put()` internally | ServiceLocator pattern |47| SDK | `cometchat_sdk ^4.1.2` | `cometchat_sdk ^5.0.0` |4849## Skill Routing5051| User mentions | Route to skill |52|---------------|---------------|53| init, login, logout, UIKitSettings, setup, GetX, GetBuilder | `cometchat-flutter-v5-core` |54| theme, colors, dark mode, styling, CometChatColorPalette, merge() | `cometchat-flutter-v5-theming` |55| conversations, conversation list, recent chats | `cometchat-flutter-v5-conversations` |56| messages, message list, composer, compact composer, header, keyboard, threads | `cometchat-flutter-v5-messages` |57| users, groups, group members, contacts, CometChatChangeScope | `cometchat-flutter-v5-users-groups` |58| calls, voice call, video call, CometChatCallButtons, incoming call, call logs | `cometchat-flutter-v5-calls` |59| events, listeners, real-time, typing indicator, online status, receipts | `cometchat-flutter-v5-events` |60| custom bubbles, templates, DataSource, decorator, formatters, slot views, extensions | `cometchat-flutter-v5-customization` |61| enable a feature, polls, reactions, stickers, message translation, AI, `apply-feature` | `cometchat-flutter-v6-features` (proxy — V5 has no separate features skill; feature *enablement* is the same `apply-feature`/dashboard path, only UI wiring differs; V5 is legacy/maintenance-only) |62| push notifications, FCM, APNs, VoIP, token, firebase messaging, callkit | `cometchat-flutter-v5-push` |63| auth tokens, ProGuard, release build, security, environment, production | `cometchat-flutter-v5-production` |64| error, debug, not working, crash, fix, troubleshoot, verify | `cometchat-flutter-v5-troubleshooting` |6566## Architecture Overview6768The UIKit v5 follows a **GetX controller pattern**:6970```71{component}/72├── cometchat_{component}.dart # StatefulWidget73├── cometchat_{component}_controller.dart # extends GetxController74├── cometchat_{component}_style.dart # ThemeExtension with merge()75└── {component}_builder_protocol.dart # Request builder protocol76```7778## Golden Path — Minimal Chat App (v5)7980```dart81import 'package:flutter/material.dart';82import 'package:cometchat_chat_uikit/cometchat_chat_uikit.dart';83// Add the calls import only if your app uses voice/video calls:84// import 'package:cometchat_calls_uikit/cometchat_calls_uikit.dart';8586const String appId = 'YOUR_APP_ID';87const String region = 'us';88const String authKey = 'YOUR_AUTH_KEY';8990void main() => runApp(const MyApp());9192class MyApp extends StatefulWidget {93 const MyApp({super.key});94 @override95 State<MyApp> createState() => _MyAppState();96}9798class _MyAppState extends State<MyApp> {99 bool _initializing = true;100 bool _loggedIn = false;101102 @override103 void initState() {104 super.initState();105 _initCometChat();106 }107108 void _initCometChat() {109 final settings = (UIKitSettingsBuilder()110 ..appId = appId111 ..region = region112 ..authKey = authKey113 ..subscriptionType = CometChatSubscriptionType.allUsers)114 .build();115 // For voice/video calls, also `import cometchat_calls_uikit` and add116 // ..callingExtension = CometChatCallingExtension()117 // to the builder above (see cometchat-flutter-v5-calls).118119 CometChatUIKit.init(120 uiKitSettings: settings,121 onSuccess: (_) {122 setState(() {123 _loggedIn = CometChatUIKit.loggedInUser != null;124 _initializing = false;125 });126 },127 onError: (e) {128 debugPrint('Init failed: ${e.message}');129 setState(() => _initializing = false);130 },131 );132 }133134 @override135 Widget build(BuildContext context) {136 return MaterialApp(137 navigatorKey: CallNavigationContext.navigatorKey,138 home: _initializing139 ? const Scaffold(body: Center(child: CircularProgressIndicator()))140 : _loggedIn141 ? HomeScreen()142 : LoginScreen(),143 );144 }145}146```147148Key points:149- Always import `package:cometchat_chat_uikit/cometchat_chat_uikit.dart` for chat widgets; add `package:cometchat_calls_uikit/cometchat_calls_uikit.dart` as a second import only when using calls150- `CometChatUIKit.login(uid)` takes a String directly151- `CallNavigationContext.navigatorKey` set on MaterialApp152- `CometChatCallingExtension()` set on UIKitSettingsBuilder153- `subscriptionType` always set154155## Autonomous Mode156157- If `pubspec.yaml` has `cometchat_chat_uikit` v5.x or `cometchat_calls_uikit` v5.x → proceed without asking158- If credentials exist in code → reuse them159- If user says "messages screen" → generate Scaffold + Header + List + Composer160- Always add `subscriptionType` to UIKitSettingsBuilder161- Always use `CometChatThemeHelper` for colors, never hardcode162- Always import from `cometchat_chat_uikit` barrel for chat widgets. Add `cometchat_calls_uikit` as a SECOND import for calls — never as a replacement (the calls barrel does not re-export chat).163164## Android Build Requirements165166- `android.useAndroidX=true` and `android.enableJetifier=true` in `gradle.properties`167- `minSdk 26` in `android/app/build.gradle`168- ProGuard: `-keep class com.cometchat.** { *; }`