Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.


Inherits: RefCounted < Object

Inherited By: WebRTCPeerConnectionExtension

Interface to a WebRTC peer connection.


A WebRTC connection between the local computer and a remote peer. Provides an interface to connect, maintain and monitor the connection.

Setting up a WebRTC connection between two peers may not seem a trivial task, but it can be broken down into 3 main steps:

  • The peer that wants to initiate the connection (A from now on) creates an offer and send it to the other peer (B from now on).

  • B receives the offer, generate and answer, and sends it to A).

  • A and B then generates and exchange ICE candidates with each other.

After these steps, the connection should become connected. Keep on reading or look into the tutorial for more information.



add_ice_candidate ( String media, int index, String name )


close ( )


create_data_channel ( String label, Dictionary options={} )


create_offer ( )


get_connection_state ( ) const


get_gathering_state ( ) const


get_signaling_state ( ) const


initialize ( Dictionary configuration={} )


poll ( )


set_default_extension ( StringName extension_class ) static


set_local_description ( String type, String sdp )


set_remote_description ( String type, String sdp )


data_channel_received ( WebRTCDataChannel channel )

Emitted when a new in-band channel is received, i.e. when the channel was created with negotiated: false (default).

The object will be an instance of WebRTCDataChannel. You must keep a reference of it or it will be closed automatically. See create_data_channel.

ice_candidate_created ( String media, int index, String name )

Emitted when a new ICE candidate has been created. The three parameters are meant to be passed to the remote peer over the signaling server.

session_description_created ( String type, String sdp )

Emitted after a successful call to create_offer or set_remote_description (when it generates an answer). The parameters are meant to be passed to set_local_description on this object, and sent to the remote peer over the signaling server.


enum ConnectionState:

ConnectionState STATE_NEW = 0

The connection is new, data channels and an offer can be created in this state.

ConnectionState STATE_CONNECTING = 1

The peer is connecting, ICE is in progress, none of the transports has failed.

ConnectionState STATE_CONNECTED = 2

The peer is connected, all ICE transports are connected.

ConnectionState STATE_DISCONNECTED = 3

At least one ICE transport is disconnected.

ConnectionState STATE_FAILED = 4

One or more of the ICE transports failed.

ConnectionState STATE_CLOSED = 5

The peer connection is closed (after calling close for example).

enum GatheringState: