DataDog, Sentry and Highlight use rrweb quite heavily in their tools to give you an idea of where things went wrong. I haven’t compared it to other session replay tools recently unfortunately, but when I was comparing it to the others a number of years ago rrweb had broadest compatibility with most permissive license.
Maintainer of rrweb here: media playback was added a little while ago and was recently improved quite a lot. Canvas recording is also available but there are three different ways of doing that as all three have their own pros/cons.
Maintainer of rrweb here. I used replay.io for debugging sometimes, it’s really quite useful. It is however a standalone browser and it works by intercepting quite low level browser calls which is only possible to do with a forked version of a browser. So it’s great for debugging if you know what you’d like to reproduce or deep-dive into. rrweb is more versatile as it can run in any browser and you could use it for analytics, live streaming for support, or recording tutorial videos like we do at https://recordonce.com
Core team member of rrweb here. rrweb and other tools that do user session recording heavily depend on the mutation observer https://developer.mozilla.org/en-US/docs/Web/API/MutationObs... to surface changes to a webpage, each of those changes gets serialized into a JSON event and get captured for later viewing.
Apart from the things we can get directly from the Mutation Observer we also end up monkey patching things like the https://developer.mozilla.org/en-US/docs/Web/API/WebGLRender... and record each call that is done to it so that we can play those back in the same order for replay.
Before we do all of the diff recording we start with a full snapshot of the webpage which captures every dom node. And it does a lot more than just your plain old `document.documentElement.outerHTML`, it captures contents of style sheets, images, scroll positions etc.. We use those full snapshots as keyframes to base our diffs off of. This works in a similar way to how video files work, but the snapshots don't contain any pixel data, just DOM information.
On replay we go ahead and rebuild the DOM as close to how it was recorded and we then animate the changes as they occurred.
Let me know if you'd like some more detail on a specific part of any of this.
Very interesting! I was thinking of using this to record test execution instead of recording mp4 videos – like Cypress does. Is there a reason rrweb would be a poor choice of this use case? Mostly trying to understand why Cypress is not doing this already.
Only downside I can think of is if the assets (images, fonts etc) that are being linked to change at a later date, your replay might look odd. There are ways to cache these so it’s not the end of the world. Big upside is being able to inspect your DOM and easily reproduce exactly what broke