> For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

# setLayout

> Sets the call layout and participant positions.

```ts
setLayout(layout, positions): Promise<void>
```

Switches the call to a named video layout and (optionally) places specific members into reserved positions.

The set of valid layout names depends on the call's room configuration and is exposed reactively via [`layouts$`](/docs/browser-sdk/v4/reference/webrtc-call/layouts\$). Member position values come from [`VideoPosition`](/docs/browser-sdk/v4/reference/type-aliases/video-position).

Requires the `setLayout` capability — inspect [`call.capabilities$`](/docs/browser-sdk/v4/reference/webrtc-call/capabilities\$) before exposing layout controls.

## **Parameters**

Layout name. Must be one of the names emitted by [`layouts$`](/docs/browser-sdk/v4/reference/webrtc-call/layouts\$).

Map of member IDs to [`VideoPosition`](/docs/browser-sdk/v4/reference/type-aliases/video-position) values. Pass an empty object to let the server assign positions automatically.

## **Returns**

`Promise<void>` — resolves once the server has applied the layout.

## **Throws**

Rejects if `layout` is not in the call's available layouts.

## **Examples**

### Switch to a grid layout

```ts
await call.setLayout('grid-responsive', {});
```

### Pin a member to a reserved slot

```ts
await call.setLayout('1x1-with-presenter', {
  [participantId]: 'reserved-0',
});
```

## **See**

* [`layouts$`](/docs/browser-sdk/v4/reference/webrtc-call/layouts\$) — observable list of available layout names.
* [`layout$`](/docs/browser-sdk/v4/reference/webrtc-call/layout\$) — currently active layout.
* [`layoutLayers$`](/docs/browser-sdk/v4/reference/webrtc-call/layout-layers\$) — observable of position assignments.