ultra 3.1.0
dotnet tool install --global ultra --version 3.1.0
dotnet new tool-manifest
dotnet tool install --local ultra --version 3.1.0
#tool dotnet:?package=ultra&version=3.1.0
nuke :add-package ultra --version 3.1.0
Ultra

<img align="right" width="160px" height="160px" src="https://raw.githubusercontent.com/xoofx/ultra/main/img/ultra.png">
Ultra is an advanced profiler for .NET Applications available on Windows and macOS (Apple Silicon).
📽️ Check this video for a quick tour of ultra! 📽️
✨ Features
- Sampling profiler - ETW based on Windows (up to 8190 samples/second), in-process sampler over EventPipe on macOS ARM64 (up to 1000 samples/second)
- UI based on https://profiler.firefox.com/
- Traces shareable online: Check this example: ✨ https://share.firefox.dev/3Cya7YW ✨
- Timeline visualization
- Flamegraph / Stack Chart visualization
- Call Tree visualization
- Marker Chart and Marker Table visualization
- Precise kernel, native and managed function call stacks
- Categorization of functions:
.NET,.NET JIT,.NET GC,.NET CLR,Native,Kernel
- .NET GC Memory track
- JIT Compile Time Event Markers
- See which function is getting compiled
- GC Events Markers
GC Allocation Ticks: Details about allocations.GCHeapStats: Statistics about the GCGCSuspendEE,GCRestartEE,GC Start,GC Stopevents
- Lightweight trace files - e.g. Generates only a few MB for 10s
- Requires
net8.0+via dotnet global tool
| Screenshot of a trace generated by ultra visualized with https://profiler.firefox.com. Check this trace online here! |
|---|
🧑💻 Usage
You need to have installed a .NET 10.0+ SDK
$ dotnet tool install -g Ultra # The command ultra.exe will be available from your PATH
Windows
🚨 The profiler requires to run from an elevated prompt with administrative rights 🚨
This is required to allow to collect full stack traces, including kernel and native functions.
Example: open a terminal with administrative rights, to profile an executable called my_commands.exe:
$ ultra.exe profile -- my_command.exe arg0 arg1 arg2...
⚠️ Notice the
--separator to separate the arguments toultra.exefrom the arguments to the profiled application.
Profiling a running application just requires the PID of the process to profile:
$ ultra.exe profile 15243 # PID of the process to profile
# Wait for a bit and press only one CTRL+C to stop the profiling
macOS (Apple Silicon)
On macOS, no elevated privileges are required. The profiler injects a small sampler library into the launched process to collect native and managed call stacks.
$ ultra profile -- my_command arg0 arg1 arg2...
Current limitations on macOS:
- Only ARM64 (Apple Silicon) is supported.
- Only launching a program is supported - attaching to a running process with a PID is not (the sampler library can only be injected at process startup).
- The maximum sampling frequency is 1000 samples/second (
--sampling-intervalminimum is 1ms). - Kernel call stacks are not collected (user-space native and managed call stacks are).
- Symbols of system libraries living in the dyld shared cache (e.g.
libsystem_pthread.dylib) are not resolved.
⚗️ 3rd-Party
- MCP server for Ultra with UltraMCP to let your AI Coding Agent query profiling results by @KirillOsenkov
📖 User Guide
For more details on how to use Ultra, please visit the user guide.
🪪 License
This software is released under the BSD-2-Clause license.
🤗 Author
Alexandre Mutel aka xoofx.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.1.0 | 156 | 7/5/2026 |
| 3.0.0 | 125 | 7/4/2026 |
| 2.0.2 | 8,086 | 12/1/2024 |
| 2.0.1 | 425 | 11/29/2024 |
| 2.0.0 | 371 | 11/28/2024 |
| 1.5.0 | 203 | 11/27/2024 |
| 1.4.0 | 235 | 11/27/2024 |
| 1.3.0 | 9,218 | 11/26/2024 |
| 1.2.0 | 312 | 11/25/2024 |
| 1.1.0 | 254 | 11/24/2024 |
| 1.0.3 | 293 | 11/18/2024 |
| 1.0.2 | 216 | 11/18/2024 |
| 1.0.1 | 210 | 11/18/2024 |
| 1.0.0 | 241 | 11/18/2024 |