Skip to main content
Paid plans only useRecording gives you reactive recording state and start/stop helpers, so you can build recording controls and a “recording” indicator without managing recording events yourself.

Recording controls

Destructure isRecording, startRecording, and stopRecording:
startRecording accepts the same options as the daily-js startRecording() method, including layout presets:

Gate controls on permission

Only owners and participants with canAdmin: 'streaming' can start or stop recordings. Gate your controls with usePermissions:
See the Permissions guide for how to grant canAdmin rights.

Show a recording indicator

Every participant can read recording state, so anyone can show that the call is being recorded. isLocalParticipantRecorded tells the current user whether they are in the recording:

React to recording events

Pass callbacks to run side effects when recording state changes:

Multiple concurrent recordings

When several recordings run at once, pass an instanceId (a valid UUID) to scope the hook to one recording. Without it, the hook returns aggregate state, where isRecording is true if any instance is active and the scalar fields reflect the first active instance:
To list every active instance, use useRecordingInstances, which returns an array of per-instance state. See the multi-instance recording and live streaming guide for the full pattern.

Next steps

Live streaming

The same model, for RTMP output.

Permissions

Grant the rights to start recordings.