<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Realtime</title><description>Cloudflare changelogs for Realtime</description><link>https://developers.stormtrust.net/changelog/</link><item><title>Realtime - Control Realtime SFU DataChannel delivery</title><link>https://developers.stormtrust.net/changelog/post/2026-08-13-datachannels-reliability-ordering/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-08-13-datachannels-reliability-ordering/</guid><description>
&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/&quot;&gt;Cloudflare Realtime SFU&lt;/a&gt; is a &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/calls-vs-sfus/&quot;&gt;WebRTC selective forwarding unit&lt;/a&gt; that runs on Cloudflare&apos;s global network. It forwards audio, video, and application data between WebRTC clients without requiring you to manage SFU infrastructure or regions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/datachannels/&quot;&gt;DataChannels&lt;/a&gt; are WebRTC channels for application messages. A client publishes a named DataChannel to Realtime SFU, and the SFU forwards its messages to every client that subscribes to that channel. Use DataChannels for low-latency payloads such as chat messages, game state, sensor updates, and control events.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;what-changed&quot;&gt;What changed&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#what-changed&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Realtime SFU DataChannels now support unordered and partially reliable delivery. DataChannels remain reliable and ordered by default, so existing channels keep their current behavior.&lt;/p&gt;
&lt;p&gt;With ordered delivery, a delayed message can block later messages. For game state or sensor updates, recent data may be more useful than recovering an older message. Unordered delivery lets later messages proceed, while partial reliability limits retransmission attempts or delivery time.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;choose-delivery-behavior&quot;&gt;Choose delivery behavior&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#choose-delivery-behavior&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Delivery settings answer two questions: whether newer messages can bypass a delayed message, and when the transport should stop retrying delivery.&lt;/p&gt;
&lt;p&gt;Choose the policy that matches how long your payload remains useful:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Goal&lt;/th&gt;
&lt;th&gt;Settings&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reliable, ordered delivery (default)&lt;/td&gt;
&lt;td&gt;Omit &lt;code&gt;ordered&lt;/code&gt;, &lt;code&gt;maxRetransmits&lt;/code&gt;, and &lt;code&gt;maxPacketLifeTime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Messages remain useful and must arrive in order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliable, unordered delivery&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;ordered: false&lt;/code&gt;; omit both retry fields&lt;/td&gt;
&lt;td&gt;Messages remain useful, but later messages should not wait for earlier messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No retries or ordering&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;ordered: false&lt;/code&gt; and &lt;code&gt;maxRetransmits: 0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The application tolerates message loss and discards out-of-date updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limited retries&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;maxRetransmits: &amp;lt;COUNT&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Brief recovery is useful, but repeated retries are not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time-bounded delivery&lt;/td&gt;
&lt;td&gt;Set &lt;code&gt;maxPacketLifeTime: &amp;lt;MILLISECONDS&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A message loses value after a known time window&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;ordered&lt;/code&gt; controls ordering independently from retries. &lt;code&gt;maxRetransmits&lt;/code&gt; and &lt;code&gt;maxPacketLifeTime&lt;/code&gt; are alternative retry budgets, so set at most one for each channel. Omit both for reliable delivery, whether ordered or unordered.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;apply-the-policy-end-to-end&quot;&gt;Apply the policy end to end&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#apply-the-policy-end-to-end&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Realtime DataChannels use negotiated IDs, so browsers do not receive delivery settings from the remote peer. Apply the same settings when the publisher creates the local channel, each subscriber pulls the remote channel, and each client calls &lt;code&gt;createDataChannel()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The following example configures unordered delivery with no retransmissions. It begins after you &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/datachannels/#set-up-a-datachannel&quot;&gt;establish a DataChannel transport on both sessions and complete any required SDP exchange&lt;/a&gt;. Run the API requests from your backend with &lt;code&gt;APP_ID&lt;/code&gt;, &lt;code&gt;APP_TOKEN&lt;/code&gt;, &lt;code&gt;PUBLISHER_SESSION_ID&lt;/code&gt;, and &lt;code&gt;SUBSCRIBER_SESSION_ID&lt;/code&gt; set in your environment.&lt;/p&gt;
&lt;div data-nb-steps class=&quot;steps&quot; data-astro-cid-sfejetki&gt;&lt;ol&gt;
&lt;li&gt;On the publisher session, create the local DataChannel:&lt;/li&gt;
&lt;/ol&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://rtc.live.cloudflare.com/v1/apps/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$PUBLISHER_SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/datachannels/new&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; @-&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;dataChannels&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;location&quot;: &quot;local&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;dataChannelName&quot;: &quot;player-state&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;ordered&quot;: false,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;maxRetransmits&quot;: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;On each subscriber session, pull the remote DataChannel with the same delivery settings:&lt;/li&gt;
&lt;/ol&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://rtc.live.cloudflare.com/v1/apps/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SUBSCRIBER_SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/datachannels/new&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	--data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; @-&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	&quot;dataChannels&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;		{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;location&quot;: &quot;remote&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;sessionId&quot;: &quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$PUBLISHER_SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;dataChannelName&quot;: &quot;player-state&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;ordered&quot;: false,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;			&quot;maxRetransmits&quot;: 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;	]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;In the publisher and subscriber clients, create the negotiated browser DataChannel with the same settings. In this example, &lt;code&gt;pc&lt;/code&gt; is the active &lt;code&gt;RTCPeerConnection&lt;/code&gt;, and &lt;code&gt;channelId&lt;/code&gt; is the ID returned by the corresponding API request:&lt;/li&gt;
&lt;/ol&gt;&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; channel&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; pc.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;createDataChannel&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;player-state&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	negotiated: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	id: channelId,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	ordered: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	maxRetransmits: &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;&lt;script type=&quot;module&quot; src=&quot;https://developers.stormtrust.net/home/runner/work/infrastructure/infrastructure/org/apps/developers/src/components/ui/steps/Steps.astro?astro&amp;type=script&amp;index=0&amp;lang.ts&quot;&gt;&lt;/script&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;related-documentation&quot;&gt;Related documentation&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#related-documentation&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/&quot;&gt;Realtime SFU overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/datachannels/&quot;&gt;DataChannels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/https-api/&quot;&gt;Connection API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Realtime - Post-meeting transcriptions are now Generally Available in RealtimeKit</title><link>https://developers.stormtrust.net/changelog/post/2026-06-08-realtimekit-post-meeting-transcription-ga/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-06-08-realtimekit-post-meeting-transcription-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/&quot;&gt;RealtimeKit&lt;/a&gt; lets you build products where people meet over live audio and video — such as HealthTech, EdTech, proctoring, and other real-time platforms — on Cloudflare&apos;s &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/calls-vs-sfus/&quot;&gt;global WebRTC infrastructure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/#post-meeting-transcription&quot;&gt;Post-meeting transcription&lt;/a&gt; is now Generally Available, so completed RealtimeKit meetings can automatically produce full transcript files after they end. Those transcripts can also power &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/summary/&quot;&gt;AI-generated summaries&lt;/a&gt; for meeting notes, review workflows, and follow-up tasks after the transcript is available.&lt;/p&gt;
&lt;p&gt;Post-meeting transcription is a managed service powered by &lt;a href=&quot;https://developers.stormtrust.net/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; using &lt;a href=&quot;https://developers.stormtrust.net/workers-ai/models/whisper-large-v3-turbo/&quot;&gt;Whisper Large v3 Turbo&lt;/a&gt;. RealtimeKit handles transcription processing and can return transcript and summary files through &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/webhooks/&quot;&gt;webhooks&lt;/a&gt; or the REST API, so you do not need to run your own transcription infrastructure.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;generate-transcripts-and-summaries&quot;&gt;Generate transcripts and summaries&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#generate-transcripts-and-summaries&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;To generate a transcript after a meeting ends, set &lt;code&gt;transcribe_on_end: true&lt;/code&gt; when &lt;a href=&quot;https://developers.stormtrust.net/api/resources/realtime_kit/subresources/meetings/methods/create/&quot;&gt;creating a meeting&lt;/a&gt;. To also generate an AI summary automatically after the transcript is available, set &lt;code&gt;summarize_on_end: true&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/meetings&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;title&quot;: &quot;Weekly product review&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;transcribe_on_end&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;summarize_on_end&quot;: true,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;ai_config&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;transcription&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;language&quot;: &quot;en&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;summarization&quot;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;word_limit&quot;: 500,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;text_format&quot;: &quot;markdown&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        &quot;summary_type&quot;: &quot;team_meeting&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;consume-results&quot;&gt;Consume results&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#consume-results&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When RealtimeKit finishes processing a meeting, it creates download URLs for the transcript and, if &lt;code&gt;summarize_on_end&lt;/code&gt; is set, the summary. You can receive those URLs automatically with &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/webhooks/&quot;&gt;webhooks&lt;/a&gt;, or fetch them later for a specific session with the &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/summary/#rest-api&quot;&gt;REST API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To receive results as soon as they are ready, configure the &lt;code&gt;meeting.transcript&lt;/code&gt; and &lt;code&gt;meeting.summary&lt;/code&gt; webhook events:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/webhooks&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Content-Type: application/json&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;name&quot;: &quot;AI results webhook&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;url&quot;: &quot;https://example.com/webhook&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;events&quot;: [&quot;meeting.transcript&quot;, &quot;meeting.summary&quot;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &quot;enabled&quot;: true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  }&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To fetch results later, call the &lt;a href=&quot;https://developers.stormtrust.net/api/resources/realtime_kit/subresources/sessions/methods/get_session_transcripts/&quot;&gt;transcript&lt;/a&gt; or &lt;a href=&quot;https://developers.stormtrust.net/api/resources/realtime_kit/subresources/sessions/methods/get_session_summary/&quot;&gt;summary&lt;/a&gt; endpoint for the session:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; GET&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/transcript&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; GET&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/summary&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://developers.stormtrust.net/api/resources/realtime_kit/subresources/sessions/methods/generate_summary_of_transcripts/&quot;&gt;Generate summary of transcripts for the session&lt;/a&gt; API only if &lt;code&gt;summarize_on_end&lt;/code&gt; was not set and you want to generate a summary manually after the transcript is available:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; -X&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$APP_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/sessions/&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$SESSION_ID&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/summary&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  -H&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;Authorization: Bearer &lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Post-meeting transcription supports &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/#output-formats&quot;&gt;CSV, JSON, SRT, and VTT transcript outputs&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/#post-meeting-supported-languages&quot;&gt;automatic language detection and Whisper language codes&lt;/a&gt;. RealtimeKit also supports &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/#real-time-transcription&quot;&gt;real-time transcription&lt;/a&gt; with &lt;a href=&quot;https://developers.stormtrust.net/workers-ai/models/nova-3/&quot;&gt;Deepgram Nova-3&lt;/a&gt; for live captions, in-meeting accessibility, and real-time note-taking.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/&quot;&gt;RealtimeKit transcription docs&lt;/a&gt; and &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/summary/&quot;&gt;summary docs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Realtime - Cloudflare&apos;s Realtime WebSocket adapter now auto-reconnects and buffers WebRTC media</title><link>https://developers.stormtrust.net/changelog/post/2026-05-29-websocket-adapter-auto-reconnect/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-29-websocket-adapter-auto-reconnect/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/&quot;&gt;Cloudflare Realtime SFU&lt;/a&gt; is a &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/calls-vs-sfus/&quot;&gt;WebRTC Selective Forwarding Unit that runs on Cloudflare&apos;s global network&lt;/a&gt;, so you can route live audio, video, and data between WebRTC clients around the world without managing SFU infrastructure or regions.&lt;/p&gt;
&lt;p&gt;When you use the &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket adapter&lt;/a&gt; to stream WebRTC media to a WebSocket endpoint, the adapter now auto-reconnects and buffers audio and video after brief endpoint disconnects or restarts.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;streaming-webrtc-media-to-websocket-endpoints&quot;&gt;Streaming WebRTC media to WebSocket endpoints&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#streaming-webrtc-media-to-websocket-endpoints&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Many teams also use Realtime SFU as the media layer for backend applications, such as transcription, recording, note-taking, and agentic media-processing services. These systems often need to consume live WebRTC audio or video from the SFU in backend infrastructure, including &lt;a href=&quot;https://developers.stormtrust.net/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/workers/&quot;&gt;Workers&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/containers/&quot;&gt;Containers&lt;/a&gt;, or external services, without running a WebRTC client themselves.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket adapter&lt;/a&gt; bridges that gap by streaming WebRTC media from the SFU to a standard WebSocket endpoint as application-consumable payloads: &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#media-formats&quot;&gt;PCM audio frames and JPEG video frames&lt;/a&gt;.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;what-changed&quot;&gt;What changed&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#what-changed&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When you use the WebSocket adapter in &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#stream-mode-egress&quot;&gt;Stream mode (egress)&lt;/a&gt; to send live audio or video from the SFU to your own WebSocket endpoint, the SFU now &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#automatic-reconnection-for-streaming&quot;&gt;automatically reconnects&lt;/a&gt; after brief endpoint disconnects or restarts. This is especially helpful for long-running media pipelines where the WebSocket endpoint may briefly restart while a recording, transcription, or live analysis job is still in progress.&lt;/p&gt;
&lt;p&gt;Previously, a brief disconnect from your WebSocket endpoint could close the adapter and require your application to recreate it before media could resume. Now, the SFU retries the same endpoint for up to 5 seconds with no API change required. If the endpoint comes back within that window, audio and video delivery resumes automatically.&lt;/p&gt;
&lt;p&gt;The reconnect behavior also includes &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#media-buffering-during-reconnect&quot;&gt;live-first media buffering&lt;/a&gt;, so brief interruptions reduce media loss without replaying stale video.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;reconnect-behavior&quot;&gt;Reconnect behavior&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#reconnect-behavior&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;During reconnect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Audio uses a short bounded backlog to reduce audible loss. If the interruption lasts longer than the backlog can cover, older audio may be dropped.&lt;/li&gt;
&lt;li&gt;Video resumes from the &lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#video-jpeg&quot;&gt;latest available JPEG frame&lt;/a&gt; instead of replaying stale frames.&lt;/li&gt;
&lt;li&gt;Recovery is best effort and does not guarantee gapless or exactly-once delivery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the endpoint remains unavailable after the 5-second reconnect window, the adapter closes and must be recreated.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;learn-more&quot;&gt;Learn more&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#learn-more&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/&quot;&gt;WebSocket adapter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/media-transport-adapters/websocket-adapter/#automatic-reconnection-for-streaming&quot;&gt;Automatic reconnection for streaming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/get-started/&quot;&gt;Get started with Realtime SFU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/example-architecture/&quot;&gt;Realtime SFU example architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/sfu/calls-vs-sfus/&quot;&gt;Realtime vs Regular SFUs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://realtime-sfu.dev-demos.workers.dev/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Global SFU Network Visualization&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Realtime - Record specific participant audio tracks in RealtimeKit</title><link>https://developers.stormtrust.net/changelog/post/2026-05-28-realtimekit-track-recording/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-28-realtimekit-track-recording/</guid><description>&lt;p&gt;You can now record specific participant audio tracks in RealtimeKit with &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/recording-guide/track-recording/&quot;&gt;track recording&lt;/a&gt;. Track recording creates separate WebM files for each participant instead of a single composite recording, which is useful for post-processing, transcription, and regulated or content-sensitive workflows.&lt;/p&gt;
&lt;p&gt;To record specific participants, pass &lt;code&gt;user_ids&lt;/code&gt; when starting a track recording:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;curl&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --request&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; POST&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --url&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;account_i&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/realtime/kit/&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;app_i&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;/recordings/track&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Authorization: Bearer &amp;lt;api_token&amp;gt;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --header&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;Content-Type: application/json&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &apos;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;meeting_id&quot;: &quot;97440c6a-140b-40a9-9499-b23fd7a3868a&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;user_ids&quot;: [&quot;user-123&quot;, &quot;user-456&quot;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To pass &lt;code&gt;user_ids&lt;/code&gt; for selective track recording, use the following minimum SDK versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web Core: &lt;code&gt;@cloudflare/realtimekit&lt;/code&gt; version &lt;code&gt;1.4.0&lt;/code&gt; or later&lt;/li&gt;
&lt;li&gt;Web UI Kit: &lt;code&gt;@cloudflare/realtimekit-ui&lt;/code&gt;, &lt;code&gt;@cloudflare/realtimekit-react-ui&lt;/code&gt;, or &lt;code&gt;@cloudflare/realtimekit-angular-ui&lt;/code&gt; version &lt;code&gt;1.1.2&lt;/code&gt; or later&lt;/li&gt;
&lt;li&gt;Android Core or iOS Core: version &lt;code&gt;2.0.0&lt;/code&gt; or later&lt;/li&gt;
&lt;li&gt;Android UI Kit or iOS UI Kit: version &lt;code&gt;1.1.0&lt;/code&gt; or later&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/&quot;&gt;RealtimeKit&lt;/a&gt; provides SDKs and UI components so that you can build your own meeting experience on Cloudflare&apos;s &lt;a href=&quot;https://developers.stormtrust.net/realtime/#realtime-sfu&quot;&gt;global WebRTC infrastructure&lt;/a&gt;. Teams today build products ranging from telehealth to education on RealtimeKit for global audiences. You can get started today with our &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/quickstart/&quot;&gt;Quickstart&lt;/a&gt; or take a look at our &lt;a href=&quot;https://github.com/cloudflare/meet&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Meet repo&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; as a reference.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>Realtime</product><category>Realtime</category></item><item><title>Workers AI, Realtime - Real-time transcription in RealtimeKit now supports 10 languages with regional variants</title><link>https://developers.stormtrust.net/changelog/post/2026-03-06-realtimekit-multilingual-transcription/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-03-06-realtimekit-multilingual-transcription/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/&quot;&gt;Real-time transcription&lt;/a&gt; in RealtimeKit now supports 10 languages with regional variants, powered by &lt;a href=&quot;https://developers.stormtrust.net/workers-ai/models/nova-3/&quot;&gt;Deepgram Nova-3&lt;/a&gt; running on &lt;a href=&quot;https://developers.stormtrust.net/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During a meeting, participant audio is routed through &lt;a href=&quot;https://developers.stormtrust.net/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; to Nova-3 on Workers AI — so transcription runs on Cloudflare&apos;s network end-to-end, reducing latency compared to routing through external speech-to-text services.&lt;/p&gt;
&lt;p&gt;Set the language when &lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/concepts/meeting/&quot;&gt;creating a meeting&lt;/a&gt; via &lt;code&gt;ai_config.transcription.language&lt;/code&gt;:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;json&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot; data-nb-lang=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;	&quot;ai_config&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;		&quot;transcription&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;			&quot;language&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;fr&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;		}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Supported languages include English, Spanish, French, German, Hindi, Russian, Portuguese, Japanese, Italian, and Dutch — with regional variants like &lt;code&gt;en-AU&lt;/code&gt;, &lt;code&gt;en-GB&lt;/code&gt;, &lt;code&gt;en-IN&lt;/code&gt;, &lt;code&gt;en-NZ&lt;/code&gt;, &lt;code&gt;es-419&lt;/code&gt;, &lt;code&gt;fr-CA&lt;/code&gt;, &lt;code&gt;de-CH&lt;/code&gt;, &lt;code&gt;pt-BR&lt;/code&gt;, and &lt;code&gt;pt-PT&lt;/code&gt;. Use &lt;code&gt;multi&lt;/code&gt; for automatic multilingual detection.&lt;/p&gt;
&lt;p&gt;If you are building voice agents or real-time translation workflows, your agent can now transcribe in the caller&apos;s language natively — no extra services or routing logic needed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/realtime/realtimekit/ai/transcription/&quot;&gt;Transcription docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/workers-ai/models/nova-3/&quot;&gt;Nova-3 model page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.stormtrust.net/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category><category>Realtime</category></item></channel></rss>