> ## Documentation Index
> Fetch the complete documentation index at: https://docs.daily.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Daily Call Client

> The core object for managing a Daily video call in daily-js.

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 one of the [factory methods](/reference/daily-js/factory-methods). The two most common are:

* **[`createCallObject()`](/reference/daily-js/factory-methods/create-call-object)** — headless mode. Daily manages WebRTC and media, but renders no UI. Use this when you're building a fully custom call interface.
* **[`createFrame()`](/reference/daily-js/factory-methods/create-frame)** — iframe mode. Daily renders its full Prebuilt UI inside an `<iframe>`. Use this when you want a ready-made call UI.

```javascript theme={null}
// Headless — you build the UI
const call = Daily.createCallObject();

// Prebuilt UI in an iframe
const call = Daily.createFrame();
```

See [Call Modes](/docs/daily-js/concepts/call-modes) for a full comparison.

## 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](/reference/daily-js/types/daily-call-options) for a full list of options.

```javascript theme={null}
// 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](/reference/daily-js/static-methods).

## 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](/reference/daily-js/instance-methods).

## Event handling

The call client is an event emitter. Use `.on()` and `.off()` to subscribe and unsubscribe:

```javascript theme={null}
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/daily-js/events/lifecycle-events) reference.

## Running multiple call clients

It's possible to run more than one call client simultaneously. See the [multi-instance guide](/docs/daily-js/guides/multi-instance) 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`.

```typescript theme={null}
import Daily, { DailyCall } from '@daily-co/daily-js';

const call: DailyCall = Daily.createCallObject();
```
