.NET Core CLI Tools telemetry

The .NET Core SDK includes a telemetry feature that collects usage information. It's important that the .NET Team understands how the tools are used so that we can improve them. For more information, see What we've learned from .NET Core SDK Telemetry.

The collected data is anonymous and published in an aggregated form for use by both Microsoft and the community under the Creative Commons Attribution License.

Scope

The dotnet command is used to launch both apps and the .NET Core CLI. The dotnet command itself doesn't collect telemetry. The .NET Core CLI commands run by the dotnet command collect the telemetry.

Telemetry isn't enabled when using the dotnet command itself, with no command attached:

  • dotnet
  • dotnet [path-to-app]

Telemetry is enabled when using the .NET Core CLI commands, such as:

  • dotnet build
  • dotnet pack
  • dotnet restore
  • dotnet run

Behavior

The .NET Core CLI Tools telemetry feature is enabled by default. Opt-out of the telemetry feature by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 or true.

Data points

The feature collects the following data:

  • Timestamp of invocation†
  • Command invoked (for example, "build")†
  • Three octet IP address used to determine geographical location†
  • ExitCode of the command
  • Test runner (for test projects)
  • Operating system and version†
  • Whether runtime IDs are present in the runtimes node
  • .NET Core SDK version†

†This metric is published.

Starting with .NET Core SDK 2.0, new data points are collected:

  • dotnet command arguments and options: only known arguments and options are collected (not arbitrary strings).
  • Whether the SDK is running in a container.
  • Target frameworks.
  • Hashed MAC address: a cryptographically (SHA256) anonymous and unique ID for a machine. This metric is not published.
  • Hashed current working directory.

The feature doesn't collect personal data, such as usernames or email addresses. It doesn't scan your code and doesn't extract sensitive project-level data, such as name, repo, or author. The data is sent securely to Microsoft servers using Microsoft Azure Application Insights technology, held under restricted access, and published under strict security controls from secure Azure Storage systems.

We want to know how the tools are used and if they're working well, not what you're building with the tools. If you suspect that the telemetry is collecting sensitive data or that we're insecurely or inappropriately handling data, file an issue in the dotnet/cli repo issues for investigation.

Published data

Published data is available quarterly and are listed at .NET Core SDK Usage Data. The columns of a data file are:

  • Timestamp
  • Occurrences†
  • Command
  • Geography‡
  • OSFamily
  • RuntimeID
  • OSVersion
  • SDKVersion

†The Occurrences column displays the aggregate count of that command's use for that row's metrics that day.

‡Typically, the Geography column displays the name of a country. In some cases, the continent of Antarctica appears in this column, either due to researchers using .NET Core in Antarctica or incorrect location data.

Example

Timestamp Occurrences Command Geography OSFamily RuntimeID OSVersion SDKVersion
4/16/2017 0:00 8 run Uganda Darwin osx.10.12-x64 10.12 1.0.1

Datasets

2016 - Q3
2016 - Q4
2017 - Q1
2017 - Q2

Additional datasets are posted using a standard URL format. Replace <YEAR> with the year and replace <QUARTER> with the quarter of the year (use 1, 2, 3, or 4). The files are in tab-separated values (TSV) format.

https://dotnetcli.blob.core.windows.net/usagedata/dotnet-cli-usage-<YEAR>-q<QUARTER>.tsv

License

The Microsoft distribution of .NET Core is licensed with the MICROSOFT .NET LIBRARY EULA. This license includes the "DATA" section to enable telemetry (shown below).

.NET NuGet packages use the same license but don't enable telemetry (see Scope).

  1. DATA. The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to improve our products and services. You can learn more about data collection and use in the help documentation and the privacy statement at http://go.microsoft.com/fwlink/?LinkId=528096. Your use of the software operates as your consent to these practices.

Disclosure

The .NET Core CLI Tools display the following text when you first run one of the commands (for example, dotnet restore). Text may vary slightly depending on the version of the SDK you're running. This "first run" experience is how Microsoft notifies you about data collection.

Welcome to .NET Core!
---------------------
Learn more about .NET Core @ https://aka.ms/dotnet-docs. Use dotnet --help to see available commands or go to https://aka.ms/dotnet-cli-docs.

Telemetry
--------------
The .NET Core tools collect usage data in order to improve your experience. The data is anonymous and does not include command-line arguments. The data is collected by Microsoft and shared with the community.
You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 using your favorite shell.
You can read more about .NET Core tools telemetry @ https://aka.ms/dotnet-cli-telemetry.

See also

What we've learned from .NET Core SDK Telemetry
Telemetry reference source (dotnet/cli repo; release/2.0.0 branch)
.NET Core SDK Usage Data