azdash Sergio Triana Escobedo
winget install --id=stescobedo92.azdash -e azdash is an Azure-focused C++23 CLI for Azure spending, six-month cost trends, and waste signals, rendered with FTXUI tables, JSON, CSV, or PDF reports.
winget install --id=stescobedo92.azdash -e azdash is an Azure-focused C++23 CLI for Azure spending, six-month cost trends, and waste signals, rendered with FTXUI tables, JSON, CSV, or PDF reports.
azdash is an Azure-focused C++23 CLI. It audits Azure spending,
Six-month cost trends, and waste signals from Azure Advisor, plus resource
heuristics, then renders the results as an FTXUI table, JSON, CSV, or a PDF
report.
The implementation is intentionally layered:
IAzureClient abstracts Azure data providers, allowing interchangeable backends:
AzureCliClient gathers data through the official Azure CLI.AzureRestClient communicates directly with Azure ARM REST APIs (management.azure.com) via OAuth2 client credentials without requiring the Azure CLI or Python.analytics contains template-based generic helpers with concepts for aggregation, multi-tag filtering, anomaly detection, and Bayesian shrinkage projections.cache persists closed historical months locally with atomic writes to speed up repeat runs.ui provides a terminal user interface (TUI) powered by FTXUI with 4 tabs, drilldown, and sparklines.webhook sends structured alert notifications to Slack, Microsoft Teams, and generic JSON endpoints.cli_parser encapsulates CLI grammar, validation, and help formatting.cli_parser encapsulates CLI grammar, validation, and help formatting.render owns FTXUI, JSON, CSV, Markdown, and responsive HTML presentation.report writes multi-page stakeholder-friendly PDF reports with headers and page numbering.azdash audit / scorecard): Complete governance audit evaluating cloud posture across 5 core FinOps pillars (Tag Allocation & Hygiene, Waste & Idle Efficiency, Rate Optimization & Commitments, Budgeting & Guardrails, and Variance & Anomaly Control). Calculates weighted score (0-100), FinOps Maturity Stage (Crawl, Walk, Run), letter grade (A+ through F), and prioritizes actionable quick wins. Enforce CI/CD quality gates with --min-score .azdash carbon / greenops): Enterprise cloud sustainability estimator modeling electricity consumption (kWh), location-based Scope 2 emissions, market-based Scope 2 matching, and Scope 3 embodied carbon across major Azure regional electricity grids (e.g. Sweden Central at 18 g/kWh vs East US at 380 g/kWh). Computes avoided carbon ($kg\ CO_2e$) from eliminating detected waste, EPA equivalencies (passenger cars/yr, tree seedlings), and CI/CD emissions fail gates (--fail-if-carbon-exceeds ).azdash ui): Terminal GUI with 6 navigable tabs (Cost Drilldown, 6-Month Trends, Waste Findings, Budgets & Commitments, Tag Governance, and Account & Aliases), live sparklines, and detailed finding inspectors.azdash anomaly): Statistical Z-Score spike detection decomposing spikes across services with delta, % change, spike contribution share, and impact severity (Critical, High, Medium, Low). Configurable sensitivity (--anomaly-threshold) and CI/CD failure gate (--fail-on-anomaly).--projection holt-winters): Double exponential smoothing with level ($\alpha=0.5$) and trend ($\beta=0.3$) adapting to accelerating expenditure curves.--remediation-format terraform|bicep|bash): Generate native Terraform removed blocks or shell scripts to automate resource decommissioning directly from detected waste findings.--rest): Standalone mode using OAuth2 Service Principal credentials (AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID) without needing Python or the Azure CLI.azdash budget): Track consumption budgets against current spend with visual progress bars and exceeded indicators.azdash commitments / ri): Compute Savings Plans and Reserved Instances (1-year / 3-year) recommendations with potential monthly savings calculations.--management-group / --mg): Recursively query and aggregate costs across all subscriptions under an Azure Management Group.-i / --interactive): Step-by-step interactive prompt to inspect and safely apply cleanup actions with full --dry-run simulation support.--filter-tag): Filter resources with syntax supporting exact matches (k=v), multi-value OR (k=v1,v2), negation (k!=v), existence (k), and absence (!k).azdash compliance): Audit Azure resources against required tags (--required-tags), measure unallocated untagged spend, generate auto-tag remediation scripts (--generate-remediation), and enforce CI/CD compliance gates (--min-compliance ).-o html): Generate modern, standalone executive HTML dashboards for costs, trends, waste, budgets, commitments, compliance, anomalies, audit scorecard, and carbon footprint..azdashrc / azdash.json / --config): Automatic configuration discovery from local directory or ~/.azdash/config.json with CLI flag override precedence.--fast): Trim 80-90% of payload bandwidth by projecting fields directly within Azure CLI queries.--no-cache to bypass): Cache finalized historical billing months in local storage with atomic writes for instant trend reports.--webhook ): Automatic notifications with severity coloring dispatched to Slack, Microsoft Teams (MessageCards), or generic JSON endpoints.--projection weighted): Shrinkage model accounting for end-of-month acceleration and historical spending patterns.billingCurrency across all views, tables, JSON exports, and PDF reports.Page X of Y footers.alias-sub): Map long subscription GUIDs to friendly short names.brew install stescobedo92/tap/azdash
npm install -g @stescobedo9205/azdash
azdash version
The npm package exposes the CLI as the azdash command and downloads the
matching GitHub Release binary during installation.
Each release publishes portable archives and native installer packages:
azdash-windows-x64.zipazdash-linux-x64.deb, azdash-linux-x64.rpm,
azdash-ubuntu-latest.tar.gzazdash-macos.pkg, azdash-macos.dmg,
azdash-macos-latest.tar.gzDownload them from the GitHub Releases page.
Coming soon. The package name is expected to be stescobedo92-azdash, with the
installed CLI command azdash, once the upstream vcpkg pull request is
approved.
Coming soon. The expected command is:
winget install azdash
The terminal UI is rendered with FTXUI for styled command panels, tables, progress bars, success states, and errors. JSON and CSV output remain plain for scripts.







More public-safe examples are available in assets/screenshots, including
alias lifecycle commands, update guidance, report generation, and error states.
az login.Azure cost data is read with az consumption usage list; Advisor data is read
with az advisor recommendation list. The Azure CLI documentation currently
marks Advisor recommendations as GA and Consumption as preview.
link-account fails with "failed to reach the Azure CLI": make sure the Azure
CLI is installed and on PATH, and that az login succeeds. On Windows the
CLI ships as az.cmd; azdash resolves and launches it for you.RBACAccessDenied: your signed-in account
lacks permission to read consumption data. Ask for the Cost Management
Reader or Billing Reader role on the subscription, or target one where you
hold it with --subscription. Run azdash link-account to confirm which
account is active.cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
cmake --build build
ctest --test-dir build --output-on-failure
docker build -t azdash .
docker run --rm -it -v "$HOME/.azure:/home/azdash/.azure:ro" azdash cost
# Launch the interactive terminal UI (FTXUI 4-tab dashboard)
azdash ui
# Confirm azdash can reach the account you authenticated with `az login`
azdash link-account
# Cost comparison: current month vs previous matching window
azdash cost
# Use Bayesian weighted or Holt-Winters exponential trend projection
azdash --projection weighted cost
azdash --projection holt-winters cost
# Direct Azure REST API mode (without Azure CLI, using OAuth2 SP credentials)
azdash --rest cost
# Filter costs by Azure tag expressions (e.g. Env=Prod or multi-value)
azdash --filter-tag "Environment=Production" cost
# Target an entire Azure Management Group recursively
azdash --management-group "mg-enterprise" cost
# Cost breakdown by resource group instead of service
azdash --group-by resource-group cost
# Track consumption budgets and threshold progress
azdash budget
azdash --budget "Q3-Production" budget
# Commitments analysis (Compute Savings Plans and Reserved Instances)
azdash commitments
azdash ri --term 3yr --min-savings 100
# Tag compliance governance audit & cost allocation
azdash compliance
azdash compliance --required-tags "Environment,Owner,CostCenter,Application"
azdash --min-compliance 85.0 compliance # Return exit code 2 if compliance < 85%
azdash --generate-remediation ./fix_tags.sh compliance # Output az resource tag script
# Load configuration defaults (.azdashrc, azdash.json, or custom path)
azdash --config ./finops-team.json cost
# Generate executive responsive HTML dashboards
azdash -o html cost > cost_report.html
azdash -o html compliance > compliance_report.html
azdash -o html anomaly > anomaly_report.html
# Send Slack / Teams alert notifications upon budget overrun, anomalies, or compliance breaches
azdash --webhook "https://hooks.slack.com/services/..." --fail-if-exceeds 1000 cost
azdash --webhook "https://hooks.slack.com/services/..." --min-compliance 90 compliance
azdash --webhook "https://hooks.slack.com/services/..." anomaly
# JSON, CSV, or Markdown output
azdash --output json cost
azdash --output csv waste advisor compute
azdash --output markdown cost
# Statistical anomaly check with service-level root cause driver attribution
azdash anomaly
azdash --anomaly-threshold 2.5 anomaly
azdash --fail-on-anomaly anomaly # Return exit code 2 if cost spike detected (CI/CD gate)
# FinOps Foundation Maturity Scorecard & Governance Audit
azdash audit
azdash --min-score 80.0 audit # Return exit code 2 if FinOps maturity score is below 80 (CI/CD gate)
azdash -o html audit > audit_scorecard.html
# GreenOps Cloud Carbon Footprint & Sustainability Estimation
azdash carbon
azdash --default-region swedencentral carbon
azdash --fail-if-carbon-exceeds 1.5 carbon # Fail if carbon footprint crosses 1.5 MT CO2e
azdash -o html carbon > carbon_footprint.html
# Interactive waste remediation with confirmation prompt
azdash -i waste
# Generate automated cleanup script (bash or Terraform IaC removal plan)
azdash --dry-run --generate-remediation ./cleanup.sh waste
azdash --remediation-format terraform --generate-remediation ./cleanup.tf waste
# Locally recorded snapshots of past cost runs
azdash history
azdash --output json history
# Create and use a local subscription alias
azdash alias-sub set prod "00000000-0000-0000-0000-000000000000"
azdash --subscription prod cost
azdash alias-sub list
# Use a specific subscription directly
azdash --subscription "00000000-0000-0000-0000-000000000000" trend
# Fast server-side projection to reduce Azure CLI bandwidth
azdash --fast trend "Virtual Machines" "Storage"
# Waste checks
azdash waste
azdash waste advisor compute network
# PDF reports
azdash report cost --path ./reports
azdash report trend "Virtual Machines" --path ./reports/trend.pdf
azdash report waste compute network --path ./reports/waste.pdf
# Local version and update guidance
azdash version
azdash update
Cost snapshots are stored in cost-history.json next to the subscription alias
store: AZDASH_CONFIG_HOME when set, otherwise XDG_CONFIG_HOME/azdash or
~/.config/azdash.
The repository doubles as a composite GitHub Action that runs azdash cost,
adds the Markdown report to the job summary, and keeps a sticky comment updated
on pull requests. Authenticate with azure/login first:
name: azure-cost-report
on:
pull_request:
permissions:
contents: read
pull-requests: write
id-token: write
jobs:
cost:
runs-on: ubuntu-latest
steps:
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- uses: stescobedo92/az-dashboard@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
args: "--group-by resource-group"
fail-if-exceeds: "500"
Inputs: version (release tag, defaults to the latest release), args
(extra azdash cost arguments), fail-if-exceeds (fails the job when the
current month cost crosses the amount), and github-token (omit it to skip
the PR comment). The rendered report is also exposed as the report output.