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 plugin takes precedence for the types it declares β€” here it handles "location" messages, a type no default plugin claims.

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

  • External API keys are your responsibility β€” the map preview above calls the Google Maps Static API with key=YOUR_API_KEY. Replace it with your own Google Maps API key (an external dependency; not provided by CometChat).
  • Use context.publish β€” to communicate with the rest of the UI, publish UI events rather than reaching into other components directly
  • 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