Skip to main content
Transports are the means by which PipecatClients communicate with their bot services. Transports implement the underlying device management, connectivity, media transmission, and state logic that manage the lifecycle of your session. All transport packages (such as DailyTransport) extend from the Transport base class defined in the client-js library. You can extend this class if you are looking to implement your own or add additional functionality.

Transport Lifecycle

Each Pipecat client instance is associated with a transport instance. The instance will re-use the transport instance across multiple calls to connect(), allowing you to connect to different bot services without needing to create a new transport or client each time.

Media Support

get mediaSupport(): MediaSupport The media the transport can carry in the current environment, known before connecting. Transports override this getter; the default returns {}, which rules nothing out. PipecatClient combines it with the bot’s capabilities in mediaSupport.

Transport States

TransportState Your transport instance goes through a series of states during its lifecycle. These states are:
1

Disconnected

Transport is idle and has not yet been initialized (default state).
2

Initializing

Transport is being initialized. This occurs in response to a pcClient.initDevices() call, where the transport is being set up in order to enumerate local media devices. connect() and startBot() call initDevices() for you when needsInit() is true; otherwise they skip this state.
3

Initialized

Transport has been initialized and is ready to connect. This state is reached after a successful pcClient.initDevices() call, including the one connect() and startBot() make for you.
4

Authenticating

Your client has called pcClient.startBot() or pcClient.startBotAndConnect() and is waiting for a response from your server containing connection details for your transport (such as a session URL and token). Note: If you provide the TransportConnectionParams directly to connect() without calling either startBot methods, the transport will skip this state and go directly to Connecting.
5

Authenticated

Your client has called pcClient.startBot() or pcClient.startBotAndConnect() and has successfully received a response. If using startBotAndConnect(), it will quickly move into the Connecting state. Note: If you provide the TransportConnectionParams directly to connect() without calling either startBot methods, the transport will skip this state and go directly to Connecting.
6

Connecting

The transport is connecting to the server.
7

Connected

The transport has successfully connected to the session and is awaiting a client-ready signal (indicated audio and video tracks are ready to be sent and received).
8

Ready

Transport is ready and the session can begin.
9

Disconnecting

Transport is disconnecting from the session.
10

Error

An error occurred during the transport lifecycle. This indicates a fatal error and the transport should move quickly into the Disconnected state.
You can access the current transport state via pcClient.state, or by defining a callback or event: