SDK Feature Catalog

Compare the current Ansight SDK runtime, enrollment, capture, tooling, framework, and build-safety features across .NET, Android, iOS, React Native, Flutter, and Cordova/Capacitor.

This catalog reflects the application-facing features implemented in Ansight SDK 1.3.0-preview.10. Use it to choose a platform and package, then follow the linked platform guide for setup and exact API names.

Legend:

  • Yes: first-class implementation in that SDK.
  • Native: the cross-platform adapter exposes the feature through its Android or iOS bridge.
  • Framework: supplied by the named framework integration.
  • Conditional: available only when the app opts in or the host/device supports it.
  • No: not implemented for that SDK.

Runtime and Enrollment

Capability.NET / MAUIAndroidiOSReact Native / ExpoFlutterCordova / Capacitor
Initialize, activate, deactivate, and clear the runtimeYesYesYesNativeNativeNative
Custom metric channels and metric/event captureYesYesYesNativeNativeNative
Periodically sampled app metric streamsRuntime.Metric(...)AnsightMetricStreamAnsightMetricStreamNo JavaScript sampler APINo Dart sampler APINo JavaScript sampler API
FPS, memory, and battery samplingYesYesYesNative, plus React Native JS heap channelsNative, plus Flutter frame channelsNative
Open-file-handle sampling, opt-inYes where supportedYesYesNativeNativeNative
JNI-reference-count sampling, opt-inAndroid targetYesNoAndroid nativeAndroid nativeAndroid native
Screen-view and app-lifecycle eventsYes; automatic in Ansight.MauiYesYes; automatic UIKit captureNative plus AppState and React Navigation helpersFlutter observer and Navigator helperDocument visibility and History API helper
Retained metric/event readback and debug snapshotsYesYesYesNativeNativeNative
Device and app profile reportingYesYesYesNativeNativeNative
Live telemetry, event, touch, screenshot, and control streamingYesYesYesNativeNativeNative
App-provided live-session logsYesYesYesNativeNativeNative
HTTP request metadata captureOpt-in AnsightHttpMessageHandlerNo V1 interceptorNo V1 interceptorNo V1 interceptorNo V1 interceptorNo V1 interceptor
Durable native crash capture and next-launch deliveryYesYesYesNativeNativeNative
Framework crash candidates.NET exceptionsNative candidatesNative candidatesJavaScript errors and manual candidatesDart errors and manual candidatesJavaScript errors and manual candidates
Grouped session properties and live mutationsYesYesYesNativeNativeNative
One-use CLI host QR enrollmentYesYesYesNativeNativeNative
Stable app-installation IDYesYesYesNativeNativeNative
Local UDP ENROLLMENT_CONNECT handshakeYesYesYesNativeNativeNative
Ephemeral WebSocket endpoint and session tokenYesYesYesNativeNativeNative
Automatic enrolled reconnectYesYesYesNativeNativeNative
Remembered-host retry / host auto-probeYesYesYesNativeNativeNative
Explicit enrollment-payload connectionYesYesYesYesYesYes
Cellular host connections, explicit opt-inYesYesYesYesYesYes
Unattended launch provisioning, explicit opt-inAndroid/iOS native bridgeYesYesNo wrapper APINo wrapper APINo wrapper API
SDK enrollment UI or QR entry pointAndroid/iOS UI through Ansight.PairingQR scanner and enrollment sheetUIKit file import and QR scannerJavaScript API backed by the native bridgeDart API backed by the native bridgeJavaScript API backed by the native bridge
Connection status, capabilities, and change listenersYesYesYesNativeDart streamJavaScript listener
SDK diagnostic log callbacksYesYesYesNative listenerDart streamJavaScript listener

Shared enrollment model

  1. The resident CLI host displays a short-lived, one-use QR invite from ansight pairing issue --qr.
  2. The SDK scans it and sends ENROLLMENT_CONNECT over local UDP.
  3. The host binds the invite to the SDK’s reported App ID and random app-installation ID. No prior app registration is required.
  4. The host returns an ephemeral ws:// endpoint and session token.
  5. The enrolled installation saves the returned state and reconnects on later launches.

Simulator, emulator, Mac Catalyst, and desktop targets use automatic loopback registration and skip the QR flow entirely.

Clearing app data or reinstalling creates a new installation ID and requires a fresh scan. Enrollment does not authorize remote tools: the app’s tool guard remains a separate policy boundary.

Capture and Diagnostics

Capability.NET / MAUIAndroidiOSReact Native / ExpoFlutterCordova / Capacitor
Periodic live JPEG captureYesYesYesNativeNativeNative
Screenshot-aligned visual-tree captureYesYesYesNative plus registered framework sourcesNative plus Flutter sourceNative plus DOM source
Touch-triggered visual-tree captureYesYesYesNative plus registered framework sourcesNative plus Flutter sourceNative plus DOM source
Keyboard-presence replay metadata, opt-inYesYesYesNativeNativeNative
On-demand screenshot through ui.get_screenshotYesYesYesNativeNativeNative
GPU-backed surface capture optionAccepted for parityAccepted for parityYesNative; meaningful on iOSNative; meaningful on iOSNative; meaningful on iOS
Host-owned simulator or emulator screenshotsYesYesYesNativeNativeNative
Touch capture and runtime enable/disableYesYesYesNativeNativeNative
Touch-capture app guardYesYesYesNative toggle; JavaScript policy is app-ownedNative toggle; Dart policy is app-ownedNative toggle; JavaScript policy is app-owned
Native visual-tree providerYesYesYesNativeNative plus Flutter sourceNative
Framework visual-tree sourceMAUISeparate react.* toolsFlutter source plus flutter.* toolsSeparate dom.* tools

Current runtimes advertise screenshot-control version 1 in device.profile. The CLI host can select host capture mode for a simulator or emulator; the SDK then suspends its periodic in-app JPEG loop while the host uses a platform source such as simctl or adb. Without a host-capture response, the configured SDK JPEG capture continues.

Screen capture adds rendering, encoding, and transport work. Disable periodic capture for performance-focused measurements unless visual evidence is required.

Remote Tools and Extensibility

All remote tools use the shared tool.query and tool.call protocol and are subject to the configured tool guard. Read-only, read/write, and full-access guards progressively expose Read, Write, and Delete scopes.

Suite or extension.NET / MAUIAndroidiOSReact Native / ExpoFlutterCordova / Capacitor
Custom tool registration and schemasYesYesYesJavaScript and nativeDartJavaScript
Dynamic tool availability and remediationYesYesYesNative; JavaScript tools are available while registeredNative; Dart tools are available while registeredNative; JavaScript tools are available while registered
Runtime feature package initializationIRuntimeFeatureNoNoNoNoNo
App artifact providers and binary exportYesYesYesJavaScript provider with native binary transportDart provider with native binary transportJavaScript provider with native binary transport
Visual tree, screenshot, inspection, and overlays (ui.*)YesYesYesNativeNative plus Flutter sourceNative
Compact visual-tree v2 contract (types / typeId, semantics, presentation)YesYesYesNative plus React sourcesNative plus Flutter sourceNative plus DOM source
Sandboxed files and binary download (files.*)YesYesYesNativeNativeNative
File-descriptor diagnostics (file_descriptors.*)NoYesYesNative aggregate defaultsNative aggregate defaultsNative aggregate defaults
JNI reference graph (jni_references.capture_graph)Android targetYesNoAndroid native aggregate defaultsAndroid native aggregate defaultsAndroid native aggregate defaults
Preferences (prefs.*)YesYesYesNativeNativeNative
Secure storage (secure.*)YesYesYesNativeNativeNative
SQLite discovery, schema, and read query (data.*)YesYesYesNativeNativeNative
Registered-root reflection (reflect.*)YesYesYesNativeNativeNative
.NET MAUI inspection and mutation (maui.*)FrameworkNoNoNoNoNo
React component/shadow tree and actions (react.*)NoNoNoFrameworkNoNo
Flutter widget tree, search, and navigation (flutter.*)NoNoNoNoFrameworkNo
WebView DOM tree, query, and guarded actions (dom.*)NoNoNoNoNoFramework

App artifact providers advertise dynamically available exports through artifacts.query and create a requested snapshot through artifacts.request. Requested bytes use the live binary file-transfer channel, so artifact creation requires an active host session.

Shared tool IDs

SuiteTool IDs
App artifactsartifacts.query, artifacts.request
Visual treeui.get_visual_tree, ui.get_screenshot, ui.inspect_node, ui.show_overlay, ui.get_overlay, ui.query_overlays, ui.update_overlay, ui.remove_overlay, ui.clear_overlays
Filesfiles.list_directory, files.read_file, files.get_file_checksum, files.download_file, files.begin_binary_download, files.push_file, files.copy_file, files.move_file, files.delete_file
File descriptorsfile_descriptors.list_open, file_descriptors.count_open, file_descriptors.inspect, file_descriptors.get_usage
JNI reference diagnosticsjni_references.capture_graph
Preferencesprefs.list_keys, prefs.get_value, prefs.set_value, prefs.remove_key
Secure storagesecure.get_value, secure.set_value, secure.remove_key
Databasedata.list_databases, data.describe_schema, data.query
Reflectionreflect.list_roots, reflect.inspect_object, reflect.describe_type, reflect.set_member_value, reflect.invoke_method
.NET MAUImaui.get_current_page, maui.get_visual_tree, maui.find_elements, maui.get_element, maui.get_bindable_property, maui.set_bindable_property, maui.clear_bindable_property, maui.inflate_xaml, maui.add_element, maui.remove_element, maui.set_app_theme, maui.get_binding_context, maui.get_bindings, maui.get_resource_state, maui.get_navigation_state, maui.invoke_element_action, maui.wait_for_ui, maui.get_layout_diagnostics, maui.get_handler_diagnostics, maui.invoke_binding_context_command, maui.set_binding_context_property
React Nativereact.get_component_tree, react.get_shadow_tree, react.find_components, react.get_component, react.get_navigation_state, react.invoke_component_action
Flutterflutter.get_widget_tree, flutter.inspect_widget, flutter.find_widgets, flutter.get_navigation_state
Cordova / Capacitor DOMdom.get_document, dom.inspect_node, dom.query_selector, optional dom.invoke_action

The file-descriptor suite is native-only. There is no Ansight.Tools.FileDescriptorDiagnostics NuGet package. Cross-platform bridges receive the suite through native aggregate defaults but do not expose suite-specific framework options.

JNI reference diagnostics is Android-only. Native Android can configure the graph maxima; .NET Android registers it through Ansight.Core. React Native, Flutter, and Cordova/Capacitor inherit it from Android all-in-one defaults without suite-specific JavaScript or Dart configuration. HPROF capture briefly pauses the app and is intended for explicit development investigations.

Framework and Workflow Features

FeatureAvailabilityPackage or entry point
.NET all-in-one developer defaults and native tools.NETAnsight / WithAnsightSdk(...)
MAUI bootstrap, automatic lifecycle, and page-view telemetry.NET MAUIAnsight.Maui / UseAnsight<App>()
MAUI inspection, XAML inflation, mutation, resources, bindings, navigation, layout, and handler diagnostics.NET MAUIAnsight.Tools.Maui
Annotated in-app feedback with screenshots, visual trees, hooks, artifacts, outbox, and live/offline delivery.NET Android, iOS, and Mac Catalyst Debug app buildsAnsight.Annotations
Offline telemetry, events, touches, screenshots, annotation bundles, retention, ZIP/AES export, and team upload.NETAnsight.OfflineCapture
Objective-C facadeiOSAnsightObjC
React component and shadow-tree inspectionReact NativeinstallReactTools(...)
React Navigation route trackingReact NativecreateReactNavigationTracker(...)
Unhandled JavaScript error and rejection captureReact NativeinstallErrorHandlers(...)
Flutter widget/render-object inspection and navigation stateFlutterAnsightFlutterInstrumentation.install()
Flutter frame build, raster, total, and count channelsFlutterAnsightFlutterInstrumentation.install()
WebView DOM inspection and optional guarded actionsCordova / Capacitor.withDomTools(...)
History API route tracking and JavaScript error captureCordova / CapacitorcreateRouteTracker(...) and .withErrorCapture()

Ansight and Ansight.Maui reference the annotation and offline-capture packages, but neither workflow starts automatically. Annotated feedback must be explicitly enabled and is hard-disabled in Release application builds. Offline capture starts only after the app configures and initializes an OfflineCaptureController.

Package Map

Capability.NETAndroidiOSReact Native / ExpoFlutterCordova / Capacitor
Core runtimeAnsight.Coreai.ansight:ansight-core-androidAnsightCoreNative dependencyNative dependencyNative dependency
All-in-one runtimeAnsightai.ansight:ansight-androidAnsight@ansight/react-nativeansight_flutter@ansight/capacitor
Enrollment UIAnsight.Pairingai.ansight:ansight-pairing-androidAnsightPairingQRNative enrollment bridgeNative enrollment bridgeNative enrollment bridge
Visual tree toolsAnsight.Tools.VisualTreeai.ansight:ansight-tools-visualtree-androidAnsightToolsVisualTreeNative plus React toolsNative plus Flutter toolsNative plus DOM tools
File toolsAnsight.Tools.FileSystemai.ansight:ansight-tools-filesystem-androidAnsightToolsFileSystemNative bridgeNative bridgeNative bridge
File-descriptor diagnosticsai.ansight:ansight-tools-filedescriptordiagnostics-androidAnsightToolsFileDescriptorDiagnosticsNative aggregate defaultsNative aggregate defaultsNative aggregate defaults
JNI reference diagnosticsAnsight.Core on Androidai.ansight:ansight-tools-jnireferencediagnostics-androidAndroid native aggregate defaultsAndroid native aggregate defaultsAndroid native aggregate defaults
Preferences toolsAnsight.Tools.Preferencesai.ansight:ansight-tools-preferences-androidAnsightToolsPreferencesNative bridgeNative bridgeNative bridge
Secure-storage toolsAnsight.Tools.SecureStorageai.ansight:ansight-tools-securestorage-androidAnsightToolsSecureStorageNative bridgeNative bridgeNative bridge
Database toolsAnsight.Tools.Databaseai.ansight:ansight-tools-database-androidAnsightToolsDatabaseNative bridgeNative bridgeNative bridge
Reflection toolsAnsight.Tools.Reflectionai.ansight:ansight-tools-reflection-androidAnsightToolsReflectionNative bridgeNative bridgeNative bridge
MAUI integration and toolsAnsight.Maui, Ansight.Tools.Maui
Annotated feedbackAnsight.Annotations
Offline captureAnsight.OfflineCapture
Objective-C facadeAnsightObjCUsed by the iOS bridgeUsed by the iOS bridgeUsed by the iOS bridge
Framework inspectionreact.*flutter.*dom.*

All-In-One Defaults

The all-in-one developer preset is aligned across .NET, Android, and iOS:

SettingValue
Sampling400ms
Retention120s
FPSEnabled
BatteryDisabled
JPEG captureEnabled, 2000ms, quality 60, max width 480, screenshot-only mode, keyboard presence disabled; iOS GPU-backed capture defaults to enabled
Touch captureEnabled
Crash captureEnabled; Studio handoff and offline attachment enabled, 8 reports, 7-day retention, 64 breadcrumbs, 1 MiB trace limit
Open-file-handle samplingDisabled
JNI-reference-count samplingDisabled
Host auto-probeEnabled
Cellular host connectionsDisabled
Unattended launch provisioningDisabled
Tool guardFull access in native all-in-one developer presets
Standard toolsAdded by aggregate/all-in-one packages

React Native defaults to core mode unless useNativeAllInOneDefaults: true is passed or withAnsightDefaults() / withAnsightSdk(...) is used. Flutter AnsightOptions.developer() and Cordova/Capacitor .withAnsightDefaults() select aligned developer presets. Crash capture is a core default rather than an all-in-one-only feature. None of these APIs detects build type; the app must apply its own development guard and choose tool, capture, crash-retention, and enrollment policy.

Build-Time Safeguards

Capability.NET / MAUIAndroidiOSReact Native / ExpoFlutterCordova / Capacitor
App-controlled development guard for enrollment and broad toolsYesYesYesNative rules plus JavaScript app policyNative rules plus Dart app policyNative rules plus JavaScript app policy
Detect bundled remote-tool implementationsAnsightRemoteToolsPolicyNo SDK build scannerBuild tool; requires ANSIGHT_ALLOW_REMOTE_TOOLS=trueNative build rules applyNative build rules applyNative build rules apply
Hard-disable annotated feedback in Release buildsYesNot availableNot availableNot availableNot availableNot available

Developer enrollment UI and broad remote-tool access are development features. Do not auto-launch enrollment or ship unrestricted tool policies in CI, store, TestFlight, Play Store, or other distributable builds.

Platform Privacy

  • Android merges required network settings automatically; Google Code Scanner avoids a host-app camera permission.
  • iOS requires Camera and Local Network usage descriptions when those features are invoked.
  • No SDK needs Bluetooth, location, contacts, or photo-library access for enrollment.
  • Enrollment and the current local WebSocket transport do not encrypt or authenticate the network path. Use Ansight only on a trusted local network.

Platform Guides