FullStory + Flutter

FullStory and Flutter web

On standard web, FullStory is a strong digital-experience and session-replay platform. On Flutter web it hits the canvas-rendering wall. Here's what to expect and what to do about it.

By Pixeltrace · Updated

Does FullStory session replay work on Flutter web?

Not in a usable way. FullStory captures a structured representation of the DOM, and a Flutter web app has no element structure to capture, so its DOM-based replay, search, and frustration signals have nothing to work with.

FullStory's structured DOM capture is what powers its replay, search, and frustration signals, and what makes FullStory so searchable on normal sites.

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.

On Flutter web there is no element structure to capture. The DOM-keyed replay cannot reconstruct the interface, and features like element search have nothing to index. A raw canvas-video fallback, where available, comes at a very low frame rate because each frame has to be read back from the GPU.

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.

Native FullStory SDKs vs. Flutter web

FullStory does offer native mobile capture for iOS and Android. That is a different path. Native capture instruments the platform views, whereas Flutter web is a single canvas in a browser. If your target is the web build of a Flutter app, the canvas limitation applies.

A Flutter-web-native alternative

Pixeltrace records the frames Flutter renders on the web, giving you a real visual replay of canvas-rendered Flutter apps. Pair it with your existing analytics stack for the "what did the user see" view.

It also restores the privacy controls you lose on canvas: mark sensitive widgets in your Flutter tree and Pixeltrace redacts those regions at capture time, on-device, so personal data never reaches the recording. That's masking on canvas, which FullStory's DOM-based redaction can't reach.

Pixeltrace is in development. Join the waitlist to hear about availability.

See what your users do in Flutter

Pixeltrace records the frames your Flutter web app paints, so replay works on canvas. It's not generally available yet, so leave your email and we'll tell you the moment it launches.

Help us prioritize (optional)

You'll get one email when Pixeltrace is available. If you want to hear more from us, you'll sign up for that separately (later).

Frequently asked questions

Why is FullStory session replay blank on Flutter web?
FullStory builds replay from a structured DOM capture, but Flutter web paints everything to a canvas with no DOM structure. Without elements to capture, the DOM-based replay cannot reconstruct the UI; any canvas-video fallback is low-framerate and cannot mask sensitive content.
Does FullStory work for Flutter mobile?
FullStory has native iOS/Android capture, which is separate from Flutter web. The canvas limitation specifically affects the web build of Flutter apps; for Flutter web visual replay, a canvas-native tool like Pixeltrace is needed.

Related

← Back to Pixeltrace home