ultra 3.1.0

dotnet tool install --global ultra --version 3.1.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local ultra --version 3.1.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=ultra&version=3.1.0
                    
nuke :add-package ultra --version 3.1.0
                    

Ultra ci NuGet

<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 GC
    • GCSuspendEE, GCRestartEE, GC Start, GC Stop events
  • 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!
Profile Screenshot

🧑‍💻 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 to ultra.exe from 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-interval minimum 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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