Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
cometchat avatar

Cometchat Android V5 Extensions

  • 6 installs
  • 70 repo stars
  • Updated June 23, 2026
  • cometchat/cometchat-skills

Explains the CometChat Android v5 extension architecture, built-in extensions, and how to create or disable custom extensions.

About

This skill covers how CometChat v5 Android extensions plug into the UI Kit via ExtensionsDataSource and ExtensionDecorator, the built-in extensions, and building custom ones. A developer uses it when adding, disabling, or authoring extensions like polls, stickers, or collaborative features.

  • ExtensionsDataSource and ExtensionDecorator architecture
  • Enable, disable, or create custom extensions

Cometchat Android V5 Extensions by the numbers

  • 6 all-time installs (skills.sh)
  • Ranked #806 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cometchat/cometchat-skills --skill cometchat-android-v5-extensions

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs6
repo stars70
Last updatedJune 23, 2026
Repositorycometchat/cometchat-skills

What it does

Explains the CometChat Android v5 extension architecture, built-in extensions, and how to create or disable custom extensions.

Files

SKILL.mdMarkdownGitHub ↗
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, exposes getExtensionId() and enable()
public class MyExtension extends ExtensionsDataSource {
    @Override
    public String getExtensionId() {
        return "my-custom-extension";
    }

    @Override
    public void enable() {
        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, holds getExtensionId() + enable()) 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.

Related skills

Mobile Developmentintegrationsfrontend

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.