← Chrome 151 reference

v151 · isolated-web-apps · permissions-policy · direct-sockets

Permission Policy Merger: direct-sockets-private with local-network and loopback-network

Chrome 151 replaces the direct-sockets-private permission policy for Isolated Web Apps with two more granular policies: local-network (for LAN addresses) and loopback-network (for loopback addresses). IWA manifests must now declare which network scope Direct Sockets connections target.

at a glance

Shipped inChrome 151 (Desktop; enabled by default)
StatusEnabled by default (stage 160 desktop_first: 151)
ScopeIsolated Web Apps (IWAs) only
SpecWICG Direct Sockets §permissions-policy-pna
Standards position (Firefox)No signal
Standards position (Safari)No signal
ChromeStatus6046077976444928 — Permission Policy Merger: direct-sockets-private with local-network and loopback-network
Source: chromestatus.com/feature/6046077976444928; ChromeStatus API record; milestone 151 features

Implementation-status divergence, both sides reported rather than resolved (fetched 2026-10-07): this page records the granular policies shipping in Chrome 151 for Isolated Web Apps, while the ChromeStatus API record top-level status string still reads “Proposed” (accurate_as_of 2026-06-22) even though stage 160 explicitly sets desktop_first: 151.

why it exists

The Direct Sockets API gives Isolated Web Apps raw TCP/UDP socket access. Previously, accessing private network addresses (LAN and loopback) required declaring a single coarse direct-sockets-private permission policy in the IWA manifest. This all-or-nothing approach made it impossible to grant an IWA LAN access without also granting loopback access (or vice versa).

In accordance with the principle of least privilege and Private Network Access specifications (WICG PNA), separating these scopes ensures that an app intended to communicate with LAN hardware (like printers or IoT devices) cannot inadvertently or maliciously access sensitive local machine daemons listening on 127.0.0.1.

Source: chromestatus feature summary; Direct Sockets explainer; WICG PNA repository

permissions policy syntax and manifest fields

Per the W3C Permissions Policy specification and MDN Permissions Policy reference, policies are declared in the Web App Manifest permissions_policy field for IWAs:

"permissions_policy": {
  "local-network": ["self"],
  "loopback-network": ["self"]
}
Policy directiveNetwork scopeChrome 150 behaviourChrome 151+ behaviour
direct-sockets-privateLAN + loopback addressesGranted both scopesDeprecated; replaced by granular policies
local-networkPrivate LAN IP ranges (RFC 1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)Not availableRequired for LAN Direct Sockets connections
loopback-networkLoopback interfaces (127.0.0.0/8, ::1)Not availableRequired for localhost Direct Sockets connections

Attempting to open a TCPSocket or UDPSocket to a destination address without the necessary policy declared in the manifest causes the connection promise to reject with a DOMException (e.g. SecurityError or NetworkError).

Source: WICG Direct Sockets §permissions-policy-pna; chromestatus.com/feature/6046077976444928

examples

In Chrome 151+, Isolated Web Apps must declare the exact network scope in their manifest file:

// IWA Web App Manifest (Chrome 151+ — granular control)
{
  "name": "Local Network Device Manager",
  "start_url": "/",
  "display": "standalone",
  "permissions_policy": {
    "local-network": ["self"],      // allow LAN connections
    "loopback-network": ["self"]    // allow loopback connections
  }
}

// Or just local-network, if the app only connects to LAN devices:
{
  "name": "LAN Printer Controller",
  "permissions_policy": {
    "local-network": ["self"]
  }
}

browser support

BrowserSupportNotes
Chrome 151+Enabled by defaultDesktop Isolated Web Apps (IWAs) only
Edge 151+Enabled by defaultChromium mirror
FirefoxNo signalDirect Sockets and IWAs unsupported
SafariNo signalDirect Sockets and IWAs unsupported
Source: chromestatus.com/feature/6046077976444928

see also