Features

Everything you need to see what really happened.

Session replay built for Flutter specifically, plus the reliability and behaviour signals every team reaches for once they have replay in hand.

Capture

What gets recorded, and what stays on the device.

One call covers your whole app, every screen of it — with masking on from the very first frame.

Full-fidelity session replay

Your whole app is captured and plays back exactly as it looked — a session weighs kilobytes and stays sharp at any zoom.

Masking by default

A placeholder block is the only shape text can ever take. Images stay blocks until you opt one in, and ExcludeFromRecording keeps any subtree to itself while its layout still replays.

Real-asset fidelity

Upload your app's own image assets once so replays resolve the real bundled images instead of placeholder shapes.

Sub-sessions and tagging

A single user session can upload in multiple segments, with custom tags marking the moments that matter so you can find them later.

Signals

The four things that go wrong, each linked to its frame.

Every signal below is a first-class row you can filter, group and alert on — and every one opens the replay at the exact moment it happened.

Exception capture

Caught and uncaught Flutter errors, grouped by type and message so one bug is one row. Carries the stack, platform, app version and user.

Frozen-frame detection

Measured from the engine's own frame timings, with build and raster split out, so you know whether to look at your widget tree or your painting.

Rage, dead and error taps

The frustration signals FullStory and Clarity popularised, detected straight from the recorded pointer stream — the SDK you already have is all it takes.

Network request capture

Opt in via PictoHttpClient to record requests alongside the frames, so the call and the screen it landed on sit together on one timeline.

Workspace

Somewhere for a team to actually work.

Organizations, scoped keys, teammates, and alerts that come to you so the dashboard is somewhere you go by choice.

Orgs, apps and scoped API keys

Sessions are organised by organization and client app, each with its own key you can regenerate independently.

Collaborators and ownership

Invite teammates by email — an invite is all they need to get started — rename an organization, or hand it over entirely.

Threshold alerts

Any signal crossing a threshold in a rolling window posts to Slack or any JSON endpoint, and optionally emails an on-call address.

Shareable session links

Copy a link to any session — or to the exact millisecond inside it — and hand it to a teammate. They land on that frame, already playing, instead of on a list with instructions for finding it.

Attribute sessions to a user

Call Picto.identify to tag a session with your own user id, then filter every list by it when someone reports a problem.

Roadmap

Being built next.

Kept in its own section on purpose — everything above this line ships today.

AI pattern analysis

Coming soon

Summarise behaviour patterns and friction points across many sessions at once, rather than one replay at a time.

Record your first session in about two minutes.

One package, one init call, and recording begins the moment you ask for it.