Skip to main content
// Start typing indicator
const typing = new CometChat.TypingIndicator("UID", CometChat.RECEIVER_TYPE.USER);
CometChat.startTyping(typing);

// Stop typing indicator
CometChat.endTyping(typing);

// Listen for typing events
CometChat.addMessageListener("LISTENER_ID", new CometChat.MessageListener({
  onTypingStarted: (indicator) => console.log("Typing started:", indicator),
  onTypingEnded: (indicator) => console.log("Typing ended:", indicator)
}));

Send a Typing Indicator

Start Typing

Use startTyping() with a TypingIndicator object to notify the receiver that you’re typing.
let receiverId: string = "UID";
let receiverType: string = CometChat.RECEIVER_TYPE.USER;

let typingNotification: CometChat.TypingIndicator = new CometChat.TypingIndicator(receiverId, receiverType);
CometChat.startTyping(typingNotification);
startTyping() returns void — the typing indicator is sent as a fire-and-forget operation.

Stop Typing

Use endTyping() to notify the receiver that you’ve stopped typing.
let receiverId: string = "UID";
let receiverType: string = CometChat.RECEIVER_TYPE.USER;

let typingNotification: CometChat.TypingIndicator = new CometChat.TypingIndicator(receiverId, receiverType);
CometChat.endTyping(typingNotification);
endTyping() returns void — the typing indicator is sent as a fire-and-forget operation.
Use setMetadata() on TypingIndicator to pass additional custom data. Retrieve it with getMetadata() on the receiver side.

Real-time Typing Indicators

Use onTypingStarted and onTypingEnded in MessageListener to receive typing events.
let listenerId: string = "UNIQUE_LISTENER_ID";

CometChat.addMessageListener(
  listenerId,
  new CometChat.MessageListener({
      onTypingStarted: (typingIndicator: CometChat.TypingIndicator) => {
          console.log("Typing started :", typingIndicator);
      },
      onTypingEnded: (typingIndicator: CometChat.TypingIndicator) => {
          console.log("Typing ended :", typingIndicator);
      }
  })
);
The received object is a TypingIndicator.
Always remove message listeners when they’re no longer needed (e.g., on component unmount or page navigation). Failing to remove listeners can cause memory leaks and duplicate event handling.
CometChat.removeMessageListener("UNIQUE_LISTENER_ID");

Next Steps

Delivery & Read Receipts

Track when messages are delivered and read

Transient Messages

Send ephemeral real-time messages like live reactions