The Flutter debugging tool for your whole team

See inside your Flutter app.
Like never before.

xRay is a desktop app for Flutter developers, QA and product. See every network call, log, stored value and file of a debug build, live, on one timeline. On macOS, Windows and Linux.

Needs an impaktfull account and approved alpha access. Free during the alpha.

A working copy of the xRay desktop app connected to a sample app. Click around: open network calls, read logs, edit stored values, browse the database and scrub the timeline.

xRay
NameStatusMethodSizeTime

This is the real xRay interface with sample data. Click around, or take the tour.

Features

Everything you need
to debug Flutter apps.

One window for what your app sends, logs and stores.

Network inspector

Every call from Dio, http and HttpClient, with headers, bodies, sizes and timing. Serverpod calls show by endpoint and method.

Try it in the demo

GraphQL and protobuf

Operations by name, errors returned with a 200, and WebSocket messages as they arrive. Protobuf and gRPC-web decoded with your own .proto files.

Try it in the demo

Storage you can edit

Change SharedPreferences and secure storage while the app runs. Add keys and edit JSON in place.

Try it in the demo

One timeline

Calls, logs and storage changes on one axis, so you see what happened around a bug.

Try it in the demo

Every device, every app

Apps running xRay on your network show up on their own. Open several side by side.

Try it in the demo

Files

Browse the app's documents and caches, preview what's inside, and save or delete files.

Try it in the demo

Share a session

Export a session as a .xray file or HAR, or one call as cURL or Markdown, so a teammate can reproduce the bug.

Try it in the demo

Device actions

Change appearance, locale, text scale and animations, open deep links, send simulated pushes and flip feature flags.

Try it in the demo

Protected by default

Traffic is encrypted and authenticated, so nobody else on the Wi-Fi can read or change it. Enter the pairing code your app prints once, or use a team password or trusted desktops.

Secrets stay hidden

Tokens and cookies are masked in your app before they are stored. Your redaction rules apply to every export.

Command menu, 18 languages

Press ⌘K to search every inspector and run any action. xRay speaks 18 languages, so the whole team feels at home.

Try it in the demo

Databases

Browse SQLite tables from sqflite and drift and your Hive boxes, run SQL and fix a row while you test. Read-only unless you allow writes.

Try it in the demo

MCP for AI assistants

Claude Code, Cursor and VS Code can read what xRay sees and, when you allow it, act on the app. It runs on your computer only, and your redaction rules always apply.

Set it up in the docs
How it works

Three steps.
No cloud.

  1. Add the package

    Add xray_inspector to your Flutter app and start the inspector in debug builds.

  2. Run your app

    The inspector runs inside your app on your local network. Release builds stay untouched.

  3. Open xRay

    The desktop app finds your app and connects with a pairing code. What your app captures goes straight to your computer and never leaves your network.

Download

On every
platform.

Runs on your computer. Sign in with your impaktfull account once your alpha access is approved.

macOS

macOS 12 or later

DMG or Homebrew

Download

Windows

Windows 10 or later, x64

Installer

Download

Linux

x86_64, GTK 3, WebKitGTK 4.1, libsecret

AppImage, needs a keyring

Download
Alpha Program

Wanted:
alpha testers.

Drop your email to request access, or ask from the xRay app. We'll email you once you're approved; then sign in to the app with the same email.

We use your email address only to review your request and to email you the outcome. See our Privacy Policy.

Documentation

Get up and running
in minutes.

Add xray_inspector to your Flutter app, start the inspector in debug builds and connect with the pairing code it prints. The docs cover setup, every package and the desktop app.

import 'package:flutter/foundation.dart';import 'package:xray_inspector/xray_inspector.dart'; if (!kReleaseMode) { final network = XRayNetworkInspector( enableHttpOverride: true, ); final logs = XRayLogInspector(); await XRayInspectorServer( config: XRayInspectorServerConfig( inspectors: [network, logs], ), ).start(); // Prints a pairing code to enter once.}