cometchat-android-v6-compose-components — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-android-v6-compose-components (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Ground truth: catalogandroid-v6.json(287 symbols, from the INSTALLED 6.0.5 source, cross-checked against the published AAR). Param shapes below were read from the Compose source. Fetch anything else from docs (core→references/docs-map.md); never trust memory.
>
⚠️ This is the Jetpack Compose cohort. Artifactchatuikit-compose-android, namespacecom.cometchat.uikit.compose.presentation.*, components are composables configured by named params. The Views cohort (chatuikit-kotlin-android,setX(...)setters) is a separate skill — never install both.
cometchat-android-v6-core — install, credentials, initFromSettings → login → render, the fetch map. Assumed here, never repeated.cometchat-android-v6-compose-placement — where these go · cometchat-android-v6-compose-customization — theming and slots."which composables does the kit have?", "is there a <X> composable?", "what params does the conversations list take?", "can I replace a row / bubble region in Compose?".
⚠️ Required on Compose too:configurations.all { exclude(group = "org.jetbrains", module = "annotations-java5") }plusandroid.useAndroidX=true+android.enableJetifier=trueingradle.properties. The collision arrives viachatuikit-core-android, which BOTH cohorts pull, so a Compose-only app fails its FIRST build without them (~40Duplicate classerrors). Full block:cometchat-android-v6-core§Prerequisites & install.
implementation("com.cometchat:chatuikit-compose-android:6.0.5") + buildFeatures { compose = true } + the Kotlin Compose plugin. Same init/login gate as core.
The component NAMES are identical to the Views cohort — only the wiring differs. Import pattern: com.cometchat.uikit.compose.presentation.<area>.ui.<Component>. Not listed ⇒ not in the catalog ⇒ does not exist.
⚠️ Three exceptions to that path (verified vs 6.0.6): the calling trio DOES carry.uiin Compose —…compose.presentation.callbuttons.ui.CometChatCallButtons— which is the OPPOSITE of the Views cohort, so do not carry the Views exception across. And thepresentation.shared.*family drops.uientirely:…presentation.shared.searchbox.CometChatSearchBox,…presentation.shared.baseelements.avatar.CometChatAvatar,…presentation.shared.toolbar.CometChatToolbar.CometChatScopeChangeships in Views only — there is no Compose composable for it.
Conversations & lists — CometChatConversations · CometChatUsers · CometChatGroups · CometChatGroupMembers (+ row composables CometChatConversationListItem, CometChatUsersListItem, CometChatGroupMemberListItem, CometChatGroupsItem). Messaging — CometChatMessageHeader · CometChatMessageList · CometChatMessageComposer · CometChatMessageBubble · CometChatThreadHeader · CometChatThreadScreen · CometChatMessageInformation · CometChatMessageOption · CometChatMessageComposerAction · CometChatReactionList · CometChatMessageReaction · CometChatFlagMessageDialog · CometChatTypingIndicator · CometChatReceipt/CometChatReceipts. Bubbles by type — CometChatTextBubble · CometChatImageBubble/CometChatImagesBubble · CometChatVideoBubble/CometChatVideosBubble · CometChatAudioBubble/CometChatAudiosBubble · CometChatVoiceNoteBubble · CometChatFileBubble/CometChatFilesBubble · CometChatPollBubble · CometChatStickerBubble · CometChatCardBubble · CometChatCollaborativeBubble · CometChatActionBubble · CometChatCallActionBubble · CometChatMeetCallBubble · CometChatDeleteBubble · CometChatAIAssistantBubble. Calling — CometChatCallButtons · CometChatIncomingCall · CometChatOutgoingCall · CometChatOngoingCall · CometChatCallLogs · CometChatCallLogsListItem. Search, AI & notifications — CometChatSearch · CometChatSearchBox · CometChatAIAssistantChatHistory · CometChatAIConversationStarterView · CometChatAISmartRepliesView · CometChatAIConversationSummaryView · CometChatNotificationFeed. Composer add-ons & media — CometChatStickerKeyboard · CometChatEmojiKeyboard · CometChatCreatePoll · CometChatAttachmentTray/CometChatAttachmentTile · CometChatMediaRecorder/CometChatInlineMediaRecorder/CometChatInlineAudioRecorder · CometChatAudioVisualizer/CometChatInlineAudioWaveform · CometChatRichTextToolbar · CometChatSuggestionList · CometChatImagePreview · CometChatImageViewerScreen · CometChatVideoViewerScreen. Building blocks — CometChatAvatar · CometChatBadgeCount · CometChatStatusIndicator · CometChatDate · CometChatToolbar · CometChatDialog/CometChatConfirmDialog · CometChatPopupMenu · CometChatSnackBar · state views CometChatLoadingState/CometChatEmptyState/CometChatErrorState · shimmer CometChatShimmerBox/CometChatShimmerContainer. Non-visual — CometChatUIKit · theming CometChatTheme/CometChatColorScheme/CometChatTypography · CometChatLocalize · CometChatSoundManager · events CometChatEvents + the *Event family · formatters CometChatTextFormatter/CometChatMentionsFormatter/CometChatRichTextFormatter.
⚠️ Emitting ANY calling component requires the calls artifact and"uiKit": { "enableCalling": true }inassets/cometchat-settings.json— otherwise it crashes on device while compiling fine (the compile gate cannot catch it). Full artifact/flag/result matrix: docscall-logspage. →cometchat-android-v6-calls.
Three conventions, consistent across the cohort (verified vs 6.0.5):
onItemClick: ((Conversation) -> Unit)?, onSearchClick: (() -> Unit)?, onBackPress: (() -> Unit)?, onItemLongClick, onError: ((CometChatException) -> Unit)?, onLoad, onEmpty, onSelection.hideSearchBox, hideToolbar, hideBackIcon, hideUserStatus, hideReceipts, hideDeleteOption, hideLoadingState, hideEmptyState, hideErrorState. (Views uses visibility setters; Compose hides.)itemView, leadingView, subtitleView, trailingView, each (@Composable (Conversation, TypingIndicator?) -> Unit)?.Plus modifier: Modifier, style: CometChat<X>Style = …default(), and request-builder params (conversationsRequestBuilder).
import com.cometchat.uikit.compose.presentation.conversations.ui.CometChatConversations
CometChatConversations(
modifier = Modifier.fillMaxSize(),
title = "Chats",
onItemClick = { conversation -> /* navigate */ },
onSearchClick = { /* open search route */ },
)Size it to fill. The kit fills the box you give it — a wrap_content-equivalent (unbounded height, or a Column without weight) renders a sliver (core/references/layout.md).
| Concern | Views | Compose |
|---|---|---|
| thread scope | setParentMessageId(Long) | `parentMessageId: Long = -1` param on list AND composer |
| thread header | setParentMessage(BaseMessage) | `parentMessage: BaseMessage` (required param) |
| search scope | setSearchIn(List<SearchScope>) | `searchScopes: List<SearchScope>` |
| search target | setUid / setGuid | uid: String? / guid: String? |
| affordances | visibility setters | hideX: Boolean |
| slots | ViewHolder listeners | @Composable lambdas |
Everything else (user, group, onThreadRepliesClick: ((BaseMessage) -> Unit)?) matches by name.
Pass a @Composable to the component's slot param (itemView, leadingView, subtitleView, trailingView), use options/addOptions for the long-press menu, and setBubbleFactories-equivalent factories for custom message TYPES. Never stack your own composable over a kit component, and never re-implement a list the kit ships. Detail: cometchat-android-v6-compose-customization.
⚠️ A slot with a DEFAULT implementation REPLACES it — `CometChatMessageHeader` `auxiliaryView` vs `trailingView` (verified vs installed 6.0.5 source + on device). The header'sauxiliaryViewsubstitutes the built-inDefaultAuxiliaryView, which is what HOSTS the voice/video call buttons — so putting a custom icon there silently removes them. Extra header icons belong in `trailingView`, a separate slot that keeps the auxiliary area (and its call buttons) intact. UseauxiliaryViewonly when you intend to REPLACE the call-button area (and re-renderCometChatCallButtonsyourself if you still want calling).
CometChatGroupMembers gates its own long-press menu (verified vs 6.0.5). Rely on it:
| Logged-in user | Menu opens on | Cannot act on |
|---|---|---|
Owner (uid == group.owner) | anyone but themselves | — |
Admin (group.scope) | participants, moderators | other admins, owner |
| Moderator | participants only | moderators, admins, owner |
| Participant | nobody | everyone |
A moderator also cannot assign the admin role (disabled in the scope sheet). Scope strings: CometChatConstants.SCOPE_ADMIN / SCOPE_MODERATOR / SCOPE_PARTICIPANT. Never hand-roll these checks or hide the component behind your own role logic — you will drift from the kit.
⚠️ Reversed parameter order between the two ownership APIs: CometChat.updateGroupMemberScope(UID, GUID, scope, listener) but CometChat.transferGroupOwnership(GUID, UID, listener).
No combined shell — CometChatConversationsWithMessages, CometChatUsersWithMessages, CometChatGroupsWithMessages, CometChatUI are v4-era. ⚠️ `CometChatMessageTemplate` is absent from the shipped 6.0.5 artifact (logged internally) — use bubble factories.
Mixing cohorts (Views artifact in a Compose app) · using a setX(...) setter on a composable · unbounded height (sliver) · showSearchBar-style thinking (Compose uses hideSearchBox) · overlaying instead of slotting · a custom header icon in CometChatMessageHeader auxiliaryView (replaces the call-button host — use trailingView) · emitting CometChatMessageTemplate · guessing a param instead of fetching the page's Compose tab.
Every composable you emitted is in the list above (Tier-1) and it compiles — ./gradlew :app:assembleDebug # in YOUR app (native-fence.mjs is a pack-repo gate, not installed by the CLI). On device: full-size render with the kit's own loading/empty state, slotted composables INSIDE the component.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.