How to Update Azure Functions Core Tools (Step-by-Step)

A team I worked with had a customer-notification function that ran fine on every laptop except one. On that machine, func start threw a host error, and the publish command refused to deploy. The developer had installed Core Tools two years earlier and never touched it again. His teammates had upgraded along the way, so the same repo behaved differently on each computer.

Knowing how to update Azure Functions Core Tools matters more than most people expect.It is also a deadline issue: Microsoft ends support for the .NET in-process model on November 10, 2026, and your local tools are where you test that migration. This guide shows how to check your version, update with the same method you used to install, match the tools to your Azure runtime, and keep every machine and pipeline in sync.

Check Your Current Version First

Azure Functions Core Tools is the command-line tool that runs the Functions host on your computer so you can build, debug, and publish apps. Its command is func. If you are new to it, start with this overview of Azure Functions Core Tools. If func is not recognized at all, read you must have Azure Functions Core Tools installed first.

Run these checks before you change anything:

func --version

This prints the installed Core Tools version. You want a 4.x number. Version 4 matches version 4 of the Functions runtime, which is the supported major version for new work.

npm ls -g azure-functions-core-tools

This lists the globally installed npm copy, if one exists. An empty result means you did not install through npm. You might have used winget, Homebrew, APT, or an MSI installer.

Find Out How You Installed It

The update command depends on the install method. If you update with a different method than you installed with, you can end up with two copies. On Windows, find every copy:

where.exe func

where.exe lists every func on the PATH. Two paths mean two installs, and the first one wins. On macOS and Linux, use which -a func.

Installed withUpdate with
wingetwinget upgrade Microsoft.Azure.FunctionsCoreTools
Chocolateychoco upgrade azure-functions-core-tools
npmnpm install -g azure-functions-core-tools@4 --unsafe-perm true
Homebrewbrew upgrade azure-functions-core-tools@4
APTsudo apt-get update then install the package again
MSI installerDownload and run the newer installer

Pro Tip: In my experience, writing the install method in the project README prevents most “which copy am I running?” problems. I add one line: “We use winget on Windows and Homebrew on macOS.”

How to Update Azure Functions Core Tools on Windows

Windows has the most options, so the order matters. Pick the method that matches your original install.

Update with winget

winget is the Windows Package Manager. If you installed with it, upgrade with it:

winget upgrade Microsoft.Azure.FunctionsCoreTools

winget upgrade checks the package source and installs the newest version of that package ID. If winget says no upgrade is available, you are current. If it says the package is not installed, you probably installed through another method. Close your terminal afterward and open a new one so the PATH refreshes.

Update with npm

Developers who work mostly in Visual Studio Code often use npm, the Node.js package manager. Run:

npm install -g azure-functions-core-tools@4 --unsafe-perm true

Here is what each part does:

  • -g installs the package globally so func works from any folder.
  • @4 pulls the latest 4.x release, which is the supported line.
  • –unsafe-perm true lets npm run the post-install step that downloads the platform binary.

If the install fails with a permission or download error, clear the cache and retry:

npm cache clean --force
npm uninstall -g azure-functions-core-tools
npm install -g azure-functions-core-tools@4 --unsafe-perm true

The first command empties npm’s cache. The second removes the broken copy. The third installs fresh. This is safe because it only touches the local tool, not your projects or Azure resources.

Update with Chocolatey or an MSI

Chocolatey users run choco upgrade azure-functions-core-tools in an elevated terminal. If you used the MSI installer, download the newer MSI and run it. When both an MSI and an npm copy exist, the MSI usually wins on the PATH, which hides your npm update. Remove one of them. This guide on how to uninstall Azure Functions Core Tools walks through a clean removal.

Visual Studio Code can also manage Core Tools through its Azure Functions extension. If that path fails, read Azure Function Core Tools not installing on VS Code and the guide to installing Core Tools for Visual Studio Code.

Pro Tip: I run where.exe func before and after every update. If the output shows the same path twice with different versions, I know a leftover install is shadowing the new one.

How to Update Azure Functions Core Tools on macOS and Linux

Unix systems are simpler, but you still need to use the matching package manager.

macOS with Homebrew

brew update
brew upgrade azure-functions-core-tools@4

brew update refreshes Homebrew’s package list. brew upgrade installs the newest 4.x release of that formula. If you moved from an older major version, relink the new one so the func name points to it:

brew link --overwrite azure-functions-core-tools@4

The --overwrite flag replaces old links. It only changes local symlinks.

Ubuntu and Debian with APT

sudo apt-get update
sudo apt-get install --only-upgrade azure-functions-core-tools-4

Always run apt-get update first. A stale package index causes 404 errors and “package not found” failures, especially on build agents. The --only-upgrade flag upgrades the package if it is already installed and does not install it if it is missing, which makes the command safe to rerun.

npm Without Admin Rights

On shared machines, you may not have root access. Point npm at a folder you own:

mkdir -p "$HOME/.npm-global"
npm config set prefix "$HOME/.npm-global"
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
npm install -g azure-functions-core-tools@4 --unsafe-perm true

The first two lines create and select a personal global folder. The third adds it to your PATH, and source reloads the shell. The last line installs without sudo. On zsh, use ~/.zshrc. Avoid sudo npm install -g, because root-owned files cause confusing errors later.

Windows Subsystem for Linux

Run which npm in WSL. If the path begins with /mnt/c/, WSL is using Windows npm and will not give you a working Linux func. Install Node.js inside WSL, or use APT there.

Pro Tip: On a WSL box, I once updated the “wrong” npm for a week and wondered why nothing changed. Now which npm func is the first thing I run.

Match Core Tools to Your Function App Runtime

Updating the tool is only half the job. The tool and your Azure function app must agree on a major version. Microsoft’s guidance is that your local Core Tools version must match the major runtime version used by the function app in Azure. A runtime is the Functions host that executes your code, and it is versioned separately from your language version.

Check the Runtime in Azure

az functionapp config appsettings list \
--name <function-app-name> \
--resource-group <resource-group-name> \
--query "[?name=='FUNCTIONS_EXTENSION_VERSION']" \
--output table

This command reads the FUNCTIONS_EXTENSION_VERSION app setting for your function app. A value of ~4 means the app follows the 4.x runtime and picks up minor updates automatically. A pinned value such as 4.0.12345 freezes the app on one exact version, so check why it was pinned.

This is the same value discussed in the Functions extension version guide. You can also learn to check the Azure Function version and find the Functions runtime version.

If the Azure CLI itself is old, update it first. Here is how to update Azure CLI.

Move an Older App to Version 4

If your app still runs on 2.x or 3.x, Microsoft recommends moving to 4.x. Do it in order:

  1. Update Core Tools on your machine to 4.x.
  2. Update your project’s extension bundle and language runtime.
  3. Run the app locally and test every trigger.
  4. Test in a staging slot in Azure.
  5. Change the production setting.
az functionapp config appsettings set \
--name <function-app-name> \
--resource-group <resource-group-name> \
--settings FUNCTIONS_EXTENSION_VERSION=~4

This sets the app to the 4.x runtime. Warning: changing the runtime restarts the app and can change behavior. Never run this on production first. Create a staging deployment slot, a live copy of the app with its own URL, then swap after testing.

See how Azure App Service deployment slots work, since Functions on supported plans use the same idea. If a bad update leaves the host down, these guides help: Azure Functions runtime is unreachable and