Browser Run - Connect multiple clients to one Browser Run session
- Announced
- Tags
- Browser-Run
- Severity
- info, set by
reef/rss-rule-v1 - Source
- https://developers.cloudflare.com/changelog/post/2026-09-29-concurrent-session-connections/
<p><a href="https://developers.cloudflare.com/browser-run/">Browser Run</a> sessions now accept multiple concurrent connections. Before, a session accepted only one connection at a time, and other Workers had to wait until that connection closed. Now multiple Workers can connect to the same browser at the same time.</p> <p>Each <code>puppeteer.connect()</code> call opens its own Chrome DevTools Protocol (CDP) connection. Create a separate browser context for each request to keep its pages, cookies, and storage apart from other clients.</p> <div><div data-nb-tabs data-nb-sync-key="workersExamples" class><div class="relative flex border-b border-border" role="tablist" data-nb-tabs-list><span class="bg-primary pointer-events-none absolute -bottom-px h-0.5 rounded-t-sm transition-[left,width] duration-200 ease-out" data-nb-tabs-indicator aria-hidden="true"></span></div><div class="mt-3"><div role="tabpanel" data-nb-tabs-content data-nb-tab-label="JavaScript" class><figure class="nb-code-figure" data-nb-lang="js"><pre class="astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz" tabindex="0" data-language="js" data-nb-lang="js"><code><span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> browser</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> puppeteer.</span><span class="nb-shiki-1t8gfj">connect</span><span class="nb-shiki-140thh">(env.</span><span class="nb-shiki-dzsirb">MYBROWSER</span><span class="nb-shiki-140thh">, sessionId);</span></span> <span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> context</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> browser.</span><span class="nb-shiki-1t8gfj">createBrowserContext</span><span class="nb-shiki-140thh">();</span></span> <span class="line"></span> <span class="line"><span class="nb-shiki-1itgoe">try</span><span class="nb-shiki-140thh"> {</span></span> <span class="line"><span class="nb-shiki-1itgoe"> const</span><span class="nb-shiki-dzsirb"> page</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> context.</span><span class="nb-shiki-1t8gfj">newPage</span><span class="nb-shiki-140thh">();</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> page.</span><span class="nb-shiki-1t8gfj">goto</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"https://example.com"</span><span class="nb-shiki-140thh">);</span></span> <span class="line"><span class="nb-shiki-21nrsd"> // ...</span></span> <span class="line"><span class="nb-shiki-140thh">} </span><span class="nb-shiki-1itgoe">finally</span><span class="nb-shiki-140thh"> {</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> context.</span><span class="nb-shiki-1t8gfj">close</span><span class="nb-shiki-140thh">();</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> browser.</span><span class="nb-shiki-1t8gfj">disconnect</span><span class="nb-shiki-140thh">(); </span><span class="nb-shiki-21nrsd">// keep the shared browser running</span></span> <span class="line"><span class="nb-shiki-140thh">}</span></span></code></pre></figure></div><div role="tabpanel" data-nb-tabs-content data-nb-tab-label="TypeScript" class><figure class="nb-code-figure" data-nb-lang="ts"><pre class="astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz" tabindex="0" data-language="ts" data-nb-lang="ts"><code><span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> browser</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> puppeteer.</span><span class="nb-shiki-1t8gfj">connect</span><span class="nb-shiki-140thh">(env.</span><span class="nb-shiki-dzsirb">MYBROWSER</span><span class="nb-shiki-140thh">, sessionId);</span></span> <span class="line"><span class="nb-shiki-1itgoe">const</span><span class="nb-shiki-dzsirb"> context</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> browser.</span><span class="nb-shiki-1t8gfj">createBrowserContext</span><span class="nb-shiki-140thh">();</span></span> <span class="line"></span> <span class="line"><span class="nb-shiki-1itgoe">try</span><span class="nb-shiki-140thh"> {</span></span> <span class="line"><span class="nb-shiki-1itgoe"> const</span><span class="nb-shiki-dzsirb"> page</span><span class="nb-shiki-1itgoe"> =</span><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> context.</span><span class="nb-shiki-1t8gfj">newPage</span><span class="nb-shiki-140thh">();</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> page.</span><span class="nb-shiki-1t8gfj">goto</span><span class="nb-shiki-140thh">(</span><span class="nb-shiki-mdbnqw">"https://example.com"</span><span class="nb-shiki-140thh">);</span></span> <span class="line"><span class="nb-shiki-21nrsd"> // ...</span></span> <span class="line"><span class="nb-shiki-140thh">} </span><span class="nb-shiki-1itgoe">finally</span><span class="nb-shiki-140thh"> {</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> context.</span><span class="nb-shiki-1t8gfj">close</span><span class="nb-shiki-140thh">();</span></span> <span class="line"><span class="nb-shiki-1itgoe"> await</span><span class="nb-shiki-140thh"> browser.</span><span class="nb-shiki-1t8gfj">disconnect</span><span class="nb-shiki-140thh">(); </span><span class="nb-shiki-21nrsd">// keep the shared browser running</span></span> <span class="line"><span class="nb-shiki-140thh">}</span></span></code></pre></figure></div></div></div><script type="module" src="https://developers.cloudflare.com/home/runner/work/cloudflare-docs/cloudflare-docs/src/components/ui/tabs/Tabs.astro?astro&type=script&index=0&lang.ts"></script></div> <p>Sharing sessions means fewer new browsers to launch, less cold-start time, and fewer <a href="https://developers.cloudflare.com/browser-run/limits/">concurrent browsers</a> counted against your limits.</p> <p>Concurrent connections require <code>@cloudflare/puppeteer</code> version 1.1.0 or later.</p> <p>Refer to <a href="https://developers.cloudflare.com/browser-run/features/reuse-sessions/">Reuse sessions</a> for a full example.</p>
The text above is the source's. reef added the severity, the dates it could read from the text, and the endpoints and scopes named in code.