← Chrome 152 reference

v152 · privacy sandbox · web api · deprecated

Deprecate and remove: Private Aggregation API

Deprecated — removal in progress

  • Chrome · removal filed at 152 (“Deprecated”)
  • Edge · follows Chromium
  • Firefox · never implemented
  • Safari · never implemented

Never a cross-browser feature: the API only ever shipped in Chromium, and the milestone=152 listing now files its removal under “Deprecated” (verified 2026-07-29). There is no BCD entry and no web-features entry — the compat story is documented as an interim table below.

Chrome is removing the Private Aggregation API — the Privacy Sandbox mechanism that let Shared Storage and Protected Audience worklets emit noisy, aggregate cross-site measurement reports. The API was designed for a future without third-party cookies; Chrome’s decision to keep the current third-party-cookie approach removed its reason to exist. The surface (privateAggregation.contributeToHistogram() and friends) is exposed only inside those two worklet contexts, which are themselves being removed, so no standalone API change reaches the open web.

Removal notice — do not build on this API

The Private Aggregation API is on a published deprecation path (Intent to Deprecate and Remove): deprecated from Chrome 144, with removal planned from Chrome 150 and the intervention filed at milestone 152. Server-side summary-report computation stopped operating in late December 2025. New code must not call privateAggregation; existing callers should follow the migration paths. At fetch time the JavaScript surface still exists in Chromium source (gated by a Finch-controlled feature) — removal is being executed as a staged disablement, not a single code deletion (see timeline).

at a glance

What it wasA generic mechanism for measuring aggregate, cross-site data in a privacy-preserving manner: worklet code contributed encrypted histogram buckets that a server-side aggregation service later summed with noise into “summary reports” (ChromeStatus 4683382919397376)
Where it was exposedOnly inside Shared Storage worklets and Protected Audience interest-group script runners — never on window in an ordinary document
Milestone listingChrome 152 — “Deprecated” (listing, verified 2026-07-29; the listing is authoritative for identity per gendn invariant #2)
Deprecation pathDeprecated in Chrome 144, removal planned from Chrome 150; server-side summary-report computation ended late December 2025 (ChromeStatus feature notes)
Usage at deprecation~3% of page loads — high for a removal, but driven by a small number of third-party ad-tech scripts present on many sites (feature notes)
ReplacementNone. Cross-site measurement remains possible with third-party cookies; Google states removal helps “focus efforts on the proposed interoperable Attribution standard” (intent)
SpecificationPrivate Aggregation API — Unofficial Proposal Draft, 13 May 2025; repository archived 2025-12-01
WPTNone: no private-aggregation directory exists in the WPT repository (directory listing checked 2026-07-29)
Source: chromestatus.com/feature/4683382919397376; Private Aggregation API draft

why it was removed

The Intent to Deprecate and Remove gives three reasons, verbatim in substance:

Because the API surface is only reachable from inside Shared Storage and Protected Audience worklets — both on their own removal paths (Shared Storage deprecation record, Protected Audience deprecation record) — the intent states “no additional work will be required for Private Aggregation”: its functionality is removed transitively when those host APIs go.

Source: blink-dev — Intent to Deprecate and Remove: Private Aggregation API; ChromeStatus API record

removal timeline

WhenWhat happened / is planned
2025-10-21Deprecation feature recorded on ChromeStatus (record metadata); Intent to Deprecate and Remove posted to blink-dev
Chrome 144Deprecation begins (feature notes); new enrollment sign-ups disallowed; enrolled sites contacted about timelines
Late December 2025Server-side summary-report computation stops operating. Users of that service were notified in advance and directed to debug reports until the API surface as a whole is removed. Because this affects post-facto server-side operations, it caused no user-facing breakage (feature notes)
Chrome 150Planned removal of the API surface (feature notes); the intent notes that if usage stayed too high, Protected Audience and Shared Storage could be temporarily retained with stub/no-op implementations — in which case the worklet contexts where privateAggregation exists would simply no longer be created
Chrome 152 (this listing)The intervention is filed under “Deprecated” in the milestone=152 listing (verified 2026-07-29)
Code state at fetch timeThe surface is not yet deleted from source. On the M152 branch the IDL and the kPrivateAggregationApi base feature remain, FEATURE_ENABLED_BY_DEFAULT with Finch parameters enabled_in_shared_storage / enabled_in_fledge (features.cc, M152 branch); at trunk the IDL still exists (private_aggregation.idl) while the base feature no longer appears in blink/common/features.cc (both fetched 2026-07-29). Removal is proceeding as a staged, Finch-controlled disablement rather than a single deletion
Source: ChromeStatus API record (feature notes); Intent to Deprecate and Remove; Chromium branch-heads 7924 and trunk, fetched 2026-07-29

the removed surface

The whole developer-facing surface was one interface exposed on two worklet global scopes, plus the reporting pipeline it fed. The normative IDL from the final published draft (§ the exposed interface), verbatim:

[Exposed=(InterestGroupScriptRunnerGlobalScope,SharedStorageWorklet),
 SecureContext]
interface PrivateAggregation {
  undefined contributeToHistogram(PAHistogramContribution contribution);
  undefined contributeToHistogramOnEvent(DOMString event,
                                         record<DOMString, any> contribution);
  undefined enableDebugMode(optional PADebugModeOptions options = {});
};

dictionary PAHistogramContribution {
  required bigint bucket;
  required long value;
  bigint filteringId = 0;
};

dictionary PADebugModeOptions {
  required bigint debugKey;
};
Surface itemDocumented at
PrivateAggregation interface (the worklet-global object)privateaggregation-interface/ reference
contributeToHistogram(contribution)method contract
contributeToHistogramOnEvent(event, contribution)method contract
enableDebugMode(options)method contract
PAHistogramContribution / PADebugModeOptions dictionariesdictionary contracts
Aggregatable report pipeline (.well-known endpoints, server-side aggregation)aggregatable-reports/ reference
Source: Private Aggregation API draft — exposed interface; Chromium IDL, M149 branch

what calling code sees now

Because privateAggregation was only ever exposed inside Shared Storage and Protected Audience worklets, ordinary page JavaScript cannot touch it directly — and the intent states the contexts that expose it “would still no longer be created” even in the stub-retention contingency. Inside a worklet, the removal sequence is:

  1. Disablement (current staged step): with the Finch-controlled feature off, the worklet global no longer exposes privateAggregation — reading it yields undefined, and calling privateAggregation.contributeToHistogram(...) throws a TypeError (Cannot read properties of undefined). Contributions silently stop flowing; no reports are generated.
  2. Host-API removal (end state): when Shared Storage and Protected Audience are themselves removed, the worklets never run at all, so the question becomes moot — see the host deprecations (Shared Storage, Protected Audience).

Defensive guard for worklet code that must survive the transition (the pattern the spec’s own callers were advised to use):

// Inside a Shared Storage or Protected Audience worklet:
if (typeof privateAggregation !== "undefined") {
  privateAggregation.contributeToHistogram({ bucket: 1n, value: 128 });
}
// After disablement/removal this is a silent no-op instead of a TypeError.
Source: Intent to Deprecate and Remove — “Possible breakage”; draft — exposed interface

migration paths

SituationPath
Cross-site reach / conversion measurementThird-party cookies remain available in Chrome — the stated rationale for the removal is precisely that cross-site measurement “will remain possible in Chrome using third-party cookies” (intent — Motivation)
Aggregate reporting already collectedServer-side summary-report computation ended late December 2025; affected users were told to switch to debug reports until the API surface as a whole is removed (feature notes). Debug reports were unencrypted, immediate reports enabled via enableDebugMode()
Private measurement going forwardNo in-browser replacement exists. The intent says removal “will help focus efforts on the proposed interoperable Attribution standard” — a future standards-track effort, not a drop-in API; track it via the Privacy Sandbox status page. Chrome’s separate Attribution Reporting API is itself being deprecated and removed under the same consolidation
Enrollment / operationsNew enrollment sign-ups were disallowed once the intent was approved; enrolled sites were contacted with deprecation timelines (feature notes)
Source: Intent to Deprecate and Remove; ChromeStatus API record

reporting pipeline sunset

Contributions made in a worklet were encrypted into an aggregatable report and sent by the browser to a fixed endpoint on the reporting origin — .well-known/private-aggregation/report-<api>, with the aggregation service’s public keys fetched from .well-known/aggregation-service/v1/public-keys (draft — report scheduling). The full pipeline is documented on the aggregatable-reports/ child page, including which stage ended when:

Source: Private Aggregation API draft; ChromeStatus feature notes

examples

Historical usage (from the pre-removal developer flow): a Shared Storage worklet recording a conversion bucket after reading cross-site data:

// Inside a Shared Storage worklet operation (REMOVED API — do not use):
class MeasureConversion {
  async run(data) {
    // bucket: a 128-bit id; value: a contribution amount
    privateAggregation.contributeToHistogram({ bucket: 543n, value: 1 });
  }
}
register("measure-conversion", MeasureConversion);
Live example from the Chrome Platform Showcase (route HEAD-checked 200, 2026-07-29).Source: chrome-platform-showcase
Source: usage pattern per the Private Aggregation API draft; endpoint constants per the draft’s report-scheduling algorithm

browser compatibility

Interim table. There is no BCD entry for PrivateAggregation (BCD api/ directory has no PrivateAggregation.json, checked 2026-07-29) and a webstatus.dev query returns zero features. Rows below are compiled from the linked primary sources, not from BCD.

BrowserSupportEvidence
ChromeShipped (Shared Storage / Protected Audience worklets), deprecated from 144, removal filed at 152milestone=152 listing (“Deprecated”); feature notes
EdgeFollows ChromiumChromium-based; no separate position on record
FirefoxNever implementedmozilla/standards-positions #805 — closed, “proposal appears stale”
SafariNever implementedWebKit/standards-positions #189 — closed, “proposal withdrawn”
Source: chromestatus.com/feature/4683382919397376; vendor position records as linked per row

security and privacy

Source: Private Aggregation API draft; ChromeStatus feature notes

specifications

DocumentStatus
Private Aggregation API — Unofficial Proposal Draft, 13 May 2025 (editor: Alexander Turner, Google)Final published draft; never on a W3C Recommendation track
patcg-individual-drafts/private-aggregation-apiSpecification repository — archived, last push 2025-12-01
WICG/private-aggregation (former location)Deleted — the earlier WICG repo and its wicg.github.io/private-aggregation rendering both return 404 (checked 2026-07-29); no public archive link is recorded in the remaining sources, and gendn does not imply one exists
Privacy Sandbox feature statusGoogle’s tracker for the wider Sandbox wind-down referenced by the intent
Source: repository and rendering URLs fetched 2026-07-29

see also