v151 · performance · reporting api
Journey recorder
The proposal asks the browser to record the same journey a page can capture today with PerformanceObserver — so this page does exactly that, live, and then assembles the explainer's application/reports+json payload from the entries it really observed and POSTs it to the real reporting endpoint.
Everything below runs the shipped APIs:
PerformanceObserver with navigation, mark, measure, and visibility-state entry types, and a real POST to this site's Reporting-API-shaped endpoint. Only the final session-end entry is synthesized — it is the one entry today's JavaScript can never truly record for itself, which is the proposal's point. Switch tabs or minimise the window to watch real visibility-state entries arrive.Live journey
Starting observers…
Consolidated report
Built from the entries above in the explainer's report format, with a synthesized session-end entry appended (clearly labelled — the browser cannot produce it today):
Not delivered yet.
code path
const po = new PerformanceObserver((list) => render(list.getEntries()));
po.observe({ type: 'mark', buffered: true });
po.observe({ type: 'measure', buffered: true });
po.observe({ type: 'navigation', buffered: true });
po.observe({ type: 'visibility-state', buffered: true }); // Chrome 129+
// the explainer's delivery format (application/reports+json)
[{ type: 'performance-observer', age, url, user_agent,
body: { entries: [ PerformanceNavigationTiming, PerformanceMark, …,
{ entryType: 'session-end', … } ] } }]