Known limitations

Better to know these before you deploy than after.

Not recorded

  • Contents of iframes.
  • Contents of canvas elements.
  • Closed shadow roots.

Depends on your site

  • Images, fonts and cross-origin stylesheets without CORS are loaded from your site when a replay plays. If they change or disappear, the replay changes with them.
  • Public pages cannot send recordings to local addresses such as 127.0.0.1, because Chrome blocks it. Deploy the collector on a public domain.

Single-page apps

  • Client-side route changes (history.pushState) are recorded and replayed like any other change to the page, but the URL is only read on full page loads. The session list, the address bar in the player and searches by page only see pages that were loaded in full.

Performance

  • Seeking backwards in a long single-page app replays every change since the page loaded, which slows down when there are very many changes.
  • Every upload is one object, so a very long session has hundreds of parts. The browser downloads them six at a time, so the first open takes a moment.

Counting

  • Counters are exact, but a rage-click burst split across the final uploads sent when the page closes can be missed in the session list, since those go out in parallel. The replay page recomputes everything from the recording, so it is still shown there.

Not built yet

  • Heatmaps.
  • Recording only when an error happens.
  • Multiple users, roles and single sign-on.
  • Automatic retention limits.

If one of these blocks you, say so in an issue. It helps decide what comes next.