← Chrome 147 reference

v147 · shipped · security · websocket

Local network access restrictions for WebSockets

Chrome 147 extends Local Network Access (LNA) protections to WebSocket connections. Public websites now need explicit user permission before connecting via WebSocket to local or private IP addresses (loopback, LAN). This prevents silent cross-origin requests to devices on the user's private network.

Breaking change WebSocket connections from public websites to local addresses (localhost, 192.168.x.x, 10.x.x.x, etc.) now trigger a permission prompt in Chrome 147 and Edge 147. Existing apps that relied on silent WebSocket connections to local services will stop working until users grant permission — or until the site obtains a per-origin policy exemption.

at a glance

Shipped inChrome 147, Edge 147 (desktop, Android)
StatusEnabled by default
Flagchrome://flags/#local-network-access-check-websockets
SpecWICG Local Network Access spec
ChromeStatus5197681148428288 — Local network access restrictions for WebSockets

Shipped-versus-recorded-status disagreement, both sides reported rather than resolved: this page records the feature as shipped in Chrome 147 (desktop and Android), while the ChromeStatus record for feature 5197681148428288 still reads status “Proposed” with is_released false and accurate_as_of 2026-03-24 (fetched 2026-10-06). That record's own rollout plan says “Will ship enabled for all users”, which is consistent with the page's enabled-by-default ship if the milestone lands as recorded — so the two are reported together rather than one being chosen.

why it exists

Private network devices (printers, routers, smart home hubs, development servers) often lack authentication and CORS headers, making them easy targets. A malicious public website could silently open a WebSocket to ws://192.168.1.1 and interact with a home router's local admin interface without the user's knowledge. Chrome already gated subresource fetches (HTTP/HTTPS) to local addresses behind LNA checks; Chrome 147 closes the same gap for WebSocket connections.

Source: blink-dev Intent to Ship — Local network access restrictions for WebSockets, April 2026.

what changes

WebSocket connection attempts from secure public pages to local/private addresses now require a user permission grant. The browser shows a permission prompt; if the user denies (or no prompt is shown because the site is not secure), the WebSocket connection is blocked.

Affected address ranges

Address rangeExamples
Loopback127.0.0.1, localhost, ::1
Private (RFC 1918)10.x.x.x, 172.16–31.x.x, 192.168.x.x
Link-local169.254.x.x, fe80::/10

Requirements for the connection to proceed

Source: Chrome for Developers blog — Local Network Access permission prompt, April 2026.

enterprise policy

Enterprise deployments can bypass the restriction via Chrome policies:

PolicyEffect
LocalNetworkAccessAllowedForUrlsOrigins allowed to connect to local network without a prompt.
LocalNetworkAccessBlockedForUrlsOrigins blocked from connecting to local network.
LocalNetworkAccessRestrictionsTemporaryOptOutTemporarily disables the restriction enterprise-wide during rollout.
Source: Chrome Enterprise and Education release notes; policy names as published in the Chrome Enterprise policy list, April 2026.

mitigation for developers

If your web application connects via WebSocket to a local server (e.g. a companion native app or dev-mode tool), you have several options:

// A public HTTPS page connecting to a companion app on the user's own
// machine. Chrome 147 shows the Local Network Access permission prompt
// before the connection is established; a denied prompt blocks it.
const socket = new WebSocket("ws://127.0.0.1:8787/bridge");

socket.addEventListener("open", () => socket.send("ping"));
socket.addEventListener("error", () => console.warn("Local WebSocket blocked."));
Source: blink-dev Intent to Ship — Local network access restrictions for WebSockets, April 2026.

browser support

BrowserSupport
Chrome 147+ (desktop, Android)Enabled by default
Edge 147+Enabled by default
FirefoxNo position
SafariNo position
Source: chromestatus.com feature page, April 2026.

see also