Skip to main content
Any Framework

Windows system tray monitor for Aspire distributed applications. Install as a global tool and launch with `aspiremon`. See your Aspire resources at a glance, pin the ones you care about in a compact mini window with full URLs, and start/stop your AppHost from the tray.

Published
Apr 27, 2026
5mo ago
Total Downloads
1.7K
1,733

Install

dotnet add package ElBruno.AspireMonitor --version 1.4.0

No framework information available.

README

ElBruno.AspireMonitor

NuGet Downloads Build Status .NET License: MIT

A Windows system tray monitor for Aspire distributed applications.

Point it at your Aspire AppHost folder, pin the resources you care about, and get a compact mini window with live URLs and Start/Stop controls β€” without leaving the tray.

What It Does

ElBruno.AspireMonitor is a lightweight Windows tray tool that:

  1. Watches a working folder β€” point it at the directory containing your Aspire *.AppHost.csproj
  2. Discovers resources β€” shells out to aspire describe --format json and parses the result
  3. Surfaces what matters β€” lists every resource in the main window, and pins your chosen ones (with their real URLs) in a compact mini window
  4. Drives your AppHost β€” Start / Stop buttons run aspire run and shut it down cleanly, with a live countdown while Aspire spins up

No third-party Aspire SDK dependency. No agents. Just a tray app talking to the Aspire CLI.

🎯 Features

Feature Description
πŸͺŸ Tray + main window + mini window Click the tray icon for the full resource list; the mini window pins just what you care about
πŸ“Œ Pinned resources Comma-separated MiniWindowResources setting pins resources by name prefix (case-insensitive β€” web matches Aspire's web-xggqzmyn replicas)
πŸ”— Full URLs inline Pinned resources show their actual endpoint (http://localhost:5021), not a generic "Open" link
▢️ Start / Stop controls Run or stop your AppHost from the tray. Start stays disabled with a live countdown (⏳ Starting Aspire... (12 / 90s)) until resources actually appear
πŸ›‘ Pinned-resource validation Missing pins are skipped, not crashes β€” the mini window opens with whatever resolved
βš™οΈ Live config reload Changes in Settings apply without restarting the app
πŸ”„ Configurable polling Default 2 second interval, override in config

⚑ Quick Start

  1. Install as a .NET global tool: dotnet tool install --global ElBruno.AspireMonitor
  2. Launch with aspiremon from any terminal
  3. Set working folder when prompted (point to your Aspire AppHost directory)
  4. Start monitoring β€” Run aspire run from that directory; the tray icon will turn green with resources listed

Install as a .NET Global Tool (recommended):

dotnet tool install --global ElBruno.AspireMonitor

Then launch anytime from any terminal:

aspiremon

The tool is Windows-only (the underlying app is WPF). Requires the .NET 10 Runtime.

Or download the executable from GitHub Releases.

For detailed setup instructions, see Quick Start Guide.

πŸ“‹ Requirements

  • Windows 10 or later (WPF is Windows-only)
  • .NET 10 Runtime (download)
  • .NET Aspire running locally on your machine

πŸš€ Usage

First Run

Install the global tool and launch it:

dotnet tool install --global ElBruno.AspireMonitor
aspiremon

On first run, you'll be prompted for your working folder:

Enter working folder (path to your Aspire AppHost project):
C:\Projects\MyAspireApp

System Tray

  • Click icon β€” show/hide the main window
  • Double-click β€” toggle the main window
  • Right-click β€” context menu (Settings, Mini window, Exit)

The app watches your working folder. When aspire run is active, resources appear automatically.

Configuration

Open the in-app Settings dialog, or edit:

%APPDATA%\Local\ElBruno\AspireMonitor\config.json

Example:

{
  "WorkingFolder": "C:\\Projects\\MyApp\\src\\MyApp.AppHost",
  "AspireHostUrl": "http://localhost:18888",
  "PollingIntervalMs": 2000,
  "MiniWindowResources": "web, store, gateway"
}
Field Purpose
WorkingFolder Folder containing your Aspire *.AppHost.csproj
AspireHostUrl Aspire dashboard URL (default http://localhost:18888)
PollingIntervalMs Resource refresh interval (default 2000)
MiniWindowResources Comma-separated list of resource name prefixes to pin to the mini window. Empty = mini window only shows the dashboard link. Case-insensitive prefix match (e.g. web matches web-xggqzmyn)

See Configuration Guide for all options.

πŸ“š Documentation

πŸ’‘ Use Cases

  • Local Development β€” keep your AppHost one click away while coding
  • Quick Status Checks β€” pin the two or three resources you actually hit and see their live URLs without opening the dashboard
  • Demos β€” Start / Stop from the tray during walkthroughs
  • Multi-window setups β€” the mini window stays out of the way and resizes itself

πŸ—οΈ Architecture Highlights

  • Service-Oriented β€” AspireCliService (process I/O) β†’ AspirePollingService (interval) β†’ MainViewModel β†’ views
  • MVVM β€” testable view models, thin XAML, all business logic covered by xUnit + Moq
  • Live config reload β€” settings changes flow through without restarting
  • Pinned-resource matcher β€” case-insensitive prefix match against aspire describe output, with graceful handling of missing pins

See Architecture Guide for detailed design decisions and data flows.

πŸ“¦ Installation & Updates

Install

dotnet tool install --global ElBruno.AspireMonitor

Then run aspiremon from any terminal.

Update

dotnet tool update --global ElBruno.AspireMonitor

Uninstall

dotnet tool uninstall --global ElBruno.AspireMonitor

Verify Version

dotnet tool list --global

πŸ› Troubleshooting

Aspire instance not found?

  1. Verify Aspire is running: aspire run in your working folder
  2. Check the working folder setting in config: %APPDATA%\Local\ElBruno\AspireMonitor\config.json
  3. See Troubleshooting Guide for more solutions

Tray icon not visible?

  • Check Windows notification area (click β–² in system tray)
  • Verify AspireMonitor is running: tasklist | findstr aspire
  • Restart the application and check tray icon placement
  • See Troubleshooting Guide

🀝 Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Make changes and write/update tests
  4. Run full test suite: dotnet test
  5. Commit with clear messages
  6. Open a Pull Request

See Development Guide for setup and workflow.

πŸ“„ License

MIT License β€” See LICENSE file for details.

πŸ‘‹ About the Author

Bruno Capuano @elbruno
Microsoft AI MVP | GitHub Star


Built with ❀️ for the Aspire community

Questions? Open an issue or reach out on GitHub Discussions.

Changes from Previous Version

No structural changes between v1.3.0 and v1.4.0.

Adoption Assessment

Assess this package against its supported frameworks, license, maintenance signals and dependency graph before making it a project standard.

No target framework metadata is available. Confirm compatibility in a representative project before standardising on this package.

Related Guides & Workflows

Learn how to evaluate, integrate, or audit this package in your .NET project.