Skip to main content
A Daily call client is the central object you interact with to manage a video call. It gives you control over the entire call lifecycle — joining and leaving, managing participants and their media, and reacting to call state changes through events.

Creating a call client

Call clients are created using the createCallObject() factory method. This creates a headless instance — Daily manages WebRTC and media, but renders no UI. Use this when you’re building a fully custom call interface.
const call = Daily.createCallObject();

Configuration

Configuration properties for your call client can be passed to the factory method at creation time, to join(), or one of the initialization methods, startCamera(), load(), or preAuth(). See the DailyCallOptions reference for a full list of options.
// At creation time
const call = Daily.createCallObject({
  dailyConfig: { experimentalChromeVideoMuteLightOff: true },
});

// At join time
await call.join({
  url: 'https://your-domain.daily.co/room-name',
  token: 'YOUR_MEETING_TOKEN',
  startVideoOff: true,
});

Static methods

Static methods are called directly on DailyIframe (or Daily) without a call client instance. They include environment detection, version info, and the factory methods used to create a call client. See the static methods reference.

Instance methods

Instance methods are called on a call client you’ve already created. They cover the full call lifecycle — joining and leaving, managing participants, controlling media, and more. See the instance methods reference.

Event handling

The call client is an event emitter. Use .on() and .off() to subscribe and unsubscribe:
call.on('joined-meeting', () => console.log('joined'));
call.on('participant-joined', (event) => console.log(event.participant));
call.on('left-meeting', () => call.destroy());
All events are documented in the Events reference.

Running multiple call clients

It’s possible to run more than one call client simultaneously. See the multi-instance guide for constraints and patterns.

TypeScript

The underlying class is named DailyIframe for historical reasons, but the relevant TypeScript interface is DailyCall. All factory methods return a DailyCall.
import Daily, { DailyCall } from '@daily-co/react-native-daily-js';

const call: DailyCall = Daily.createCallObject();