Mask any widget
Wrap anything private in UxLensMask. It's blacked out on-device before a frame is ever encoded or uploaded.
UxLensMask(
child: Text(user.cardNumber),
)uxLens ships as a Flutter plugin: session replay, heatmaps, and on-device privacy masking for iOS and Android, in one package. Here is the whole install.
uxlens_sdkView on pub.devUnder two minutes, no backend to stand up. Here is the whole integration.
Pull the SDK from pub.dev into your Flutter project.
flutter pub add uxlens_sdkRegister an app in the dashboard to mint a key. Every app gets its own key and its own sessions.
Register an app →Start uxLens before runApp, then wrap your app so capture, masking, and upload all run automatically.
import 'package:flutter/material.dart';
import 'package:uxlens_sdk/uxlens_sdk.dart';
void main() {
UxLens.start(
config: UxLensConfig(apiKey: 'YOUR_API_KEY'),
);
runApp(
UxLensRecorder(
child: MaterialApp(
navigatorObservers: [UxLens.instance!.navigatorObserver],
home: const HomeScreen(),
),
),
);
}That's the whole install. Sessions start showing up in your dashboard the moment your app runs.
The defaults already mask passwords and payment fields. These are the knobs for everything else.
Wrap anything private in UxLensMask. It's blacked out on-device before a frame is ever encoded or uploaded.
UxLensMask(
child: Text(user.cardNumber),
)Swap WebViewWidget for UxLensWebView. Payment pages are auto-detected and suppressed, no config needed.
UxLensWebView(
controller: controller,
)Record a share of sessions to control volume. Sampled-out sessions cost nothing on-device and never upload.
UxLensConfig(
apiKey: 'YOUR_API_KEY',
sampleRate: 0.3,
)Extend the built-in keyword list with fields specific to your app. Matches are masked automatically.
UxLensConfig(
apiKey: 'YOUR_API_KEY',
sensitiveLabelKeywords: [
'account balance',
'member id',
],
)