Planned ProcessContainer schema 0.8 configuration

August 13, 2026 ยท View on GitHub

See the shared 0.7-to-0.8 network schema comparison for egress, ingress, and proxy endpoint changes. This page covers the ProcessContainer-specific proxy peer.

Contained proxy

allowedProxyPeer identifies either an installed package or an unpackaged AppContainer profile that hosts the proxy. Package identity can scope a packaged proxy whether or not that proxy uses AppContainer isolation.

{
  "version": "0.8.0-alpha",
  "containment": "processcontainer",
  "process": {
    "commandLine": "cmd.exe /c echo replace-with-client-command"
  },
  "network": {
    "egress": {
      "default": "deny"
    },
    "ingress": {
      "default": "allow",
      "hostLoopback": "deny"
    }
  },
  "runtimeConfig": {
    "networkProxy": "http://127.0.0.1:8080"
  },
  "processContainer": {
    "network": {
      "allowedProxyPeer": "<installed-package-family-name-or-appcontainer-profile-name>"
    }
  }
}
FieldValue
runtimeConfig.networkProxyHTTP/S loopback URL with an explicit port
processContainer.network.allowedProxyPeerInstalled Package Family Name or AppContainer profile name

ProcessContainer requires ingress.default: "allow" for private-network communication with an identity-scoped proxy. Windows implements this on the MXC client with the bidirectional privateNetworkClientServer capability, so the setting also permits private-network server traffic. egress.default: "deny" continues to block direct internet traffic.

Valid endpoints use localhost, 127.0.0.1, or [::1] with an explicit port. The proxy-specific network block above is required for an identity-scoped ProcessContainer proxy and is omitted for the identity-less host-loopback deployment.

The proxy must already be running and listening on the loopback address and port configured by runtimeConfig.networkProxy. See the canonical proxy deployment requirements for endpoint validation and listener binding. A packaged AppContainer proxy needs privateNetworkClientServer, internetClient for external destinations, and inbound firewall authorization.

Minimal packaged AppContainer proxy manifest

<?xml version="1.0" encoding="utf-8"?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  xmlns:desktop2="http://schemas.microsoft.com/appx/manifest/desktop/windows10/2"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap uap10 desktop2 rescap">
  <Identity Name="Contoso.AgentProxy" Publisher="CN=Contoso" Version="1.0.0.0" ProcessorArchitecture="x64" />
  <Properties>
    <DisplayName>Agent Proxy</DisplayName>
    <PublisherDisplayName>Contoso</PublisherDisplayName>
    <Logo>Assets\Logo.png</Logo>
  </Properties>
  <Resources>
    <Resource Language="en-us" />
  </Resources>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.26100.0" />
  </Dependencies>
  <Capabilities>
    <Capability Name="internetClient" />
    <Capability Name="privateNetworkClientServer" />
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
  <Extensions>
    <desktop2:Extension Category="windows.firewallRules">
      <desktop2:FirewallRules Executable="proxy.exe">
        <desktop2:Rule Direction="in" IPProtocol="TCP" Profile="all"
          LocalPortMin="8080" LocalPortMax="8080" />
      </desktop2:FirewallRules>
    </desktop2:Extension>
  </Extensions>
  <Applications>
    <Application Id="Proxy" Executable="proxy.exe"
      uap10:RuntimeBehavior="packagedClassicApp" uap10:TrustLevel="appContainer">
      <uap:VisualElements DisplayName="Agent Proxy"
        Description="HTTP proxy for contained workloads" BackgroundColor="transparent"
        Square150x150Logo="Assets\Logo.png" Square44x44Logo="Assets\Logo.png"
        AppListEntry="none" />
    </Application>
  </Applications>
</Package>

See the Microsoft Learn package manifest schema reference for package identity, signing, assets, and application metadata. runFullTrust is required by the firewall extension; TrustLevel="appContainer" still runs the proxy in an AppContainer.

The manifest example uses port 8080. The proxy developer must ensure that its inbound firewall rule covers the port supplied to MXC in runtimeConfig.networkProxy.

After installing the package, retrieve its exact Package Family Name:

Get-AppxPackage -Name Contoso.AgentProxy |
  Select-Object -ExpandProperty PackageFamilyName

Use that value verbatim for allowedProxyPeer for any packaged proxy. For an unpackaged AppContainer proxy, use its AppContainer profile name instead.

See Proxy identity and firewall authorization for Windows enforcement and firewall details.