Skip to main content
Daily uses a typed event system built on Node.js EventEmitter. Every state change — participant joins, track goes live, recording starts, network degrades — is surfaced as a typed event object.

Subscribing to Events

All three methods return the DailyCall instance for chaining.

Base Event Shape

Every event object extends DailyEventObjectBase:

TypeScript Type Narrowing

The DailyEventObject<T> generic type maps event name strings to their specific payload types. TypeScript will narrow the handler argument automatically:

Event Reference

Lifecycle Events

Participant Events

Media Events

Recording Events

Paid plans only

Live Streaming Events

Paid plans only

Transcription Events

Paid plans only

Network Events

Settings & Device Events

Messaging Events

Telephony Events (SIP/PSTN)

Paid plans only

Error Events

Iframe UI Events

These events are only emitted in iframe mode:

Removing Listeners

Use call.off() to remove a specific listener:
DailyCall (which extends Node.js EventEmitter at runtime) also inherits removeAllListeners(), though this method is not part of the typed DailyCall interface:
Always remove event listeners before calling call.destroy() to prevent memory leaks, especially in single-page applications that re-render frequently.