July Updates v1.8: Dark & Light Themes and Richer Overview Statistics
rtcStats v1.8: Dark and Light themes, a redesigned Overview with min/max, P95 and standard deviation, and Streams timelines anchored to call start.
Posted by
Related reading
June Updates v1.7: Client Insights, a Dedicated API Host & Smoother Onboarding
rtcStats v1.7: a client-focused Devices page with summary widgets, a dedicated api.rtcstats.com host with an observations catalog, and smoother onboarding.
June Updates v1.6.0: Analysis Page Revamp, Rich API Filters & PC Security
Version 1.6.0 revamps the Analysis page with new stat cards and filters, brings rich filters to the public API and MCP, and adds deeper peer connection security visibility.
May Updates v1.5.0: Geolocation, Website Revamp & New Observations
Version 1.5.0 brings server geolocation in connectivity diagrams (rtcstats), a refreshed website with Open Source and Resources pages, and new observations.

Welcome to v1.8.0 of rtcStats! This release is all about a more comfortable and more precise reading experience: pick the Dark or Light theme that suits you, read every Overview metric with its full statistical spread, and follow your Streams and Data channels on a timeline anchored to the moment the call started.
Same data, easier on the eyes and sharper on the details. 🌗
🚀 Major Improvements
> Dark & Light Themes, Your Way 🌗
rtcStats now ships with full Dark and Light themes across the dashboard, the session viewer, the admin pages and the marketing site. A single toggle switches the whole product, and your choice is remembered per user, so you land in your preferred look every time you sign in.
Whether you like a bright, high-contrast dashboard during the day or an easy-on-the-eyes dark viewer at night, every chart, widget and table adapts to match.
Dark theme across the session viewer Overview
> A Richer Overview: Min, Max, P95 & Standard Deviation 📊
The media aggregated statistics in the Overview got a full redesign. Each metric now shows a compact min-to-max range track with a green-to-amber-to-red quality gradient and a dot placed at the average, all on a per-metric linear scale, so you can read the spread of a value at a glance instead of a single number.
Hover the range band or the average dot and a popup opens with a hero Average (and its standard deviation) above a Min, Max, P5 and P95 grid. It turns a flat average into the full distribution behind it, which is exactly what you need to tell a steady stream from a bumpy one.
Overview stat card with the statistics popup showing average, standard deviation and the min, max, P5 and P95 grid
> Streams & Data Channels, Anchored to Call Start ⏱️
The Streams and Data channels timelines now share a common call-start origin. The Timeline column is aligned across both tables, with a header flag and a per-row tick that marks the moment the call started, so you can read when each stream and channel began against the same reference point.
Hover any timeline and the tooltip shows the offset from call start, making it easy to spot a track that joined late or a channel that opened well into the session.
Streams and data channels tables with their Timeline columns anchored to call start, showing the flag header and per-row range bars
🛠️ Other Enhancements
> Smarter Time Units for Jitter & RTT ⏲️
Jitter and RTT now use tiered units on the Overview cards and the session summary: values are grouped in ms below 10 seconds, shown in seconds with one decimal up to 60 seconds, and rounded to whole minutes above that. Long stalls read naturally instead of turning into unwieldy millisecond counts.
> Public Page Polish 🎨
We gave the pricing page and other public pages a light cosmetic refresh for a more consistent, polished look.
🐞 Bug Fixes
> Fixes 🐞
- MOS forced to 0 on unusable transport: MOS is now forced to 0 on measurement points where RTT reaches 15 seconds or more, so a stream that is affected throughout correctly reports an average MOS of 0.
- Accurate "No audio samples played out" percentage: the observation percentage is now computed only over samples where packets were received, instead of being diluted by idle samples.
- No more chart flicker: the Clients and OS mini charts no longer replay their bar animation while the sessions list settles after loading.
📦 Ecosystem Updates
> API & MCP (breaking changes) 🚧
- Self-describing
aggregatedStatskeys. TheaggregatedStatspayload now also exposes P5, P95 and standard deviation for every metric (bitrate, RTT, jitter, packet loss and MOS), and every key has been renamed to a self-describing<metric>_<scope>_<agg>_<unit>form, for examplertt_out_audio_avg_msorin_audio_count. This is a breaking change forGET /sessionsandget_sessionconsumers over both REST and MCP: the old unitless keys are removed, so update your integrations to the new names. The AI summary now receives only these unit-suffixed keys as well, so it no longer has to guess which unit a value is in. - Rejected files return
415instead of500. When a file is rejected as invalid or too old, the public API (POST /uploadandPOST /analyze) and the dashboard upload now return a415status instead of a500, keeping the exact same error messages anderrorCode. A500is now reserved for genuinely unexpected errors, so a rejected file is easy to tell apart from a real server problem. - Missing dump files return
404instead of500. Downloading a session whose dump file is missing from storage now returns a404instead of a500, so a missing file no longer looks like a server fault.
> @rtcstats/rtcstats-js v2.2.4 → v2.3.0 📡
- React Native compatibility: the SDK now uses
globalThisinstead ofwindowand no longer assumeswindow.screenis set, so it traces cleanly insidereact-native-webrtcapps. - It stops polling
getStatsunderreact-native-webrtc, avoiding errors where that polling is not supported the same way. - Tracing is verified against Chrome 150+, so instrumentation keeps working on the newest Chrome.
> rtcstats-server 🛠️
Only two user-facing changes landed on main in this window:
- The server now streams the dump straight to rtcstats.com instead of buffering it in memory, cutting memory use on large uploads.
- It responds with
404when a client uploads to the wrong path, making a misconfigured integration easier to spot.
We're excited to see how you use the new Dark and Light themes and the richer Overview statistics, with their min, max, P95 and standard deviation, to read your WebRTC sessions faster! As always, the latest version of rtcstats-js is available - make sure you're up to date to get the best out of these new features.
Happy debugging! 💎