participants()

participants()

Compatibility:
Prebuilt
Custom

Returns an object detailing the current meeting participants:

The object keys are local for the local participant and the participant's session_id for remote participants.

Participant properties

While there are some participant object properties specific to either the Daily Prebuilt or call object mode (more on that below), no matter how you're building with Daily, all participant objects include:

  • session_id - a unique ID generated each time a participant joins a meeting
  • user_id - the user's ID if set by a meeting token, otherwise the session_id
  • user_name - the user's name if set by a meeting token, iframe properties, or via setUserName()
  • local - true for the local user
  • owner - true if set by a meeting token or the user is logged into a Daily account and is a member of the room's team
  • joined_at - js Date object, the time that the user joined the room
  • record - indicates that a participant has initiated a "local" recording. This property will stay false for everyone when using "cloud" or "raw-tracks" recording types. If you're building a custom UI, we recommend monitoring recording events instead of this property. (Note: Server-based recordings ("cloud" and "raw-tracks") are a pay-as-you-go feature.)
  • tracks - an object whose keys are participant track types - audio, video, screenAudio and screenVideo - and whose values are objects with detailed information about each track.
  • permissions - an object that describes what the participant is permitted to do during this call. There are three keys on the object, each representing a permission: hasPresence, canSend, and canAdmin.

Participant tracks properties

KeyDescriptionPossible values
subscribedWhether you (the local participant) are subscribed to a track
  • true
  • false
  • "staged": Keeps the connection for a track open, but stops any bytes from flowing across. Must be set via updateParticipant().
stateThe values represent the complete set of mutually exclusive states a track can be in, from the user's point of view.
  • "blocked": The track is blocked. See blocked field for details.
  • "off": The track is off, but not blocked (that we know of yet—it's possible that we haven't yet tried to access a device, in the case of the start_video_off room or meeting token property, say). See off field for details.
  • "sendable": The track is ready to be sent, but simply hasn't been subscribed to. It's neither blocked nor off.
  • "loading": The track is loading. It has been subscribed to, and is neither blocked nor off.
  • "playable": The track is ready to be played. It has been subscribed to, has finished loading, and is neither blocked nor off.
  • "interrupted": The track is currently unplayable (MediaStreamTrack.muted property is true). It may enter this state from the playable state.
offIf the track is off, why it's off (this field only acquires a value if the track is off).An optional object with the properties byUser, byRemoteRequest, byBandwidth, byCanSendPermission, or byServerLimit, representing the possible reasons the track is off.
blockedIf the track is blocked, why it's blocked (this field only acquires a value if the track is blocked).An optional object with the properties byMissingDevice, byPermissions, or byDeviceInUse representing the possible reasons the track is blocked.
track**Only available when using the Daily call object.A MediaStreamTrack that is ready to be played.
persistentTrack**Only available when using the Daily call object.A MediaStreamTrack that exists and may or may not be ready to be played. For now, we recommend persistentTrack over track as a proactive defense against black frames during call disruptions and any browser limitations.

Participant permissions properties

KeyDescriptionPossible values
hasPresenceWhether the participant appears as "present" in the call, i.e. whether they appear in participants().
  • true
  • false
canSendWhich types of media a participant should be permitted to send.
  • A Set containing any of 'video', 'audio', 'screenVideo', and 'screenAudio'
  • true (meaning "all")
  • false (meaning "none")
canAdminWhich types of admin tasks a participant should be permitted to do.
  • A Set containing any of 'participants', 'streaming', and 'transcription'
  • true (meaning "all")
  • false (meaning "none")

permissions in action

Optional properties

A note about the audio, video, and screen properties

These three properties' boolean values indicate whether the corresponding audio, video, or screen track is available locally and ready to be sent.

However, when a track isn't yet available ("loading"), the value will briefly be false.

We highly recommend skipping these properties and using the tracks property's key for each kind of track instead for more accurate, detailed tracks state.

A note about the audioTrack, videoTrack, and screenVideoTrack properties in call object mode

These properties include the direct MediaStreamTrack that a participant is sending, if available.

We recommend skipping these properties and using the tracks property's key for each kind of track instead.