agentsclimarketplace

Cometchat android v5 extensions

Skill cometchat/cometchat-skills/skills/cometchat-android-v5-extensions

Add CometChat chat & messaging and voice & video calls 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.

Install
npx -y skills add cometchat/cometchat-skills --skill cometchat-android-v5-extensions

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

What its author says it does

Copied from the file, not written here

Extension architecture for CometChat Android — ExtensionsDataSource, decorators, built-in extensions, and how to create custom extensions.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

6.3 KB, as published. Nobody here has run it

Ground truth: com.cometchat:chat-uikit-android:5.x (legacy/maintenance-only; +calls-sdk-android:5.x) — resolved AAR (javap) + ui-kit/android. Official docs: https://www.cometchat.com/docs/fundamentals/extensions-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.

Companion skills: cometchat-android-v5-customization covers DataSource decorators; cometchat-android-v5-features covers the feature catalog.

Purpose

This skill covers the CometChat extension architecture — how extensions plug into the UI Kit, the built-in extensions, and how to create custom ones.


Use this skill when

  • "How do extensions work?"
  • "How do I add a custom extension?"
  • "How do I disable an extension?"
  • Working with ExtensionsDataSource or ExtensionDecorator

Do not use this skill when

  • Enabling a backend extension or AI feature → use cometchat-android-v5-features (which routes to cometchat apply-feature <id> --app-id <X>)
  • Writing custom message templates → use cometchat-android-v5-customization

1. Extension architecture

Extensions are split into two class types:

  • Registrar classes (e.g. PollsExtension, StickerExtension) — extend ExtensionsDataSource. These are what you pass to setExtensions(...) to enable a built-in extension.
  • Decorator classes (e.g. PollsExtensionDecorator, StickerExtensionDecorator) — extend DataSourceDecorator. These are the runtime decorators that wrap the active DataSource chain. The kit creates them internally; you don't construct them directly.
ChatConfigurator.getDataSource()
    └── SmartRepliesExtensionDecorator   (created by SmartRepliesExtension)
        └── PollsExtensionDecorator      (created by PollsExtension)
            └── StickerExtensionDecorator (created by StickerExtension)
                └── MessagesDataSource (base)

2. Built-in extensions

ExtensionPackageWhat it adds
Pollscom.cometchat.chatuikit.extensions.pollsPoll creation and voting in messages
Stickerscom.cometchat.chatuikit.extensions.stickerSticker keyboard and sticker bubbles
Collaborative Documentcom.cometchat.chatuikit.extensions.collaborativeShared document editing
Collaborative Whiteboardcom.cometchat.chatuikit.extensions.collaborativeShared whiteboard
Smart Repliescom.cometchat.chatuikit.extensions.smartrepliesAI-powered reply suggestions
Message Translationcom.cometchat.chatuikit.extensions.messagetranslationTranslate messages
Text Moderationcom.cometchat.chatuikit.extensions.textmoderationProfanity filtering
Thumbnail Generationcom.cometchat.chatuikit.extensions.thumbnailgenerationImage thumbnails

3. Enabling/disabling extensions

Extensions are enabled by default. To customize which extensions are active, pass a custom list to UIKitSettingsBuilder:

List<ExtensionsDataSource> extensions = new ArrayList<>();
extensions.add(new PollsExtension());            // registrar, NOT PollsExtensionDecorator
extensions.add(new StickerExtension());         // registrar, NOT StickerExtensionDecorator
extensions.add(new SmartRepliesExtension());
// Omit extensions you don't want

UIKitSettings settings = new UIKitSettings.UIKitSettingsBuilder()
    .setAppId(APP_ID)
    .setRegion(REGION)
    .setAuthKey(AUTH_KEY)
    .setExtensions(extensions)
    .build();

Why not PollsExtensionDecorator? *ExtensionDecorator extends DataSourceDecorator, not ExtensionsDataSource — so it won't compile when added to a List<ExtensionsDataSource>. The kit's runtime decorator chain is built by the registrar's enable() method internally; you don't add decorators directly.

4. Creating a custom extension

A custom extension has TWO classes:

  1. A registrar that extends ExtensionsDataSource (gets added to setExtensions(...))
  2. A decorator that extends DataSourceDecorator (created by the registrar via ChatConfigurator.enable(...))
// 1. Decorator — extends DataSourceDecorator, overrides per-message behavior
public class MyExtensionDecorator extends DataSourceDecorator {
    public MyExtensionDecorator(DataSource dataSource) {
        super(dataSource);
    }
    // Override methods to add custom behavior
}

// 2. Registrar — extends ExtensionsDataSource, implements getExtensionId() + addExtension()
public class MyExtension extends ExtensionsDataSource {
    @Override
    public String getExtensionId() {
        return "my-custom-extension";
    }

    @Override
    public void addExtension() {
        // addExtension() is the ABSTRACT method you must implement. The inherited
        // concrete enable() calls it after confirming the extension is on (dashboard).
        ChatConfigurator.enable(dataSource -> new MyExtensionDecorator(dataSource));
    }
}

// Then add the registrar to UIKitSettings:
extensions.add(new MyExtension());

Hard rules

  • Two classes per extension. A registrar (ExtensionsDataSource, implements abstract getExtensionId() + addExtension(); enable() is inherited) and a decorator (DataSourceDecorator, holds the per-message override). setExtensions(...) wants registrars; the chain builds decorators automatically.
  • Register after init. ChatConfigurator.enable() must be called after CometChatUIKit.init() succeeds.
  • Backend extension toggle still applies. Even if an extension is registered client-side, it needs to be enabled on the app's backend. Use cometchat apply-feature <id> --app-id <X> (the CLI hits the dashboard API). For dashboard-only extensions (Giphy / Stipop / Tenor / Chatwoot / Intercom — those needing third-party API keys), the user has to enter the third-party config in the dashboard manually.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.