Agent skill

Cometchat React Native Customization

by cometchat in cometchat/cometchat-skills

Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types.

MITAuto-check passedMobile

Install Cometchat React Native Customization

skills CLI
$ npx skills add cometchat/cometchat-skills --skill cometchat-react-native-customization -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install cometchat/cometchat-skills cometchat-react-native-customization --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/cometchat/cometchat-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cometchat-react-native-customization .claude/skills/cometchat-react-native-customization && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
cometchat-react-native-customization
GitHub stars
129
Token cost
~2.5k tokens
SKILL.md length
774 words
Files
1
Skills in repo
97
Repo updated
First seen
Licence
MIT

At a glance

Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types.

  • Works in 6 steps: Reaching for CSS — no stylesheets, no… → Emitting the React plugin API — does not… → Omitting getId() on a decorator — the… → …
  • Tasks that involve Cross-platform mobile apps
  • SKILL.md covers Companion skills (read first), Use this skill when, Prerequisites & install and Customization mechanism —…, plus 4 more sections
  • Calls npm

What it does

Cometchat React Native Customization is an agent skill from cometchat/cometchat-skills. Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types. Triggers: change CometChat colors React Native, dark mode RN chat, custom message bubble RN, brand the RN chat UI, custom message type React Native, restyle the message bubble, change the chat font, add a custom bubble RN.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: React Native =0.77; @cometchat/chat-uikit-react-native ^5.4.0

It sits in Mobile, covering Cross-platform mobile apps, Theming and dark mode and Design systems. It works with CometChat and React Native. The repository describes itself as: 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… The licence is MIT.

When your agent uses it

  • Tasks that involve Cross-platform mobile apps
  • Tasks that involve Theming and dark mode
  • Tasks that involve Design systems

Example prompts

  • “/cometchat-react-native-customization”

Requirements

  • Compatibility (from SKILL.md): React Native >=0.77; @cometchat/chat-uikit-react-native ^5.4.0

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Reaching for CSS — no stylesheets, no className, no --cometchat-*. Theme object + RN styles.
  2. Emitting the React plugin API — does not exist; use ChatConfigurator + DataSourceDecorator.
  3. Omitting getId() on a decorator — the base throws; ChatConfigurator.enable() calls it → crash at registration with Method not implemented.
  4. Not calling super in a decorator override — silently drops all built-in templates.
  5. Setting only light when the app follows the OS — dark mode then falls back to defaults.
  6. Guessing token or style-key names — fetch them; a wrong key fails silently rather than erroring.

What it can do on your machine

Read from SKILL.md and the folder at commit 911b108. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    React Native >=0.77; @cometchat/chat-uikit-react-native ^5.4.0

    From compatibility in the SKILL.md frontmatter.

Context cost

Cometchat React Native Customization loads about 2.5k tokens when it runs. Until then it costs about 114 tokens; SKILL.md has 774 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~114
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from cometchat/cometchat-skills at commit 911b108, republished under its MIT licence (© cometchat). 774 words, ~2,457 tokens.

Download SKILL.mdSave it as .claude/skills/cometchat-react-native-customization/SKILL.md (or your agent's skills folder).
name
cometchat-react-native-customization
description
Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types. Triggers: change CometChat colors React Native, dark mode RN chat, custom message bubble RN, brand the RN chat UI, custom message type React Native, restyle the message bubble, change the chat font, add a custom bubble RN.
compatibility
React Native >=0.77; @cometchat/chat-uikit-react-native ^5.4.0
license
MIT
metadata.author
CometChat
metadata.version
1.0.0
metadata.tags
chat cometchat react-native customization theming styling datasource decorator

Ground truth: @cometchat/chat-uikit-react-native@5 + catalog rn-v5.json. Docs: /ui-kit/react-native/theme · colors · component-styling · message-bubble-styling. Fetch token names and style keys from docs — never invent them.

Companion skills (read first)

  • cometchat-react-native-core — install, provider chain, init→login→render. Assumed, not repeated here.

Use this skill when

  • "change the chat colors" · "brand the chat UI" · "dark mode" · "restyle the bubbles"
  • "custom message type" · "render my own bubble" · "add an option to the message menu"

Prerequisites & install

None beyond core. Theming needs CometChatThemeProvider already in the chain (see core).

Customization mechanism — three layers, cheapest first

There is no CSS. No stylesheets, no className, no --cometchat-* variables. If you are holding a React snippet with CSS custom properties, it does not apply here.

Layer 1 — theme mode + color tokens (whole app)

The provider takes a theme prop shaped { mode, light, dark }. mode is "light" · "dark" · "auto" — "auto" is what makes the kit follow the device (OS) light/dark setting (it reads useColorScheme()); the provider default is already "auto".

tsx
// Fixed dark for the whole app.
<CometChatThemeProvider theme={{ mode: "dark" }}>{/* … */}</CometChatThemeProvider>
tsx
// Follow the OS, branded in BOTH schemes. mode:"auto" is the switch;
// set BOTH light and dark or dark falls back to defaults.
<CometChatThemeProvider
  theme={{
    mode: "auto",
    light: { color: { primary: "#F76808" } },
    dark: { color: { primary: "#F8935B" } },
  }}
>
  {/* … */}
</CometChatThemeProvider>

primary drives buttons, outgoing bubbles and active states — it is usually the only token a brand change needs. Other common tokens: textPrimary, background1, neutral50, extendedPrimary500. Fetch the full list from /ui-kit/react-native/colors.md rather than guessing a token name.

To follow the OS, use mode: "auto" and set both light and dark. Without the provider, system theme changes are not reflected at all.

Layer 2 — per-component style objects

Every component takes a style prop holding named sub-style objects — plain RN style objects, not CSS:

tsx
<CometChatConversations style={{ containerStyle: { backgroundColor: "#F7F7F7" } }} />

The same style keys can be set globally through the theme instead, which is preferable when the change should apply everywhere:

tsx
<CometChatThemeProvider theme={{ light: { conversationStyles: { /* … */ } } }}>

Style-key names differ per component. Fetch them from that component's page (/ui-kit/react-native/component-styling.md and the component's own page) — do not pattern-match from another component.

Layer 3 — read the active theme in your own views

useTheme() returns the resolved theme (already light-or-dark per mode), so custom views match the kit without re-deriving the palette:

tsx
import { useTheme } from "@cometchat/chat-uikit-react-native";
import { Text } from "react-native";

const Label = () => {
  const theme = useTheme();
  return <Text style={{ color: theme.color.textPrimary }}>Chats</Text>;
};

Custom message types — the DataSource decorator chain

⚠️ RN does NOT have the React plugin API. CometChatMessagePlugin and CometChatPluginRegistry do not exist in this kit; emitting them will not compile. RN uses a decorator chain.

Extend DataSourceDecorator, override what you need, and register it with ChatConfigurator.enable:

tsx
import {
  ChatConfigurator, DataSourceDecorator, CometChatMessageTemplate,
} from "@cometchat/chat-uikit-react-native";

const ORDER_TYPE = "order";

class OrderDataSource extends DataSourceDecorator {
  // 0. IDENTITY — REQUIRED. The base DataSourceDecorator.getId() THROWS
  // ("Method not implemented.") and ChatConfigurator.enable() calls getId() to
  // dedupe the registry — so a subclass without this override crashes at
  // ChatConfigurator.enable(...), NOT at render. Return a stable, unique id.
  getId(): string {
    return "order_message_datasource";
  }

  // 1. RENDER — how the bubble draws.
  getAllMessageTemplates(theme?: any, params?: any): CometChatMessageTemplate[] {
    const templates = super.getAllMessageTemplates(theme, params);
    // append or replace a template here
    return templates;
  }

  // 2. FETCH — WITHOUT THESE TWO THE MESSAGE IS NEVER RETRIEVED.
  // CometChatMessageList builds its request from them:
  //   requestBuilder.setTypes(ChatConfigurator.dataSource.getAllMessageTypes())
  //   requestBuilder.setCategories(ChatConfigurator.dataSource.getAllMessageCategories())
  // A type absent from those filters is excluded server-side. The bubble appears
  // optimistically when sent, then vanishes on reload — with no error anywhere.
  getAllMessageTypes(): string[] {
    return [...super.getAllMessageTypes(), ORDER_TYPE];
  }

  getAllMessageCategories(): string[] {
    const categories = super.getAllMessageCategories();
    return categories.includes(CometChat.CATEGORY_CUSTOM)
      ? categories
      : [...categories, CometChat.CATEGORY_CUSTOM];
  }
}

// AFTER login(), not merely after init(). CometChatUIKit.login() calls enableExtensions(),
// whose first statement is ChatConfigurator.init() — "re-initialize data source". Anything
// registered earlier is DISCARDED, so a decorator wired at module scope, or straight after
// init(), silently disappears.
await CometChatUIKit.login({ uid: UID });
ChatConfigurator.enable((source) => new OrderDataSource(source));

getId() is REQUIRED on every DataSourceDecorator subclass. It is the ONE base method that does not delegate to the wrapped source — the base throws Error("Method not implemented."), and ChatConfigurator.enable() calls getId() to dedupe the registry. Omit it and registration crashes at ChatConfigurator.enable(...) with Method not implemented. — NOT at render, so it reads as unrelated. Every built-in decorator (Polls, Stickers, Translation, LinkPreview, Collaborative*) overrides it; yours must too, returning a stable unique string.

A custom message type is two halves, and only one of them is obvious. Render is getAllMessageTemplates / getMessageTemplate. Fetch is getAllMessageTypes / getAllMessageCategories. Ship the render half alone and everything looks right until the first reload, when every message of your type is gone — no error, no warning.

Show full SKILL.md (299 more words)Show less

DataSourceDecorator exposes ~50 overridable methods; the ones you usually want are getId (mandatory — see above), getAllMessageTemplates, getMessageTemplate, getAllMessageTypes, getAllMessageCategories, getMessageOptions (the long-press menu) and getAuxiliaryOptions (composer actions). Always call super.<method>(...) and modify the result — replacing it wholesale drops every built-in message type.

DOCS GAP (RN-G10): DataSourceDecorator / MessageDataSource / ExtensionsDataSource and ChatConfigurator.enable are not documented on any RN page — the docs show only mutating existing templates via getAllMessageTemplates(). Built from the kit source; flag this to the developer rather than presenting it as documented.

Partially closed (2026-08-20). ui-kit/react-native/message-list now documents the half that actually breaks builds: a custom type must be registered for fetch (getAllMessageTypes / getAllMessageCategories), not only for render, and the decorator must be registered after login() because enableExtensions() re-runs ChatConfigurator.init(). Still missing: a dedicated RN custom-message-types page covering DataSourceDecorator / MessageDataSource / ExtensionsDataSource end to end. Owner: docs.

Customizing an existing bubble without a decorator

To restyle rather than replace, prefer the theme's bubble style keys — textBubbleStyles, imageBubbleStyles, fileBubbleStyles, pollBubbleStyles and siblings. Fetch exact keys from /ui-kit/react-native/message-bubble-styling.md.

Common pitfalls

  1. Reaching for CSS — no stylesheets, no className, no --cometchat-*. Theme object + RN styles.
  2. Emitting the React plugin API — does not exist; use ChatConfigurator + DataSourceDecorator.
  3. Omitting getId() on a decorator — the base throws; ChatConfigurator.enable() calls it → crash at registration with Method not implemented.
  4. Not calling super in a decorator override — silently drops all built-in templates.
  5. Setting only light when the app follows the OS — dark mode then falls back to defaults.
  6. Guessing token or style-key names — fetch them; a wrong key fails silently rather than erroring.

Verify it works

  • Every symbol appears in catalogs/rn-v5.json.
  • npm run verify:fences:rn-v5 compiles the examples against the pinned kit.
  • On device: toggle OS dark mode and confirm the surface follows; confirm a custom template renders and built-in types still render alongside it.

© cometchat, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/cometchat-react-native-customization of cometchat/cometchat-skills.

Open the folder on GitHubat commit 911b108

Compare with similar skills

Cometchat React Native Customization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Cometchat React Native Customization compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Cometchat React Native Customization this skillcometchat/cometchat-skills129—~2.5kAutomated safety check: PassMIT
UniwindOhh-889/skyroc795—~1.4kAutomated safety check: PassMIT
Design SystemWrongStack/WrongStack368—~3.9kAutomated safety check: PassMIT
ThemingCode-with-Beto/skills141—~2.5kAutomated safety check: PassNone
Code Reviewecency/vision-mobile262—~2kAutomated safety check: PassMIT
React Native StylingHoangNguyen0403/agent-skills-standard570—~333Automated safety check: PassMIT

Similar skills

  • Uniwind

    Ohh-889/skyroc

    Uniwind — Tailwind CSS v4 styling for React Native. An agent skill from Ohh-889/skyroc.

    795 GitHub stars~1.4k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Design System

    WrongStack/WrongStack

    Use this skill BEFORE writing or restyling ANY user-facing interface.

    368 GitHub stars~3.9k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Theming

    Code-with-Beto/skills

    Scaffold a unified, cross-platform color theme system into an Expo Router app.

    141 GitHub stars~2.5k tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Code Review

    ecency/vision-mobile

    Review a vision-mobile React Native change (diff, branch, PR or file) against this repo's own traps and conventions: action sheet return values, setNativeProps caret, safe-area edges, editor…

    262 GitHub stars~2k tokensUpdated 2 days ago
    MobileAuto-check passed
  • React Native Styling

    HoangNguyen0403/agent-skills-standard

    Style React Native apps with StyleSheet API, Flexbox, theming, and responsive design.

    570 GitHub stars~333 tokensUpdated yesterday
    MobileAuto-check passed
  • React Native Elements

    pproenca/dot-skills

    React Native Elements UI component library best practices for performance, theming, and proper component usage.

    214 GitHub stars~1.7k tokensUpdated 1 mo ago
    MobileAuto-check passed

More from cometchat/cometchat-skills

All 97 skills in this repo
  • CometChat Android Calls SDK v5

    cometchat/cometchat-skills

    Adds voice and video calling to an Android app in Kotlin with the headless CometChat Calls SDK v5, covering meeting-style rooms, 1:1 ringing calls, call logs and recording.

    129 GitHub stars~5.2k tokensUpdated 2 days ago
    Auto-check passed
  • CometChat Android v5 Headless SDK

    cometchat/cometchat-skills

    Builds chat on Android with your own UI against the headless CometChat Chat SDK v5, covering install, Jetifier conflicts, credentials and init-before-login ordering.

    129 GitHub stars~4k tokensUpdated 2 days ago
    Auto-check passed
  • CometChat Angular Component Picker

    cometchat/cometchat-skills

    Picks and customizes CometChat's Angular UI Kit components by their verified component list, exact input and output event names, and the surfaces that have no kit component at all.

    129 GitHub stars~2.6k tokensUpdated 2 days ago
    Auto-check passed
  • CometChat Angular Features

    cometchat/cometchat-skills

    Enables or builds CometChat features such as polls, reactions, smart replies and pinned messages in an Angular app, first classifying how much client code each one needs.

    129 GitHub stars~2.6k tokensUpdated 2 days ago
    Auto-check passed
  • CometChat Angular Chat Placement

    cometchat/cometchat-skills

    Decides where CometChat chat UI goes in an Angular app: a dedicated route, a dashboard panel, a support widget or the full multi-pane app, with thread and search panels.

    129 GitHub stars~2.2k tokensUpdated 2 days ago
    Auto-check passed
  • Cometchat iOS V5 SDK

    cometchat/cometchat-skills

    Add voice & video calling to any iOS app FROM SCRATCH with the headless CometChat Calls SDK v5 (CometChatCallsSDK, via Swift Package Manager) — no UI Kit.

    129 GitHub stars~5.2k tokensUpdated 2 days ago
    Auto-check passed

Questions about Cometchat React Native Customization

What does Cometchat React Native Customization do?

Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types. Cometchat React Native Customization is an agent skill from cometchat/cometchat-skills. Theme, restyle and extend the CometChat React Native UI Kit v5 — theme modes and color tokens, per-component style objects, view slots, and the DataSource decorator chain for custom message types.

When should I use Cometchat React Native Customization?

Cometchat React Native Customization fits situations like: tasks that involve Cross-platform mobile apps; tasks that involve Theming and dark mode; tasks that involve Design systems.

How do I install Cometchat React Native Customization in Claude Code?

Run `npx skills add cometchat/cometchat-skills --skill cometchat-react-native-customization -a claude-code`. Or copy the skill folder (skills/cometchat-react-native-customization in cometchat/cometchat-skills) into .claude/skills/cometchat-react-native-customization in your project. Claude Code loads it when a task matches its description.

How do I install Cometchat React Native Customization in Codex?

Run `npx skills add cometchat/cometchat-skills --skill cometchat-react-native-customization -a codex`. Or copy the skill folder (skills/cometchat-react-native-customization in cometchat/cometchat-skills) into .agents/skills/cometchat-react-native-customization in your project. Codex loads it when a task matches its description.

Can I use Cometchat React Native Customization in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cometchat/cometchat-skills --skill cometchat-react-native-customization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cometchat-react-native-customization, .gemini/skills/cometchat-react-native-customization, .github/skills/cometchat-react-native-customization and .opencode/skills/cometchat-react-native-customization in your project.

What does Cometchat React Native Customization need to run?

Going by SKILL.md and its folder, Cometchat React Native Customization needs the command-line tools its instructions call (npm). Compatibility (from SKILL.md): React Native >=0.77; @cometchat/chat-uikit-react-native ^5.4.0.

Does Cometchat React Native Customization access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Cometchat React Native Customization safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Cometchat React Native Customization use?

Cometchat React Native Customization is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Cometchat React Native Customization use?

About 2.5k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Cometchat React Native Customization?

Skills that share tags, products or a category with Cometchat React Native Customization: Uniwind (Ohh-889/skyroc, 795 stars), Design System (WrongStack/WrongStack, 368 stars), Theming (Code-with-Beto/skills, 141 stars) and Code Review (ecency/vision-mobile, 262 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Cometchat React Native Customization?

cometchat (a GitHub organization) maintains it in cometchat/cometchat-skills, which has 129 GitHub stars. The repository holds 97 skills in this directory. The repository was last updated on October 5, 2026.

Source: cometchat/cometchat-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.