cometchat-android-v5-extensions

SkillDev tools

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

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the cometchat-android-v5-extensions skill

What this skill tells your AI

The instructions your AI receives, as published by cometchat/cometchat-skills in skills/cometchat-android-v5-extensions/SKILL.md and read by ahel’s review.

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.

Signals

GitHub stars
105
Forks
2
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
cometchat-android-v5-extensions
Source
github.com/cometchat/cometchat-skills