Skip to content

feat: add azd tool command group for unified Azure tooling management#7450

Merged
wbreza merged 27 commits into
Azure:mainfrom
wbreza:feature/azd-tool
May 5, 2026
Merged

feat: add azd tool command group for unified Azure tooling management#7450
wbreza merged 27 commits into
Azure:mainfrom
wbreza:feature/azd-tool

Conversation

@wbreza
Copy link
Copy Markdown
Contributor

@wbreza wbreza commented Apr 2, 2026

Summary

Adds azd tool — a unified command group for discovering, installing, upgrading, and managing Azure development tools directly from the CLI. No more hunting for install docs or remembering package manager commands across platforms.

Parent epic: #7676


What's Included

Core Command Group (Closes #7845)

  • azd tool list — shows all registered tools with install status, version, and category
  • azd tool show <id> — displays detailed info for a specific tool (install strategies per-platform, website, etc.)
  • azd tool check — checks installed tools for available updates
  • azd tool install [ids...] — installs tools by name, with --all for all recommended tools and --dry-run for preview
  • azd tool upgrade [ids...] — upgrades installed tools, with --all and --dry-run support
  • azd tool (bare) — interactive flow: shows installed/available tools, lets user select and install in one step

First-Run Experience (Closes #7846)

  • Middleware-triggered tool check on first workflow command (azd init, azd up, azd deploy, etc.)
  • One-time prompt for new users; skippable via --no-prompt, AZD_SKIP_FIRST_RUN=true, or CI auto-detection
  • CI environments (CI, TF_BUILD, GITHUB_ACTIONS) automatically bypass the prompt

Update Check Middleware (partial #7848)

  • Background version refresh with notification gating
  • Non-intrusive update notifications when newer tool versions are available

Commands

Command Description
azd tool Interactive tool discovery and installation
azd tool list List all registered tools with status
azd tool show <id> Show details for a specific tool
azd tool check Check for available tool updates
azd tool install [ids...] Install one or more tools (--all, --dry-run)
azd tool upgrade [ids...] Upgrade one or more tools (--all, --dry-run)

All commands support --output json for scripting and CI consumption.


Built-in Tools (7)

Tool Category Priority Platforms
Azure CLI (az) CLI Recommended winget / brew / apt
GitHub Copilot CLI CLI Recommended winget / brew / npm
Azure Tools (VS Code) Extension Recommended code CLI
Bicep (VS Code) Extension Recommended code CLI
GitHub Copilot (VS Code) Extension Optional code CLI
Azure MCP Server Server Optional npm
azd AI Extensions Library Optional azd extension

Architecture

cli/azd/
├── cmd/
│   ├── tool.go                          # Command definitions & actions
│   └── middleware/
│       ├── tool_first_run.go            # First-run experience middleware
│       ├── tool_first_run_test.go
│       ├── tool_update_check.go         # Update check middleware
│       └── tool_update_check_test.go
└── pkg/tool/
    ├── manager.go / manager_test.go     # Central orchestrator
    ├── manifest.go / manifest_test.go   # Tool definitions & registry
    ├── detector.go / detector_test.go   # Cross-platform tool detection
    ├── installer.go / installer_test.go # Install/upgrade execution
    ├── platform.go / platform_test.go   # OS/package-manager abstraction
    └── update_checker.go / update_checker_test.go  # Background version checks

CI / Non-Interactive

  • --no-prompt / AZD_NON_INTERACTIVE=true suppresses all prompts
  • CI environments are auto-detected (CI, TF_BUILD, GITHUB_ACTIONS)
  • JSON output (--output json) for machine consumption
  • Positional args for install/upgrade — no interactive selection needed

Testing

  • 45 unit tests across pkg/tool/ with 83.9% statement coverage
  • All local CI checks pass: gofmt, go vet, golangci-lint, cspell, copyright headers, build, snapshots
  • 31 files changed, ~8,000 lines added

Example Output

$ azd tool list

  Id                     Name                      Category    Priority      Status          Version
  ─────────────────────  ────────────────────────  ──────────  ────────────  ──────────────  ────────
  az-cli                 Azure CLI                 cli         recommended   Installed       2.67.0
  github-copilot-cli     GitHub Copilot CLI        cli         recommended   Not Installed
  vscode-azure-tools     Azure Tools (VS Code)     extension   recommended   Installed       0.9.0
  vscode-bicep           Bicep (VS Code)           extension   recommended   Installed       0.30.0
  vscode-github-copilot  GitHub Copilot (VS Code)  extension   optional      Not Installed
  azure-mcp-server       Azure MCP Server          server      optional      Not Installed
  azd-ai-extensions      azd AI Extensions         library     optional      Not Installed

Issue References

Follow-Up Issues (deferred)

Issue Title Why deferred
#7847 Agent-First Programmatic API MCP tool integration not yet implemented
#7848 Proactive Capability Surfacing & Updates Update middleware exists; additional surfacing deferred
#7849 Registry Governance Documentation Docs-only task
#7957 Direct-download detection gap PATH-based detector doesn't find non-standard installs
#7958 VS Code extension visibility Improve UX when code CLI is unavailable
#7959 Custom telemetry for tool management Product insight events not yet wired
#7960 Azure MCP Server install strategy Global npm vs npx decision pending

Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

POC for the azd tool command group - structure is clean and well-decomposed across manifest, detector, installer, manager, and update checker.

Issues to address:

  • pkg/tool/installer.go:389 - splitCommand can't handle shell pipes, breaking Linux az-cli install
  • cli/azd/cover - test coverage output file accidentally committed
  • pkg/tool/manifest.go:247 - MCP server detection via npx downloads packages on every detection call
  • cmd/tool.go:522 - upgrade action pre-executes then creates a task list for display only
  • cmd/root.go:546 - isWorkflowCommand uses a hardcoded map instead of existing command group annotations

Comment thread cli/azd/pkg/tool/installer.go
Comment thread cli/azd/cover Outdated
Comment thread cli/azd/pkg/tool/manifest.go Outdated
Comment thread cli/azd/cmd/tool.go
Comment thread cli/azd/cmd/root.go
@wbreza wbreza force-pushed the feature/azd-tool branch from 77e6327 to a033dcd Compare April 9, 2026 01:41
@spboyer
Copy link
Copy Markdown
Member

spboyer commented Apr 9, 2026

@jongio - review again please.

@wbreza wbreza requested a review from jongio April 9, 2026 18:53
Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previous comments addressed. Two new findings on the latest code:

  • pkg/tool/detector.go - detectCommandBased reports Server/Library tools (MCP server, azd AI extensions) as installed when only the shared binary (npm, azd) is on PATH, even when the specific package isn't installed
  • cmd/middleware/tool_first_run.go and tool_update_check.go have no unit tests despite complex skip logic and background goroutine management

One nit:

  • cmd/tool.go - install strategies in show command display in non-deterministic map iteration order

Comment thread cli/azd/pkg/tool/detector.go Outdated
Comment thread cli/azd/cmd/tool.go Outdated
Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previous comments addressed. A few new edge cases:

  • cmd/middleware/tool_first_run.go:170 - detection failure permanently kills the first-run experience
  • pkg/tool/installer.go:194 - ensurePlatform lazy cache has no synchronization
  • pkg/tool/update_checker.go:176 - cache read errors silently discarded

One test gap: no coverage for the commandBased false-positive fix (Server/Library tool with VersionRegex set + non-matching output should report not installed).

Comment thread cli/azd/cmd/middleware/tool_first_run.go Outdated
Comment thread cli/azd/pkg/tool/installer.go
Comment thread cli/azd/pkg/tool/update_checker.go
@wbreza wbreza force-pushed the feature/azd-tool branch from 6ece727 to e5f0b75 Compare April 9, 2026 22:08
@wbreza wbreza requested a review from jongio April 10, 2026 00:00
Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Round 4 - three new findings in code paths previous rounds didn't cover.

Smaller items (not blocking):

  • detectCommandBased test gap: there's no test case for "VersionRegex is set but output doesn't match - tool should NOT be installed." The round 3 fix (gating Installed on regex match) works correctly, but a regression test in TestDetectTool_CommandBased would lock it down.

  • HasUpdatesAvailable (update_checker.go) counts uninstalled tools as needing updates. The condition latest != s.InstalledVersion is true when the tool isn't installed (InstalledVersion is empty) but latest is non-empty. Currently unreachable in the POC since no remote API populates LatestVersion, but it'll bite when that's added. Adding s.Installed to the guard fixes it.

  • Middleware test coverage: tool_first_run.go (327 lines) and tool_update_check.go (176 lines) still have zero tests despite complex skip logic, CI detection, and background goroutine management. Mentioned this in round 2 body but calling it out again.

Comment thread cli/azd/pkg/tool/manifest.go
Comment thread cli/azd/cmd/tool.go Outdated
Comment thread cli/azd/cmd/middleware/tool_update_check.go
@microsoft-github-policy-service microsoft-github-policy-service Bot added the no-recent-activity identity issues with no activity label Apr 17, 2026
wbreza added a commit to wbreza/azure-dev that referenced this pull request Apr 22, 2026
- Fix VS Code extension strategies to use PackageId instead of InstallCommand
- Fix task callbacks to find correct result by tool ID instead of using results[0]
- Wire ShouldShowNotification through Manager to gate update notifications

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wbreza wbreza requested a review from jongio April 22, 2026 21:19
@microsoft-github-policy-service microsoft-github-policy-service Bot removed the no-recent-activity identity issues with no activity label Apr 22, 2026
Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prior feedback addressed - the results[0] fix now iterates to find the matching tool by ID, VS Code extensions correctly use PackageId, and the middleware notification guard is in place. Two notes on the new direct download code.

Comment thread cli/azd/pkg/tool/installer.go
Comment thread cli/azd/pkg/tool/installer.go
wbreza added a commit to wbreza/azure-dev that referenced this pull request Apr 27, 2026
- Add partial checksum config validation with clear error messages
- Respect AZD_CONFIG_DIR for tool install directory via config.GetUserConfigDir()
- Merge with main to resolve cspell.yaml conflict

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Three items from prior rounds that still look unaddressed, plus one new observation.

The checksum validation and AZD_CONFIG_DIR fixes in the latest commit look good - those close out the round 4 feedback cleanly.

Still open:

  • HasUpdatesAvailable can count uninstalled tools as having updates (details inline)
  • No regression test for the VersionRegex no-match path in detectCommandBased
  • Zero test coverage on both middleware files ( ool_first_run.go, ool_update_check.go)

Comment thread cli/azd/pkg/tool/update_checker.go Outdated
Comment thread cli/azd/pkg/tool/detector_test.go
Comment thread cli/azd/cmd/middleware/tool_first_run.go
wbreza added a commit to wbreza/azure-dev that referenced this pull request Apr 28, 2026
- Guard HasUpdatesAvailable against uninstalled tools with cached versions
- Add VersionRegexSetButNoMatch regression test for detector
- Add test suites for tool_first_run and tool_update_check middleware

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wbreza wbreza marked this pull request as ready for review April 28, 2026 20:49
Copilot AI review requested due to automatic review settings April 28, 2026 20:49
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new azd tool command group and supporting infrastructure (tool manifest, detection, installation/upgrade flows, and update-check caching) to help users manage common Azure development tooling directly from the Azure Developer CLI, including first-run and periodic update-notification middleware integration.

Changes:

  • Introduces azd tool command group (list, show, install, upgrade, check) with table/JSON outputs and interactive flows.
  • Adds pkg/tool subsystem: built-in tool registry (manifest), platform detection, tool detection, installer (package manager + direct download), and update-check caching.
  • Adds first-run and background update-check middleware, wiring into root command execution and updating usage/Fig spec snapshots.

Reviewed changes

Copilot reviewed 30 out of 30 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
cli/azd/pkg/tool/update_checker.go Implements update-check gating, cache persistence, and notification timing logic.
cli/azd/pkg/tool/update_checker_test.go Unit tests for update-check behavior and cache round-trips.
cli/azd/pkg/tool/platform.go Detects OS and available package managers; selects install strategies.
cli/azd/pkg/tool/platform_test.go Tests platform detection and strategy selection behavior.
cli/azd/pkg/tool/manifest.go Defines tool types and the built-in tool registry (7 tools).
cli/azd/pkg/tool/manifest_test.go Tests built-in manifest integrity and lookup helpers.
cli/azd/pkg/tool/manager.go Orchestrates tool detection/install/upgrade and update-check delegation.
cli/azd/pkg/tool/manager_test.go Tests manager orchestration including dependency resolution.
cli/azd/pkg/tool/installer.go Implements installation/upgrade via package managers, shell commands, and direct downloads + checksum verification.
cli/azd/pkg/tool/installer_test.go Tests installer behaviors across strategy types, including direct download/checksum paths.
cli/azd/pkg/tool/detector.go Detects installed tools and extracts versions by category (CLI/extension/server/library).
cli/azd/pkg/tool/detector_test.go Tests detection/version parsing across tool categories and error conditions.
cli/azd/internal/errors.go Adds a sentinel error for tool upgrade failures.
cli/azd/internal/cmd/errors.go Adds telemetry classification for the new sentinel error.
cli/azd/cmd/tool.go Registers azd tool commands and implements CLI actions/UX/output.
cli/azd/cmd/root.go Wires tool commands into root and adds tool first-run/update-check middleware for workflow commands.
cli/azd/cmd/middleware/tool_update_check.go Adds cached update notification + background update check middleware.
cli/azd/cmd/middleware/tool_update_check_test.go Tests update-check middleware gating/skip conditions.
cli/azd/cmd/middleware/tool_first_run.go Adds first-run tool detection + optional install experience.
cli/azd/cmd/middleware/tool_first_run_test.go Tests first-run skip conditions and non-blocking behavior.
cli/azd/cmd/container.go Registers tool subsystem services in IoC (detector/installer/manager/update checker).
cli/azd/cmd/testdata/TestUsage-azd.snap Updates usage snapshot to include the new tool group (and related help ordering changes).
cli/azd/cmd/testdata/TestUsage-azd-tool.snap Adds usage snapshot for azd tool.
cli/azd/cmd/testdata/TestUsage-azd-tool-upgrade.snap Adds usage snapshot for azd tool upgrade.
cli/azd/cmd/testdata/TestUsage-azd-tool-show.snap Adds usage snapshot for azd tool show.
cli/azd/cmd/testdata/TestUsage-azd-tool-list.snap Adds usage snapshot for azd tool list.
cli/azd/cmd/testdata/TestUsage-azd-tool-install.snap Adds usage snapshot for azd tool install.
cli/azd/cmd/testdata/TestUsage-azd-tool-check.snap Adds usage snapshot for azd tool check.
cli/azd/cmd/testdata/TestFigSpec.ts Updates Fig completion spec to include tool and its subcommands/options.
cli/azd/.vscode/cspell.yaml Adds spelling allowlist entries relevant to new tool/manifest content.

Comment thread cli/azd/cmd/tool.go Outdated
Comment thread cli/azd/cmd/tool.go Outdated
Comment thread cli/azd/cmd/middleware/tool_update_check.go Outdated
Comment thread cli/azd/pkg/tool/installer.go
Comment thread cli/azd/pkg/tool/installer.go Outdated
Comment thread cli/azd/cmd/middleware/tool_first_run.go
Comment thread cli/azd/cmd/middleware/tool_first_run.go
Comment thread cli/azd/cmd/tool.go Outdated
Comment thread cli/azd/cmd/middleware/tool_first_run.go
Copy link
Copy Markdown
Member

@vhvb1989 vhvb1989 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Feedback

Thanks for this feature! I have a few questions and suggestions across different areas. Posting them as a single review for easier tracking.


1. VS Code Extensions Visibility (cli/azd/cmd/tool.go — toolListAction.Run)

Consider filtering or visually distinguishing VS Code extensions when code is not on PATH. Currently azd tool list shows them as "Not Installed" (same as a CLI you just haven't installed yet), and azd tool install fails with a package-manager-unavailable error. Options: (1) hide extensions whose prerequisite isn't available, (2) show a distinct status like "Unavailable (requires VS Code)" instead of "Not Installed", or (3) add a --category filter flag so users can scope the list.


2. Azure MCP Server Install Strategy (cli/azd/pkg/tool/manifest.go — azureMCPServer())

Questions about the Azure MCP Server install strategy:

  1. Global install vs npx: The MCP server is installed globally via npm install -g @azure/mcp, but most MCP server configurations in VS Code use npx (which doesn't require a global install). What's the benefit of a global install here? Is this the recommended approach from the Azure MCP team?

  2. No editor configuration: Installing the npm package globally doesn't actually configure it anywhere — the user still needs to manually wire it up in their VS Code MCP settings (or whatever agent tool they use). So azd tool install azure-mcp-server installs a package that can't be used until additional manual steps are taken. Should azd tool also help with configuration, or at minimum surface a "next steps" message?

  3. Global vs local conflict: If a project already has @azure/mcp as a local dev dependency (in the project's node_modules), a global install could lead to version conflicts or confusion about which version is being used. Has this been considered?


3. First-Run Experience for Existing Users (cli/azd/cmd/middleware/tool_first_run.go — shouldSkip)

The first-run experience will trigger for all existing azd users after upgrading, not just new installations. The only gate is the absence of tool.firstRunCompleted in user config, which is a new key that no existing user will have.

Consider differentiating between truly new users and existing users who just upgraded. For example:

  • Check if other user config keys already exist (indicating a returning user) and auto-set tool.firstRunCompleted for them
  • Check if ~/.azd predates this version
  • Only show this for fresh azd installations where no prior config exists

For long-time users who already have their tools set up, being prompted with "Welcome to Azure Developer CLI! 🚀" and a tool check on their next azd up could feel disruptive rather than helpful.

Additionally:

  • The opt-out mechanism is currently only via AZD_SKIP_FIRST_RUN env var, which is not discoverable. The welcome message should mention how to skip/disable this feature.
  • A user-config-based opt-out (e.g., azd config set tool.firstRun.enabled false) would be more natural and consistent with azd patterns than requiring a system environment variable. The env var is fine for CI, but for users who just don't want this feature, azd config is the right place.

4. Global Flags as No-Ops (cli/azd/cmd/tool.go)

Minor: azd tool accepts global flags like -e/--environment that it doesn't use. Is there any risk that passing -e myenv could trigger environment creation or resolution as a side effect before the tool action runs? Might be worth verifying that unused global flags are truly no-ops for commands that don't need them.


5. Telemetry for Product Insights (cli/azd/cmd/tool.go, cli/azd/pkg/tool/)

The generic telemetry middleware will track command-level usage and errors, but there's no custom telemetry to answer key product questions:

  • Which tools are most/least installed across users? (detection results)
  • Which tools are users choosing to install, and which do they skip?
  • What install strategies are being used (brew vs winget vs npm vs manual)?
  • What's the success/failure rate per tool and per strategy?
  • In the first-run experience, do users accept or decline the tool check? Which tools do they select?

Adding span attributes for tool IDs, install strategies, and outcomes would make this feature's impact measurable. Without it, we'll know people ran azd tool install but not what they installed or whether it worked.

wbreza and others added 10 commits May 4, 2026 14:51
- Fix VS Code extension strategies to use PackageId instead of InstallCommand
- Fix task callbacks to find correct result by tool ID instead of using results[0]
- Wire ShouldShowNotification through Manager to gate update notifications

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add partial checksum config validation with clear error messages
- Respect AZD_CONFIG_DIR for tool install directory via config.GetUserConfigDir()
- Merge with main to resolve cspell.yaml conflict

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Guard HasUpdatesAvailable against uninstalled tools with cached versions
- Add VersionRegexSetButNoMatch regression test for detector
- Add test suites for tool_first_run and tool_update_check middleware

Fixes review comments from jongio on Azure#7450

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix comment/code mismatch in tool_update_check middleware
- Narrow shell operator detection from & to && to avoid URL false positives
- Document AZD_SKIP_FIRST_RUN in environment-variables.md
- Wire console handles into Confirm and MultiSelect prompts in first-run middleware

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Hide unused global flags (-e/--environment, -C/--cwd) from tool commands
- Update first-run messaging from welcome framing to tool-check framing
- Add skip/disable hint to first-run output

Follow-up issues created:
- Azure#7958 (VS Code extension visibility)
- Azure#7959 (custom telemetry)
- Azure#7960 (MCP Server install strategy)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Updated snapshot files to reflect new global flags (-C/--cwd and
-e/--environment) added in origin/main.
Global flags like --environment and --cwd are safely ignored by tool
commands (no side effects). Removing the hiding to stay consistent
with other command groups (config, auth, extensions) that also ignore
unused global flags without hiding them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@wbreza wbreza force-pushed the feature/azd-tool branch from b1533f8 to f91c804 Compare May 4, 2026 23:26
- Add retry with exponential backoff for post-install verification
- Fix version regex patterns for pre-release versions (beta, preview)
- Use real underlying tool IDs (e.g., GitHub.copilot, @azure/mcp, azure.ai.agents)
- Switch azd extension detection to JSON parsing with --installed flag
- Add spinner UX for all detection flows (list, check, show, install, upgrade)
- Fix false positive detection for azd extensions

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
wbreza and others added 3 commits May 4, 2026 18:10
- Replace sync.Once with mutex in ensurePlatform to avoid caching transient errors
- Only mark CLI tools as Installed on exec.ExitError, not arbitrary errors
- Case-insensitive checksum comparison for direct downloads
- Strip URL query parameters from download filenames
- Cache compiled regexes in detector to avoid recompilation per call
- Pass manifest to HasUpdatesAvailable instead of using package-level lookup
- Batch install/upgrade calls to avoid N+1 dependency resolution
- Extract shared runToolOperation helper to deduplicate install/upgrade flows
- Add transitive dependency validation in buildInstallOrder
- Document splitCommand quoted-argument limitation
- Document isWorkflowCommand middleware scoping

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add ExitError guard to detectLibrary for consistent error handling
- Replace sync.Once with sync.Mutex in getCacheFilePath to avoid caching transient errors
- Include dependency results in runToolOperation TaskList and JSON output
- Validate filename from download URL before filesystem operations
- Fix gofmt alignment in installer struct
- Break long line in buildInstallOrder error message
- Add filesystems and redirections to cspell overrides

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t ANSI contamination

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@azure-sdk
Copy link
Copy Markdown
Collaborator

Azure Dev CLI Install Instructions

Install scripts

MacOS/Linux

May elevate using sudo on some platforms and configurations

bash:

curl -fsSL https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/uninstall-azd.sh | bash;
curl -fsSL https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/install-azd.sh | bash -s -- --base-url https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450 --version '' --verbose --skip-verify

pwsh:

Invoke-RestMethod 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/uninstall-azd.ps1' -OutFile uninstall-azd.ps1; ./uninstall-azd.ps1
Invoke-RestMethod 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/install-azd.ps1' -OutFile install-azd.ps1; ./install-azd.ps1 -BaseUrl 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450' -Version '' -SkipVerify -Verbose

Windows

PowerShell install

powershell -c "Set-ExecutionPolicy Bypass Process; irm 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/uninstall-azd.ps1' > uninstall-azd.ps1; ./uninstall-azd.ps1;"
powershell -c "Set-ExecutionPolicy Bypass Process; irm 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/install-azd.ps1' > install-azd.ps1; ./install-azd.ps1 -BaseUrl 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450' -Version '' -SkipVerify -Verbose;"

MSI install

powershell -c "irm 'https://azuresdkartifacts.z5.web.core.windows.net/azd/standalone/pr/7450/azd-windows-amd64.msi' -OutFile azd-windows-amd64.msi; msiexec /i azd-windows-amd64.msi /qn"

Standalone Binary

MSI

Documentation

learn.microsoft.com documentation

title: Azure Developer CLI reference
description: This article explains the syntax and parameters for the various Azure Developer CLI commands.
author: alexwolfmsft
ms.author: alexwolf
ms.date: 05/05/2026
ms.service: azure-dev-cli
ms.topic: conceptual
ms.custom: devx-track-azdevcli

Azure Developer CLI reference

This article explains the syntax and parameters for the various Azure Developer CLI commands.

azd

The Azure Developer CLI (azd) is an open-source tool that helps onboard and manage your project on Azure

Options

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
      --docs                 Opens the documentation for azd in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for azd.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd add: Add a component to your project.
  • azd auth: Authenticate with Azure.
  • azd completion: Generate shell completion scripts.
  • azd config: Manage azd configurations (ex: default Azure subscription, location).
  • azd copilot: Manage GitHub Copilot agent settings. (Preview)
  • azd deploy: Deploy your project code to Azure.
  • azd down: Delete your project's Azure resources.
  • azd env: Manage environments (ex: default environment, environment variables).
  • azd extension: Manage azd extensions.
  • azd hooks: Develop, test and run hooks for a project.
  • azd infra: Manage your Infrastructure as Code (IaC).
  • azd init: Initialize a new application.
  • azd mcp: Manage Model Context Protocol (MCP) server. (Alpha)
  • azd monitor: Monitor a deployed project.
  • azd package: Packages the project's code to be deployed to Azure.
  • azd pipeline: Manage and configure your deployment pipelines.
  • azd provision: Provision Azure resources for your project.
  • azd publish: Publish a service to a container registry.
  • azd restore: Restores the project's dependencies.
  • azd show: Display information about your project and its resources.
  • azd template: Find and view template details.
  • azd tool: Manage Azure development tools.
  • azd up: Provision and deploy your project to Azure with a single command.
  • azd update: Updates azd to the latest version.
  • azd version: Print the version number of Azure Developer CLI.

azd add

Add a component to your project.

azd add [flags]

Options

      --docs   Opens the documentation for azd add in your web browser.
  -h, --help   Gets help for add.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd auth

Authenticate with Azure.

Options

      --docs   Opens the documentation for azd auth in your web browser.
  -h, --help   Gets help for auth.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd auth login

Log in to Azure.

Synopsis

Log in to Azure.

When run without any arguments, log in interactively using a browser. To log in using a device code, pass
--use-device-code.

To log in as a service principal, pass --client-id and --tenant-id as well as one of: --client-secret,
--client-certificate, or --federated-credential-provider.

To log in using a managed identity, pass --managed-identity, which will use the system assigned managed identity.
To use a user assigned managed identity, pass --client-id in addition to --managed-identity with the client id of
the user assigned managed identity you wish to use.

azd auth login [flags]

Options

      --check-status                           Checks the log-in status instead of logging in.
      --client-certificate string              The path to the client certificate for the service principal to authenticate with.
      --client-id string                       The client id for the service principal to authenticate with.
      --client-secret string                   The client secret for the service principal to authenticate with. Set to the empty string to read the value from the console.
      --docs                                   Opens the documentation for azd auth login in your web browser.
      --federated-credential-provider string   The provider to use to acquire a federated token to authenticate with. Supported values: github, azure-pipelines, oidc
  -h, --help                                   Gets help for login.
      --managed-identity                       Use a managed identity to authenticate.
      --redirect-port int                      Choose the port to be used as part of the redirect URI during interactive login.
      --tenant-id string                       The tenant id or domain name to authenticate with.
      --use-device-code[=true]                 When true, log in by using a device code instead of a browser.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd auth logout

Log out of Azure.

Synopsis

Log out of Azure

azd auth logout [flags]

Options

      --docs   Opens the documentation for azd auth logout in your web browser.
  -h, --help   Gets help for logout.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd auth status

Show the current authentication status.

Synopsis

Display whether you are logged in to Azure and the associated account information.

azd auth status [flags]

Options

      --docs   Opens the documentation for azd auth status in your web browser.
  -h, --help   Gets help for status.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion

Generate shell completion scripts.

Synopsis

Generate shell completion scripts for azd.

The completion command allows you to generate autocompletion scripts for your shell,
currently supports bash, zsh, fish and PowerShell.

See each sub-command's help for details on how to use the generated script.

Options

      --docs   Opens the documentation for azd completion in your web browser.
  -h, --help   Gets help for completion.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion bash

Generate bash completion script.

azd completion bash

Options

      --docs   Opens the documentation for azd completion bash in your web browser.
  -h, --help   Gets help for bash.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion fig

Generate Fig autocomplete spec.

azd completion fig

Options

      --docs   Opens the documentation for azd completion fig in your web browser.
  -h, --help   Gets help for fig.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion fish

Generate fish completion script.

azd completion fish

Options

      --docs   Opens the documentation for azd completion fish in your web browser.
  -h, --help   Gets help for fish.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion powershell

Generate PowerShell completion script.

azd completion powershell

Options

      --docs   Opens the documentation for azd completion powershell in your web browser.
  -h, --help   Gets help for powershell.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd completion zsh

Generate zsh completion script.

azd completion zsh

Options

      --docs   Opens the documentation for azd completion zsh in your web browser.
  -h, --help   Gets help for zsh.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config

Manage azd configurations (ex: default Azure subscription, location).

Synopsis

Manage the Azure Developer CLI user configuration, which includes your default Azure subscription and location.

Available since azure-dev-cli_0.4.0-beta.1.

The easiest way to configure azd for the first time is to run azd init. The subscription and location you select will be stored in the config.json file located in the config directory. To configure azd anytime afterwards, you'll use azd config set.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable.

Options

      --docs   Opens the documentation for azd config in your web browser.
  -h, --help   Gets help for config.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config get

Gets a configuration.

Synopsis

Gets a configuration in the configuration path.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%\.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable.

azd config get <path> [flags]

Options

      --docs   Opens the documentation for azd config get in your web browser.
  -h, --help   Gets help for get.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config list-alpha

Display the list of available features in alpha stage.

azd config list-alpha [flags]

Options

      --docs   Opens the documentation for azd config list-alpha in your web browser.
  -h, --help   Gets help for list-alpha.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config options

List all available configuration settings.

Synopsis

List all possible configuration settings that can be set with azd, including descriptions and allowed values.

azd config options [flags]

Options

      --docs   Opens the documentation for azd config options in your web browser.
  -h, --help   Gets help for options.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config reset

Resets configuration to default.

Synopsis

Resets all configuration in the configuration path.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%\.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable to the default.

azd config reset [flags]

Options

      --docs    Opens the documentation for azd config reset in your web browser.
  -f, --force   Force reset without confirmation.
  -h, --help    Gets help for reset.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config set

Sets a configuration.

Synopsis

Sets a configuration in the configuration path.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%\.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable.

azd config set <path> <value> [flags]

Examples

azd config set defaults.subscription <yourSubscriptionID>
azd config set defaults.location eastus

Options

      --docs   Opens the documentation for azd config set in your web browser.
  -h, --help   Gets help for set.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config show

Show all the configuration values.

Synopsis

Show all configuration values in the configuration path.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%\.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable.

azd config show [flags]

Options

      --docs   Opens the documentation for azd config show in your web browser.
  -h, --help   Gets help for show.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd config unset

Unsets a configuration.

Synopsis

Removes a configuration in the configuration path.

The default value of the config directory is:

  • $HOME/.azd on Linux and macOS
  • %USERPROFILE%\.azd on Windows

The configuration directory can be overridden by specifying a path in the AZD_CONFIG_DIR environment variable.

azd config unset <path> [flags]

Examples

azd config unset defaults.location

Options

      --docs   Opens the documentation for azd config unset in your web browser.
  -h, --help   Gets help for unset.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd copilot

Manage GitHub Copilot agent settings. (Preview)

Options

      --docs   Opens the documentation for azd copilot in your web browser.
  -h, --help   Gets help for copilot.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd copilot consent

Manage tool consent.

Synopsis

Manage consent rules for tool execution.

Options

      --docs   Opens the documentation for azd copilot consent in your web browser.
  -h, --help   Gets help for consent.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd copilot consent grant

Grant consent trust rules.

Synopsis

Grant trust rules for tools and servers.

This command creates consent rules that allow tools to execute
without prompting for permission. You can specify different permission
levels and scopes for the rules.

Examples:

Grant always permission to all tools globally

azd copilot consent grant --global --permission always

Grant project permission to a specific tool with read-only scope

azd copilot consent grant --server my-server --tool my-tool --permission project --scope read-only

azd copilot consent grant [flags]

Options

      --action string       Action type: 'all' or 'readonly' (default "all")
      --docs                Opens the documentation for azd copilot consent grant in your web browser.
      --global              Apply globally to all servers
  -h, --help                Gets help for grant.
      --operation string    Operation type: 'tool' or 'sampling' (default "tool")
      --permission string   Permission: 'allow', 'deny', or 'prompt' (default "allow")
      --scope string        Rule scope: 'global', or 'project' (default "global")
      --server string       Server name
      --tool string         Specific tool name (requires --server)

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd copilot consent list

List consent rules.

Synopsis

List all consent rules for tools.

azd copilot consent list [flags]

Options

      --action string       Action type to filter by (all, readonly)
      --docs                Opens the documentation for azd copilot consent list in your web browser.
  -h, --help                Gets help for list.
      --operation string    Operation to filter by (tool, sampling)
      --permission string   Permission to filter by (allow, deny, prompt)
      --scope string        Consent scope to filter by (global, project). If not specified, lists rules from all scopes.
      --target string       Specific target to operate on (server/tool format)

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd copilot consent revoke

Revoke consent rules.

Synopsis

Revoke consent rules for tools.

azd copilot consent revoke [flags]

Options

      --action string       Action type to filter by (all, readonly)
      --docs                Opens the documentation for azd copilot consent revoke in your web browser.
  -h, --help                Gets help for revoke.
      --operation string    Operation to filter by (tool, sampling)
      --permission string   Permission to filter by (allow, deny, prompt)
      --scope string        Consent scope to filter by (global, project). If not specified, revokes rules from all scopes.
      --target string       Specific target to operate on (server/tool format)

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd deploy

Deploy your project code to Azure.

azd deploy <service> [flags]

Options

      --all                   Deploys all services that are listed in azure.yaml
      --docs                  Opens the documentation for azd deploy in your web browser.
  -e, --environment string    The name of the environment to use.
      --from-package string   Deploys the packaged service located at the provided path. Supports zipped file packages (file path) or container images (image tag).
  -h, --help                  Gets help for deploy.
      --timeout int           Maximum time in seconds for azd to wait for each service deployment. This stops azd from waiting but does not cancel the Azure-side deployment. (default: 1200) (default 1200)

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd down

Delete your project's Azure resources.

azd down [<layer>] [flags]

Options

      --docs                 Opens the documentation for azd down in your web browser.
  -e, --environment string   The name of the environment to use.
      --force                Does not require confirmation before it deletes resources.
  -h, --help                 Gets help for down.
      --purge                Does not require confirmation before it permanently deletes resources that are soft-deleted by default (for example, key vaults).

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env

Manage environments (ex: default environment, environment variables).

Options

      --docs   Opens the documentation for azd env in your web browser.
  -h, --help   Gets help for env.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env config

Manage environment configuration (ex: stored in .azure//config.json).

Options

      --docs   Opens the documentation for azd env config in your web browser.
  -h, --help   Gets help for config.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env config get

Gets a configuration value from the environment.

Synopsis

Gets a configuration value from the environment's config.json file.

azd env config get <path> [flags]

Options

      --docs                 Opens the documentation for azd env config get in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for get.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env config set

Sets a configuration value in the environment.

Synopsis

Sets a configuration value in the environment's config.json file.

Values are automatically parsed as JSON types when possible. Booleans (true/false),
numbers (42, 3.14), arrays ([...]), and objects ({...}) are stored with their native
JSON types. Plain text values are stored as strings. To force a JSON-typed value to be
stored as a string, wrap it in JSON quotes (e.g. '"true"' or '"8080"').

azd env config set <path> <value> [flags]

Examples

azd env config set myapp.endpoint https://example.com
azd env config set myapp.debug true
azd env config set myapp.count 42
azd env config set infra.parameters.tags '{"env":"dev"}'
azd env config set myapp.port '"8080"'

Options

      --docs                 Opens the documentation for azd env config set in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for set.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env config unset

Unsets a configuration value in the environment.

Synopsis

Removes a configuration value from the environment's config.json file.

azd env config unset <path> [flags]

Examples

azd env config unset myapp.endpoint

Options

      --docs                 Opens the documentation for azd env config unset in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for unset.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd env get-value

Get specific environment value.

azd env get-value <keyName> [flags]

Options

      --docs                 Opens the documentation for azd env get-value in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for get-value.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env get-values

Get all environment values.

azd env get-values [flags]

Options

      --docs                 Opens the documentation for azd env get-values in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for get-values.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env list

List environments.

azd env list [flags]

Options

      --docs   Opens the documentation for azd env list in your web browser.
  -h, --help   Gets help for list.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env new

Create a new environment and set it as the default.

azd env new <environment> [flags]

Options

      --docs                  Opens the documentation for azd env new in your web browser.
  -h, --help                  Gets help for new.
  -l, --location string       Azure location for the new environment
      --subscription string   ID of an Azure subscription to use for the new environment

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env refresh

Refresh environment values by using information from a previous infrastructure provision.

azd env refresh <environment> [flags]

Options

      --docs                 Opens the documentation for azd env refresh in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for refresh.
      --hint string          Hint to help identify the environment to refresh
      --layer string         Provisioning layer to refresh the environment from.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env remove

Remove an environment.

azd env remove <environment> [flags]

Options

      --docs                 Opens the documentation for azd env remove in your web browser.
  -e, --environment string   The name of the environment to use.
      --force                Skips confirmation before performing removal.
  -h, --help                 Gets help for remove.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env select

Set the default environment.

azd env select [<environment>] [flags]

Options

      --docs   Opens the documentation for azd env select in your web browser.
  -h, --help   Gets help for select.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env set

Set one or more environment values.

Synopsis

Set one or more environment values using key-value pairs or by loading from a .env formatted file.

azd env set [<key> <value>] | [<key>=<value> ...] | [--file <filepath>] [flags]

Options

      --docs                 Opens the documentation for azd env set in your web browser.
  -e, --environment string   The name of the environment to use.
      --file string          Path to .env formatted file to load environment values from.
  -h, --help                 Gets help for set.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd env set-secret

Set a name as a reference to a Key Vault secret in the environment.

Synopsis

You can either create a new Key Vault secret or select an existing one.
The provided name is the key for the .env file which holds the secret reference to the Key Vault secret.

azd env set-secret <name> [flags]

Options

      --docs                 Opens the documentation for azd env set-secret in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for set-secret.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

  • azd env: Manage environments (ex: default environment, environment variables).
  • Back to top

azd extension

Manage azd extensions.

Options

      --docs   Opens the documentation for azd extension in your web browser.
  -h, --help   Gets help for extension.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension install

Installs specified extensions.

azd extension install <extension-id> [flags]

Options

      --docs             Opens the documentation for azd extension install in your web browser.
  -f, --force            Force installation, including downgrades and reinstalls
  -h, --help             Gets help for install.
  -s, --source string    The extension source to use for installs
  -v, --version string   The version of the extension to install

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension list

List available extensions.

azd extension list [--installed] [flags]

Options

      --docs            Opens the documentation for azd extension list in your web browser.
  -h, --help            Gets help for list.
      --installed       List installed extensions
      --source string   Filter extensions by source
      --tags strings    Filter extensions by tags

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension show

Show details for a specific extension.

azd extension show <extension-id> [flags]

Options

      --docs            Opens the documentation for azd extension show in your web browser.
  -h, --help            Gets help for show.
  -s, --source string   The extension source to use.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension source

View and manage extension sources

Options

      --docs   Opens the documentation for azd extension source in your web browser.
  -h, --help   Gets help for source.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension source add

Add an extension source with the specified name

azd extension source add [flags]

Options

      --docs              Opens the documentation for azd extension source add in your web browser.
  -h, --help              Gets help for add.
  -l, --location string   The location of the extension source
  -n, --name string       The name of the extension source
  -t, --type string       The type of the extension source. Supported types are 'file' and 'url'

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension source list

List extension sources

azd extension source list [flags]

Options

      --docs   Opens the documentation for azd extension source list in your web browser.
  -h, --help   Gets help for list.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension source remove

Remove an extension source with the specified name

azd extension source remove <name> [flags]

Options

      --docs   Opens the documentation for azd extension source remove in your web browser.
  -h, --help   Gets help for remove.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension source validate

Validate an extension source's registry.json file.

Synopsis

Validate an extension source's registry.json file.

Accepts a source name (from 'azd extension source list'), a local file path,
or a URL. Checks required fields, valid capabilities, semver version format,
platform artifact structure, and extension ID format.

azd extension source validate <name-or-path-or-url> [flags]

Options

      --docs     Opens the documentation for azd extension source validate in your web browser.
  -h, --help     Gets help for validate.
      --strict   Enable strict validation (require checksums)

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension uninstall

Uninstall specified extensions.

azd extension uninstall [extension-id] [flags]

Options

      --all    Uninstall all installed extensions
      --docs   Opens the documentation for azd extension uninstall in your web browser.
  -h, --help   Gets help for uninstall.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd extension upgrade

Upgrade installed extensions to the latest version.

Synopsis

Upgrade one or more installed extensions.

By default, uses the stored registry source for each extension. If the stored
source is unavailable, falls back to the main (azd) registry. Extensions that
were installed from a non-main registry (e.g., dev) are automatically promoted
to the main registry when a newer version is available there.

Use --source to explicitly override the registry source for the upgrade. Use
--all to upgrade all installed extensions in a single batch; failures in one
extension do not prevent the remaining extensions from being upgraded.

Use --output json for a structured report of all upgrade results.

azd extension upgrade [extension-id] [flags]

Options

      --all              Upgrade all installed extensions
      --docs             Opens the documentation for azd extension upgrade in your web browser.
  -h, --help             Gets help for upgrade.
  -s, --source string    The extension source to use for upgrades
  -v, --version string   The version of the extension to upgrade to

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd hooks

Develop, test and run hooks for a project.

Options

      --docs   Opens the documentation for azd hooks in your web browser.
  -h, --help   Gets help for hooks.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd hooks run

Runs the specified hook for the project, provisioning layers, and services

azd hooks run <name> [flags]

Options

      --docs                 Opens the documentation for azd hooks run in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for run.
      --layer string         Only runs hooks for the specified provisioning layer.
      --platform string      Forces hooks to run for the specified platform.
      --service string       Only runs hooks for the specified service.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd infra

Manage your Infrastructure as Code (IaC).

Options

      --docs   Opens the documentation for azd infra in your web browser.
  -h, --help   Gets help for infra.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd infra generate

Write IaC for your project to disk, allowing you to manually manage it.

azd infra generate [flags]

Options

      --docs                 Opens the documentation for azd infra generate in your web browser.
  -e, --environment string   The name of the environment to use.
      --force                Overwrite any existing files without prompting
  -h, --help                 Gets help for generate.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd init

Initialize a new application.

Synopsis

Initialize a new application.

When used with --template, a new directory is created (named after the template)
and the project is initialized inside it — similar to git clone.
Pass "." as the directory to initialize in the current directory instead.

azd init [flags]

Options

  -b, --branch string         The template branch to initialize from. Must be used with a template argument (--template or -t).
      --docs                  Opens the documentation for azd init in your web browser.
  -e, --environment string    The name of the environment to use.
  -f, --filter strings        The tag(s) used to filter template results. Supports comma-separated values.
      --from-code             Initializes a new application from your existing code.
  -h, --help                  Gets help for init.
  -l, --location string       Azure location for the new environment
  -m, --minimal               Initializes a minimal project.
  -s, --subscription string   ID of an Azure subscription to use for the new environment
  -t, --template string       Initializes a new application from a template. You can use a Full URI, <owner>/<repository>, <repository> if it's part of the azure-samples organization, or a local directory path (./dir, ../dir, or absolute path).
      --up                    Provision and deploy to Azure after initializing the project from a template.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd mcp

Manage Model Context Protocol (MCP) server. (Alpha)

Options

      --docs   Opens the documentation for azd mcp in your web browser.
  -h, --help   Gets help for mcp.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd mcp start

Starts the MCP server.

Synopsis

Starts the Model Context Protocol (MCP) server.

This command starts an MCP server that can be used by MCP clients to access
azd functionality through the Model Context Protocol interface.

azd mcp start [flags]

Options

      --docs   Opens the documentation for azd mcp start in your web browser.
  -h, --help   Gets help for start.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd monitor

Monitor a deployed project.

azd monitor [flags]

Options

      --docs                 Opens the documentation for azd monitor in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for monitor.
      --live                 Open a browser to Application Insights Live Metrics. Live Metrics is currently not supported for Python apps.
      --logs                 Open a browser to Application Insights Logs.
      --overview             Open a browser to Application Insights Overview Dashboard.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd package

Packages the project's code to be deployed to Azure.

azd package <service> [flags]

Options

      --all                  Packages all services that are listed in azure.yaml
      --docs                 Opens the documentation for azd package in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for package.
      --output-path string   File or folder path where the generated packages will be saved.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd pipeline

Manage and configure your deployment pipelines.

Options

      --docs   Opens the documentation for azd pipeline in your web browser.
  -h, --help   Gets help for pipeline.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd pipeline config

Configure your deployment pipeline to connect securely to Azure. (Beta)

azd pipeline config [flags]

Options

  -m, --applicationServiceManagementReference string   Service Management Reference. References application or service contact information from a Service or Asset Management database. This value must be a Universally Unique Identifier (UUID). You can set this value globally by running azd config set pipeline.config.applicationServiceManagementReference <UUID>.
      --auth-type string                               The authentication type used between the pipeline provider and Azure for deployment (Only valid for GitHub provider). Valid values: federated, client-credentials.
      --docs                                           Opens the documentation for azd pipeline config in your web browser.
  -e, --environment string                             The name of the environment to use.
  -h, --help                                           Gets help for config.
      --principal-id string                            The client id of the service principal to use to grant access to Azure resources as part of the pipeline.
      --principal-name string                          The name of the service principal to use to grant access to Azure resources as part of the pipeline.
      --principal-role stringArray                     The roles to assign to the service principal. By default the service principal will be granted the Contributor and User Access Administrator roles. (default [Contributor,User Access Administrator])
      --provider string                                The pipeline provider to use (github for Github Actions and azdo for Azure Pipelines).
      --remote-name string                             The name of the git remote to configure the pipeline to run on. (default "origin")

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd provision

Provision Azure resources for your project.

azd provision [<layer>] [flags]

Options

      --docs                  Opens the documentation for azd provision in your web browser.
  -e, --environment string    The name of the environment to use.
  -h, --help                  Gets help for provision.
  -l, --location string       Azure location for the new environment
      --no-state              (Bicep only) Forces a fresh deployment based on current Bicep template files, ignoring any stored deployment state.
      --preview               Preview changes to Azure resources.
      --subscription string   ID of an Azure subscription to use for the new environment

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd publish

Publish a service to a container registry.

azd publish <service> [flags]

Options

      --all                   Publishes all services that are listed in azure.yaml
      --docs                  Opens the documentation for azd publish in your web browser.
  -e, --environment string    The name of the environment to use.
      --from-package string   Publishes the service from a container image (image tag).
  -h, --help                  Gets help for publish.
      --to string             The target container image in the form '[registry/]repository[:tag]' to publish to.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd restore

Restores the project's dependencies.

azd restore <service> [flags]

Options

      --all                  Restores all services that are listed in azure.yaml
      --docs                 Opens the documentation for azd restore in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for restore.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd show

Display information about your project and its resources.

azd show [resource-name|resource-id] [flags]

Options

      --docs                 Opens the documentation for azd show in your web browser.
  -e, --environment string   The name of the environment to use.
  -h, --help                 Gets help for show.
      --show-secrets         Unmask secrets in output.

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template

Find and view template details.

Options

      --docs   Opens the documentation for azd template in your web browser.
  -h, --help   Gets help for template.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template list

Show list of sample azd templates. (Beta)

azd template list [flags]

Options

      --docs             Opens the documentation for azd template list in your web browser.
  -f, --filter strings   The tag(s) used to filter template results. Supports comma-separated values.
  -h, --help             Gets help for list.
  -s, --source string    Filters templates by source.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template show

Show details for a given template. (Beta)

azd template show <template> [flags]

Options

      --docs   Opens the documentation for azd template show in your web browser.
  -h, --help   Gets help for show.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template source

View and manage template sources. (Beta)

Options

      --docs   Opens the documentation for azd template source in your web browser.
  -h, --help   Gets help for source.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template source add

Adds an azd template source with the specified key. (Beta)

Synopsis

The key can be any value that uniquely identifies the template source, with well-known values being:
・default: Default templates
・awesome-azd: Templates from https://aka.ms/awesome-azd

azd template source add <key> [flags]

Options

      --docs              Opens the documentation for azd template source add in your web browser.
  -h, --help              Gets help for add.
  -l, --location string   Location of the template source. Required when using type flag.
  -n, --name string       Display name of the template source.
  -t, --type string       Kind of the template source. Supported types are 'file', 'url' and 'gh'.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template source list

Lists the configured azd template sources. (Beta)

azd template source list [flags]

Options

      --docs   Opens the documentation for azd template source list in your web browser.
  -h, --help   Gets help for list.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd template source remove

Removes the specified azd template source (Beta)

azd template source remove <key> [flags]

Options

      --docs   Opens the documentation for azd template source remove in your web browser.
  -h, --help   Gets help for remove.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool

Manage Azure development tools.

Synopsis

Discover, install, upgrade, and check status of Azure development tools.

Options

      --docs   Opens the documentation for azd tool in your web browser.
  -h, --help   Gets help for tool.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool check

Check for tool updates.

azd tool check [flags]

Options

      --docs   Opens the documentation for azd tool check in your web browser.
  -h, --help   Gets help for check.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool install

Install specified tools.

azd tool install [tool-name...] [flags]

Options

      --all       Install all recommended tools
      --docs      Opens the documentation for azd tool install in your web browser.
      --dry-run   Preview what would be installed without making changes
  -h, --help      Gets help for install.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool list

List all tools with status.

azd tool list [flags]

Options

      --docs   Opens the documentation for azd tool list in your web browser.
  -h, --help   Gets help for list.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool show

Show details for a specific tool.

azd tool show <tool-name> [flags]

Options

      --docs   Opens the documentation for azd tool show in your web browser.
  -h, --help   Gets help for show.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd tool upgrade

Upgrade installed tools.

azd tool upgrade [tool-name...] [flags]

Options

      --docs      Opens the documentation for azd tool upgrade in your web browser.
      --dry-run   Preview what would be upgraded without making changes
  -h, --help      Gets help for upgrade.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd up

Provision and deploy your project to Azure with a single command.

azd up [flags]

Options

      --docs                  Opens the documentation for azd up in your web browser.
  -e, --environment string    The name of the environment to use.
  -h, --help                  Gets help for up.
  -l, --location string       Azure location for the new environment
      --subscription string   ID of an Azure subscription to use for the new environment

Options inherited from parent commands

  -C, --cwd string   Sets the current working directory.
      --debug        Enables debugging and diagnostics logging.
      --no-prompt    Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd update

Updates azd to the latest version.

azd update [flags]

Options

      --channel string             Update channel: stable or daily.
      --check-interval-hours int   Override the update check interval in hours.
      --docs                       Opens the documentation for azd update in your web browser.
  -h, --help                       Gets help for update.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

azd version

Print the version number of Azure Developer CLI.

azd version [flags]

Options

      --docs   Opens the documentation for azd version in your web browser.
  -h, --help   Gets help for version.

Options inherited from parent commands

  -C, --cwd string           Sets the current working directory.
      --debug                Enables debugging and diagnostics logging.
  -e, --environment string   The name of the environment to use.
      --no-prompt            Runs without prompts. Uses existing values; fails if any required value or decision cannot be resolved automatically.

See also

@kristenwomack
Copy link
Copy Markdown
Collaborator

Thanks @wbreza, nice surface, and the iteration with @jongio and @vhvb1989 tightened it up well. Three things I''d like to see in this PR before promoting to customers:

  1. CHANGELOG entry. cli/azd/CHANGELOG.md 1.25.0-beta.1 → Features Added is empty. This is a big, customer-visible change, and folks should see it called out in the next release notes.
  2. Feature stage: ship as Beta. Right now tool registers under CmdGroupManage (same tier as stable config), but extension itself is still Alpha in docs/reference/feature-status.md. I''d recommend marking this Beta, then graduating to Stable once telemetry from azd tool: add custom telemetry for tool management product insights #7959 is in and we''ve seen early customer reception. That gives us room to iterate on naming and the init overlap without breaking-change pressure.
  3. Add a row to docs/reference/feature-status.md. .github/instructions/documentation.instructions.md calls this out as required for new commands.

On the azd init first-run overlap (cli/azd/cmd/root.go, around isWorkflowCommand / CmdGroupStart):

As I mentioned, we''ll hold on #7678 until after the azd tool command group ships, so the init UX revamp can account for the first-run tool-check banner from the start. Flagging it here so the sequencing is captured on the PR for anyone catching up later.


On naming and help text (cli/azd/cmd/tool.go, command Short/Long):

Two small things on the user-facing surface:

  • The Short and Long ("Manage Azure development tools" and "Discover, install, upgrade, and check status of Azure development tools") don''t distinguish azd tool from azd extension. The bare azd tool flow can install azd extensions, so the relationship deserves to be explicit. Worth one editorial pass to clarify "external developer prerequisites" vs. "azd extensibility surface."
  • Worth a name review before this stabilizes. tool is generic enough that azd setup, azd doctor, or azd deps might communicate "developer prerequisites" more precisely. Happy to pull a few of us together to talk through it. Cheaper to rename now than after customers are using it.

On the package layout (cli/azd/pkg/tool/):

Heads up that pkg/tool/ (new, singular) lives next to pkg/tools/ (existing, the az, bicep, docker, gh, and kubectl wrappers per cli/azd/AGENTS.md). Future contributors are going to mis-import these constantly. Consider pkg/toolmgr/, pkg/toolcatalog/, or pkg/devtools/ to disambiguate.


Design doc and governance (soft ask):

Could we add a short design doc under cli/azd/docs/design/ (similar to azd-update.md) covering tool-registry governance, who can add, remove, or reprioritize tools, and named contacts for Azure CLI, Bicep, gh CLI, VS Code extensions, and Azure MCP? It helps the deferred follow-ups (#7849, #7960) start with shared context, and gives partner teams a doc to point at.

Copy link
Copy Markdown
Member

@jongio jongio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed against the rebased HEAD (d48d0c4). All prior findings confirmed addressed:

  • PersistentPreRun override removed
  • Shell pipe handling fixed via containsShellOperators routing
  • Error wrapping consistent with fmt.Errorf %w
  • Telemetry mapping added for ErrToolUpgradeFailed

Architecture is clean with proper separation (Manager/Detector/Installer/UpdateChecker), good DI via IoC, and middleware correctly gates on CI/non-interactive/no-prompt. Test coverage looks solid.

@rajeshkamal5050
Copy link
Copy Markdown
Contributor

CHANGELOG entry. cli/azd/CHANGELOG.md 1.25.0-beta.1 → Features Added is empty. This is a big, customer-visible change, and folks should see it called out in the next release notes.

@wbreza Are we ready to release it in Beta/public-preview this week? I feel this needs more testing and dogfooding?

@v-xuto can we prioritize and test the azd tool feature this week?

@wbreza wbreza merged commit 6293e57 into Azure:main May 5, 2026
32 checks passed
@v-xuto
Copy link
Copy Markdown
Member

v-xuto commented May 6, 2026

@v-xuto can we prioritize and test the azd tool feature this week?

Got it. We will begin testing azd tool feature today.

@v-xuto
Copy link
Copy Markdown
Member

v-xuto commented May 6, 2026

@rajeshkamal5050 We completed the related testing for the azd tool feature and filed two issues: #8069, #8070.

The following table shows the detailed test results:

Command Windows Linux Mac
azd tool PASS PASS PASS
azd tool list PASS PASS PASS
azd tool show PASS PASS PASS
azd tool check #8070 #8070 #8070
azd tool install [ids...] #8069 #8069 PASS
azd tool upgrade [ids...] PASS PASS PASS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[EPIC] B: First-Run Experience [EPIC] A: Core Command Group & Installation Engine

10 participants