NewsDeveloper ToolsDeveloper Experience

dotnetup: Microsoft’s rustup-Style .NET SDK Manager

dotnetup terminal showing SDK install commands on dark blue background

Microsoft shipped the public preview of dotnetup on October 15 — an official, cross-platform .NET SDK and runtime manager modeled directly on Rust’s rustup. No admin rights. No system-wide installs. Channel tracking, global.json awareness, and side-by-side versions baked in. If you develop .NET on macOS or Linux and have spent any time fighting SDK versions, this is the announcement you’ve been waiting for. Read the official announcement on the .NET Blog.

The Problem Nobody Officially Fixed (Until Now)

Every major language ecosystem has a clean version manager. Rust has rustup. Node has nvm. Python has pyenv. Java has sdkman. .NET had… system-wide installers, a shell script (dotnet-install.sh), and Homebrew packages of varying reliability.

The result was predictable: sudo requirements on shared machines, PATH conflicts when multiple SDK versions coexisted, and a “which version do I need?” conversation at the start of every onboarding. Microsoft acknowledged the gap. dotnetup is the fix.

What dotnetup Actually Does

dotnetup installs .NET SDKs and runtimes into user-owned directories — no admin rights, no writes to system paths. Install it once, and you get a consistent toolchain management experience across Windows, macOS, and Linux (x64 and Arm64). The three capabilities that matter most:

1. global.json Integration

Run dotnetup install inside any repo that has a global.json and it reads the pinned SDK version and installs it. Teams can commit a global.json and new contributors get the exact right SDK in a single command. That eliminates the most common .NET onboarding friction without any new tooling conventions.

2. Channel Tracking

dotnetup separates intent from resolved version. Tell it you want the preview channel (dotnetup sdk install preview) and it tracks that intent — so dotnetup update later pulls the latest preview build automatically. The same applies to daily builds and stable channels. You describe what you want; the tool keeps it current.

3. Side-by-Side Without Chaos

Multiple SDK versions installed simultaneously, cleanly. No manual PATH juggling. Need the .NET 9 LTS runtime for a legacy service and the .NET 10 preview SDK for a new project? dotnetup handles both without conflict.

Getting Started

Install on macOS or Linux:

curl -fsSL https://aka.ms/dotnetup/get-dotnetup.sh | bash

On Windows (PowerShell):

irm https://aka.ms/dotnetup/get-dotnetup.ps1 | iex

The core commands. See the official getting started guide for full details:

# Install SDK matching your repo's global.json
dotnetup install

# Install a specific runtime
dotnetup runtime install aspnetcore@10.0

# Track and install the preview SDK channel
dotnetup sdk install preview

# Pull daily/nightly builds
dotnetup sdk install daily

# Update all tracked channels
dotnetup update

How It Compares to the Old Approaches

MethodAdmin neededChannel trackingglobal.json aware
System installerYesNoNo
dotnet-install.shNoNoManual
Homebrew dotnetSometimesNoNo
dotnetupNoYesYes

The Caveats

This is a public preview. Microsoft is explicit: features and behavior may change before general availability. The bootstrap mechanism — a curl-piped shell script — drew valid criticism. dotnetup is not yet installable via Homebrew, winget, or apt. For teams with strict policies around arbitrary shell execution, that’s a real blocker for now.

The other caveat is scope: while dotnetup works on Windows, the friction it solves has always been more acute on macOS and Linux. Windows developers with admin rights and Visual Studio installers have had a less painful path. This tool is aimed squarely at the dev-on-Linux crowd.

Worth Installing Now?

If you’re a .NET developer on macOS or Linux — yes. The preview label is honest, but the core functionality (install, update, global.json resolution) is stable enough for daily use. Microsoft’s own SDK build infrastructure already uses dotnetup internally, which is a meaningful signal about maturity.

For CI pipelines on Linux, replacing custom version-resolution scripts with a single dotnetup install step is worth evaluating today. GA will come. The fundamentals are solid now.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:News