Open 2 browsers and paste this code to the console
const peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = (e) => {
  console.log("Peer A onicecandidate", peerConnection.localDescription);
};
const channel = peerConnection.createDataChannel("channel-name");
channel.onmessage = (e) => console.log("Peer A - Got message", e.data);
channel.onopen = (e) => console.log("Peer A - Channel opened!");
channel.onclose = (e) => console.log("Peer A - Channel closed!");
const peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = (e) => {
  console.log("Peer B onicecandidate", peerConnection.localDescription);
};
let channel;
peerConnection.ondatachannel = ({channel: remoteChannel}) => {
    remoteChannel.onmessage = (e) => console.log("Peer B - Got message", e.data);
    remoteChannel.onopen = (e) => console.log("Peer B - Channel opened!");
    remoteChannel.onclose = (e) => console.log("Peer B - Channel closed!");
    
    channel = remoteChannel;
};
peerConnection
  .createOffer()
  .then((o) => peerConnection.setLocalDescription(o));
const offer = // copy from A
peerConnection.setRemoteDescription(offer).then((a) => console.log("Peer B - Done setRemoteDescription"));
peerConnection
  .createAnswer()
  .then((a) => peerConnection.setLocalDescription(a))
  .then((a) => console.log(JSON.stringify(peerConnection.localDescription)));
const answer = // copy from B
peerConnection.setRemoteDescription(answer).then(a=>console.log("Peer A - Done setRemoteDescription"))
channel.send('text')