Harry Roberts has released LUX Sidecar, a small independent plugin that complements SpeedCurve's LUX RUM agent by adding browser and navigation context to real-user monitoring data. It captures network conditions, cache state, protocol, compression ratio, service worker involvement, and a new metric called Unattributed Navigation Overhead (UNO), sending them via LUX's addData() API. The tool requires an existing SpeedCurve account and standard LUX snippet, is zero-config on the script side but requires manual setup of custom metrics and dimensions in SpeedCurve's dashboard. It is distinct from the author's earlier Obs.js project, which adapts page behavior to context rather than reporting it for analysis.

10m read timeFrom csswizardry.com
Post cover image
Table of contents
Performance Data Needs ContextDimensions Explain MetricsA Few Measurements Worth KnowingHow LUX Sidecar Relates to Obs.jsThe Script Is Zero-Config; SpeedCurve Isn’tSmall, Independent, and Deliberately UneventfulFrequently Asked Questions

Questions this post answers

What is Unattributed Navigation Overhead (UNO) in web performance monitoring?

Unattributed Navigation Overhead is the portion of initial-document Time to First Byte that remains after subtracting the redirect, DNS, connection, and request-to-response-start phases exposed by Navigation Timing. Coined by Tim Vereecke, it is a residual measurement, not a diagnosis: a high UNO value means the browser observed time it couldn't assign to those named phases, often due to cross-origin redirect latency, but requires further investigation to find the cause. Track down navigation timing mysteries by comparing real-user monitoring approaches and tools on daily.dev.

What is the difference between LUX Sidecar and Obs.js?

LUX Sidecar sends browser-derived performance context to SpeedCurve so teams can chart, filter, and segment real-user monitoring data after the fact, while Obs.js turns browser context into CSS classes and a window.obs object so a page can adapt its experience in real time, such as avoiding rich media on constrained connections. Both read overlapping browser signals like round-trip time and downlink, but neither replaces the other. Compare tools for reactive performance adaptation versus RUM analysis on daily.dev before picking one for a project.

Do I need a SpeedCurve account to use the LUX Sidecar plugin?

Yes, a SpeedCurve RUM account and the standard LUX snippet are required, since LUX Sidecar is a third-party plugin that sends additional data through the LUX.addData() API rather than a standalone analytics product. The script itself is zero-config, but custom metrics and dimensions still need to be created manually in SpeedCurve Settings using Sidecar's compact beacon keys as variable names. Follow setup requirements for RUM plugins like this one when evaluating performance tooling on daily.dev.

5.3K Impressions