Skip to main content
Custom plugins let you handle any message type with your own rendering logic. This walkthrough builds a complete “Location” plugin that renders a map preview, provides context menu options, and shows a conversation preview.

Step 1: Define the Plugin

Create a file that implements CometChatMessagePlugin:
src/plugins/LocationPlugin.tsx

Step 2: Register the Plugin

Pass your plugin to CometChatProvider:
src/App.tsx
Your plugin is prepended before the default plugins. Since resolution is first-match, your custom plugins take precedence for the types they declare — here the plugin handles "location" messages, a type no built-in plugin claims. To override a built-in type instead, declare the same messageTypes/messageCategories as the default plugin.

Step 3: Send a Location Message

Use the CometChat SDK to send a custom message with type "location":

Step 4: Style the Bubble

src/plugins/LocationPlugin.css

Plugin Interface Reference

Plugin Context

The context object passed to every plugin method:

Tips

  • Lazy-load heavy components — use React.lazy() + Suspense for bubble components that import large libraries
  • Use context.getLocalizedString — for any user-facing text in options or bubbles
  • Return [] from getOptions — for system messages that shouldn’t have a context menu
  • Keep getLastMessagePreview short — max ~100 characters, plain text only (no HTML)
  • A single plugin can handle multiple types — like the Call Action plugin handles both audio and video in the call category