# UWPSpy: a live inspector for UWP and WinUI 3 interfaces

> UWPSpy attaches to a running UWP or WinUI 3 application through the XAML Diagnostic APIs and shows you the live element tree, one window per UI thread, with the ability to change properties as you go. It is a developer and reverse engineering tool for a narrow family of Windows applications, and it depends on an OS version floor that has not moved since 2017.

**m417z/UWPSpy** — An inspection tool for UWP and WinUI 3 applications. Seamlessly view and manipulate UI elements and their properties in real time.

- Repository: https://github.com/m417z/UWPSpy
- Website: https://ramensoftware.com/uwpspy
- Stars: 634 · Forks: 39
- Language: C++
- License: GPL-3.0
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/m417z-uwpspy

## An element inspector for a specific family of Windows apps

UWPSpy is described as an inspection tool for UWP and WinUI 3 applications, and the short version of what it does is view and manipulate UI elements and their properties in real time.

Both halves of that sentence matter. The viewing half is the familiar inspector workflow, the tree of elements and the properties on the side, except that it is attached to a running application rather than to a designer surface. The manipulating half is the part that distinguishes it from a read only viewer, since it lets you change values on a live application and watch the result.

The scope is deliberately narrow, and the name says so. UWP and WinUI 3 are the modern Microsoft application stacks for Windows, and an application built with them renders its interface as XAML. That is the technical fact the tool is built on, and it is also the boundary: an application whose interface is not XAML, whether that is an Electron shell or a native Win32 window, is not something UWPSpy can attach to.

For a developer working on one of these applications, the value is immediate. Instead of reading XAML source and guessing what the runtime actually instantiated, you look at the tree that exists right now, with the values it currently holds. The project comes from Raman Software, and the homepage is ramensoftware.com/uwpspy.

## The mechanism is the XAML Diagnostic APIs

The README states that UWPSpy uses the XAML Diagnostic APIs, linking to the Microsoft documentation for InitializeXamlDiagnostics, and notes that those APIs were added in Windows 10, version 1703.

That is the whole mechanism, and it is a diagnostic channel the platform itself provides: an application that opts in can be inspected by an external tool at runtime, which is why the tool can show a live tree rather than a static one.

The UI thread detail in the usage section follows directly. When you select a target application, a window with the application's UI elements appears for each UI thread of that application. A UWP application with several UI threads therefore produces several inspector windows, and each one shows the tree for its own thread. That is useful rather than noisy, because a bug that only reproduces on a secondary thread will only be visible in the window that belongs to it.

The README also credits a reference implementation. The ExplorerTAP part of the TranslucentTB project is named as the only usage example of the XAML Diagnostic APIs found on the internet, and Ahmed Walid, with the GitHub handle ahmed605, is thanked for helping with many UWP related questions. For anyone extending the tool, that ExplorerTAP code is the starting point the author himself used.

## The operating system floor has not moved since 2017

The supported Windows versions section is short and decisive. UWPSpy uses the XAML Diagnostic APIs, which were added in Windows 10, version 1703, and earlier versions of Windows are not supported.

That is a real constraint rather than a formality, because the diagnostic channel the tool depends on simply does not exist before that build. There is no fallback mode, and there is no way to make the tool work on an older system without the platform support it is built on.

The newer side of the compatibility story is more detailed, and it is about the interface rather than the mechanism. Dark mode is supported on Windows 11 24H2, build 26100.6899 or later, and on Windows 11 25H2, build 26200.6899 or later. When the system dark mode setting is enabled, UWPSpy automatically uses a dark theme.

So the tool has two separate version requirements, and it is worth keeping them apart. The XAML Diagnostic APIs decide where the tool can run at all, and the specific Windows 11 builds decide whether the inspector chrome matches the system theme. A team on a mixed estate will find the second one matters more than it sounds, since an inspector that renders in the wrong theme is harder to read against a dark application.

## Download, run, pick a target

The usage section is three steps and there is no installer.

You download the latest release from the ramensoftware.com downloads page, where the file is uwpspy.zip. Then you run UWPSpy.exe and select the UWP or WinUI 3 application you want to spy on. A window with that application's UI elements then appears for each UI thread of the target.

The fact that the distribution is a zip rather than an installer is worth a sentence, because it says something about the intended audience. This is a tool you unzip onto a developer machine or a test rig, run, and it attaches to another process. There is no service, no configuration file and no setup step, which is what makes it usable on a build agent where an installer would be friction.

The repository, meanwhile, is a Visual Studio solution. UWPSpy.sln sits at the top level beside the UWPSpy/ directory, the UWPSpyLauncher/ directory and a common/ directory shared between them, with .clang-format and .editorconfig for the source conventions. The primary language is C++, and building the solution is the path for anyone who wants to modify the tool rather than run the shipped binary.

## One environment variable for the dark mode escape hatch

There is exactly one documented configuration knob, and the README describes it in full.

To disable dark mode, for example if you use custom theming or encounter visual issues, set the environment variable UWPSPY_DISABLE_DARK_MODE=1 before launching. That is the whole mechanism, and the stated reasons for using it are a custom theme of your own or visual problems with the dark inspector.

The design choice here is that the theme follows the system by default and the override is an environment variable rather than a checkbox in the interface. For a tool that is often launched alongside the application being inspected, an environment variable is the right level to put it at, since it can be set per process launch without touching a settings file, and it leaves no persistent state on the machine.

It is also a small window onto the state of the project. A tool that has to display arbitrary application content, whose own chrome must stay legible against whatever the target is painting, is going to accumulate theme edge cases over time, and the escape hatch is the pressure valve for them. The README points at the ExplorerTAP and TranslucentTB project as the reference implementation, which is a reasonable model to follow for that kind of edge case.

## A small C++ repository with a steady patch line

The repository top level is compact: .clang-format, .editorconfig, .gitattributes, .gitignore, the LICENSE, the README, UWPSpy.sln, the UWPSpy/, UWPSpyLauncher/ and common/ directories, an icon.png and the two screenshots used in the documentation. There is no build script, no test directory and no issue templates in the tree, which tells you the project is small and releases binaries rather than managing a package ecosystem.

The release history is regular. Version 1.5.2 was published on 2026-03-01, v1.5.3 on 2026-04-05 and v1.5.4 on 2026-06-05, and the last push to the repository was on 2026-06-05 as well. The version numbers increment within the 1.5 line, which reads as a tool that is being kept current against Windows updates rather than restructured.

The licence is GPL-3.0, and the README credits Raman Software as the home of the project, with the homepage, the download page and the demo video all hosted outside the repository. The demo video is linked from the README as a YouTube link, which is the fastest way to see the element tree in motion before downloading anything.

One point to keep in mind when reading the documentation: the README itself is thin, and it points at the platform documentation for the diagnostic APIs rather than describing the tool's internals. For a project of this size that is a reasonable choice, since the interesting mechanism belongs to Windows, but it does mean the source is where the detail lives.

## Conclusion

Adopt UWPSpy if you build or reverse engineer UWP and WinUI 3 applications and need to see the live XAML tree rather than guessing at it from the source, and you are on Windows 10 version 1703 or later. Skip it if your interface is not XAML, since an Electron shell or a native Win32 window is out of scope, or if you need a stable API to depend on, since the tool tracks application internals that change with every Windows update. Before your first session, check the supported build list, download the release archive from ramensoftware.com rather than building the solution, and set UWPSPY_DISABLE_DARK_MODE=1 if you use custom theming. The last push was on 2026-06-05, the current release is v1.5.4 from the same day, and the licence is GPL-3.0.

## FAQ

### What is UWPSpy used for?

UWPSpy is an inspection tool for UWP and WinUI 3 applications that lets you view and manipulate UI elements and their properties in real time, with a separate window for each UI thread of the target application.

### Which Windows versions can run UWPSpy?

UWPSpy uses the XAML Diagnostic APIs, which were added in Windows 10 version 1703, and earlier versions of Windows are not supported. Dark mode support is listed for Windows 11 24H2 build 26100.6899 and later and 25H2 build 26200.6899 and later.

### How do I turn off dark mode in UWPSpy?

Set the environment variable UWPSPY_DISABLE_DARK_MODE=1 before launching UWPSpy.exe. The README gives custom theming and visual issues as the reasons to use the override, since the tool otherwise follows the system dark mode setting automatically.

### How do I get UWPSpy?

Download the latest release as a zip from the ramensoftware.com downloads page, then run UWPSpy.exe and select the UWP or WinUI 3 application you want to inspect. The source is a Visual Studio solution, UWPSpy.sln, built from C++.

## Sources

- [License: GPL-3.0](https://github.com/m417z/UWPSpy/blob/main/LICENSE)
- [m417z/UWPSpy on GitHub](https://github.com/m417z/UWPSpy)
- [Project website](https://ramensoftware.com/uwpspy)
- [README](https://github.com/m417z/UWPSpy/blob/main/README.md)
- [Releases](https://github.com/m417z/UWPSpy/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/m417z-uwpspy
