Does Hotjar work with Flutter web?
Not usefully. Hotjar's DOM-based recordings have nothing to reconstruct and its heatmaps have nothing to anchor to, because Hotjar records the DOM and a Flutter web app exposes no DOM. At best you get a low-framerate canvas video with no element-level data.
Hotjar recordings and heatmaps are built on reading and replaying the DOM. The snippet observes DOM elements, mutations, and pointer positions relative to those elements.
The reason is how Flutter web renders. It does not draw your interface to the DOM. With the CanvasKit renderer (a WebAssembly build of Google’s Skia graphics engine, and the production default for most Flutter web apps) and the newer Skwasm renderer, Flutter paints the entire UI as pixels onto one HTML canvas element. To the browser, and to any tool that reads the DOM, your app is a single opaque rectangle. No buttons, no text nodes, nothing to attach to.
A Flutter web app exposes a single canvas instead of a DOM tree. Hotjar has nothing to anchor its heatmaps against, and its DOM replay has nothing to reconstruct. You get heatmaps that point at no UI element in particular and, at most, a low-framerate video of the canvas.
There is also a privacy catch worth flagging. DOM-based tools mask sensitive fields by selecting the elements to redact (a CSS class, a selector, an attribute). On a Flutter canvas there are no such elements, so even when one of these tools does manage a low-framerate video capture of the canvas, none of them can mask anything inside it. Every tool in this space documents that canvas content cannot be masked. Anything Flutter painted (passwords, payment details, personal data) is recorded in the clear, which is a real concern for GDPR, HIPAA, PCI, and similar obligations.
It is not a configuration problem
Teams often spend hours re-checking their Hotjar install, sure they have misconfigured something. They have not. The limitation is architectural: no DOM-based recorder, Hotjar included, can reconstruct a UI that was never expressed as DOM in the first place.
A Flutter-native alternative
Pixeltrace records the frames Flutter draws, so you get a real replay on Flutter web instead of the empty box Hotjar leaves you with. Because it starts from the canvas rather than the DOM, there's no install to second-guess and nothing to misconfigure. Recording either happens or it doesn't.
Working inside Flutter also means masking actually works on canvas: you mark sensitive widgets and Pixeltrace redacts those regions at capture time, on-device, before anything is stored. That's the privacy control Hotjar and other DOM-based tools can't apply to a Flutter canvas.
Pixeltrace isn't generally available yet. Add your email to the waitlist for launch notification.