Aspire
GitHubOfficialFirst committed by ChrisMcKee1Distributed by GitHub
- Skill
- Tool integration
- Software development
- MIT
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Aspire is a code-first, polyglot orchestration framework designed to simplify the development, debugging, and deployment of distributed applications. It uses an AppHost project to manage the lifecycle of containers, executables, and cloud resources, providing a unified developer experience across various languages including C#, Python, Go, and JavaScript. The framework includes a local Developer Control Plane (DCP) for orchestration, a real-time dashboard for observability, and built-in support for service discovery and infrastructure integrations.
What it does
- Orchestrates multi-service applications via a central AppHost project.
- Provides a local runtime engine (DCP) for managing resource lifecycles.
- Automates service discovery and configuration through environment variable injection.
- Offers a real-time dashboard for monitoring logs, traces, and metrics.
- Supports polyglot workloads including .NET, Python, Go, and Node.js.
- Generates deployment manifests for cloud environments like Kubernetes and Azure.
When to use it
- When building a distributed system that requires local orchestration of multiple services.
- When you need to manage dependencies between containers, databases, and APIs.
- When you want to simplify service discovery and configuration in a polyglot environment.
- When you need to transition from local development to cloud deployment using standardized manifests.
- When you require integrated observability and health checks during the development loop.
Advantages
- Unified developer experience for polyglot distributed systems.
- Code-first approach allows for programmatic infrastructure definition.
- Automatic service discovery reduces manual configuration overhead.
- Integrated dashboard provides immediate visibility into system health and logs.
- Supports standard container runtimes and cloud-native deployment targets.
Usage examples
- “Create a new Aspire project with a starter template.”
- The agent executes 'aspire new aspire-starter' to generate a project structure containing an AppHost, service defaults, and sample services.
- “How do I add a Redis cache to my existing Aspire AppHost?”
- The agent guides you to run 'aspire add redis' and shows how to wire the resource in your AppHost using '.WithReference(redis)'.
- “Run my distributed application locally.”
- The agent triggers 'aspire run', which builds the AppHost, starts the DCP engine, manages resource dependencies, and opens the Aspire dashboard.
- “How can I deploy my Aspire application to Kubernetes?”
- The agent explains the use of 'aspire publish' to generate the necessary deployment manifests for your target environment.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/github/aspire/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip aspire.zip -d .agents/skills
Documentation by ChrisMcKee1
Aspire — Polyglot Distributed-App Orchestration
Aspire is a code-first, polyglot toolchain for building observable, production-ready distributed applications. It orchestrates containers, executables, and cloud resources from a single AppHost project — regardless of whether the workloads are C#, Python, JavaScript/TypeScript, Go, Java, Rust, Bun, Deno, or PowerShell.
Mental model: The AppHost is a conductor — it doesn't play the instruments, it tells every service when to start, how to find each other, and watches for problems.
Detailed reference material lives in the references/ folder — load on demand.
References
| Reference | When to load |
|---|---|
| CLI Reference | Command flags, options, or detailed usage |
| MCP Server | Setting up MCP for AI assistants, available tools |
| Integrations Catalog | Discovering integrations via MCP tools, wiring patterns |
| Polyglot APIs | Method signatures, chaining options, language-specific patterns |
| Architecture | DCP internals, resource model, service discovery, networking, telemetry |
| Dashboard | Dashboard features, standalone mode, GenAI Visualizer |
| Deployment | Docker, Kubernetes, Azure Container Apps, App Service |
| Testing | Integration tests against the AppHost |
| Troubleshooting | Diagnostic codes, common errors, and fixes |
1. Researching Aspire Documentation
The Aspire team ships an MCP server that provides documentation tools directly inside your AI assistant. See MCP Server for setup details.
Aspire CLI 13.2+ (recommended — has built-in docs search)
If running Aspire CLI 13.2 or later (aspire --version), the MCP server includes docs search tools:
| Tool | Description |
|---|---|
list_docs | Lists all available documentation from aspire.dev |
search_docs | Performs weighted lexical search across indexed documentation |
get_doc | Retrieves a specific document by its slug |
These tools were added in PR #14028. To update: aspire update --self --channel daily.
For more on this approach, see David Pine's post: https://davidpine.dev/posts/aspire-docs-mcp-tools/
Aspire CLI 13.1 (integration tools only)
On 13.1, the MCP server provides integration lookup but not docs search:
| Tool | Description |
|---|---|
list_integrations | Lists available Aspire hosting integrations |
get_integration_docs | Gets documentation for a specific integration package |
For general docs queries on 13.1, use Context7 as your primary source (see below).
Fallback: Context7
Use Context7 (mcp_context7) when the Aspire MCP docs tools are unavailable (13.1) or the MCP server isn't running:
Step 1 — Resolve the library ID (one-time per session):
Call mcp_context7_resolve-library-id with libraryName: ".NET Aspire".
| Rank | Library ID | Use when |
|---|---|---|
| 1 | /microsoft/aspire.dev | Primary source. Guides, integrations, CLI reference, deployment. |
| 2 | /dotnet/aspire | API internals, source-level implementation details. |
| 3 | /communitytoolkit/aspire | Non-Microsoft polyglot integrations (Go, Java, Node.js, Ollama). |
Step 2 — Query docs:
libraryId: "/microsoft/aspire.dev", query: "Python integration AddPythonApp service discovery"
libraryId: "/communitytoolkit/aspire", query: "Golang Java Node.js community integrations"Fallback: GitHub search (when Context7 is also unavailable)
Search the official docs repo on GitHub:
Docs repo:
microsoft/aspire.dev— path:src/frontend/src/content/docs/Source repo:
dotnet/aspireSamples repo:
dotnet/aspire-samplesCommunity integrations:
CommunityToolkit/Aspire
2. Prerequisites & Install
| Requirement | Details |
|---|---|
| .NET SDK | 10.0+ (required even for non-.NET workloads — the AppHost is .NET) |
| Container runtime | Docker Desktop, Podman, or Rancher Desktop |
| IDE (optional) | VS Code + C# Dev Kit, Visual Studio 2022, JetBrains Rider |
# Linux / macOS
curl -sSL https://aspire.dev/install.sh | bash
# Windows PowerShell
irm https://aspire.dev/install.ps1 | iex
# Verify
aspire --version
# Install templates
dotnet new install Aspire.ProjectTemplates3. Project Templates
| Template | Command | Description |
|---|---|---|
| aspire-starter | aspire new aspire-starter | ASP.NET Core/Blazor starter + AppHost + tests |
| aspire-ts-cs-starter | aspire new aspire-ts-cs-starter | ASP.NET Core/React starter + AppHost |
| aspire-py-starter | aspire new aspire-py-starter | FastAPI/React starter + AppHost |
| aspire-apphost-singlefile | aspire new aspire-apphost-singlefile | Empty single-file AppHost |
4. AppHost Quick Start (Polyglot)
The AppHost orchestrates all services. Non-.NET workloads run as containers or executables.
var builder = DistributedApplication.CreateBuilder(args);
// Infrastructure
var redis = builder.AddRedis("cache");
var postgres = builder.AddPostgres("pg").AddDatabase("catalog");
// .NET API
var api = builder.AddProject<Projects.CatalogApi>("api")
.WithReference(postgres).WithReference(redis);
// Python ML service
var ml = builder.AddPythonApp("ml-service", "../ml-service", "main.py")
.WithHttpEndpoint(targetPort: 8000).WithReference(redis);
// React frontend (Vite)
var web = builder.AddViteApp("web", "../frontend")
.WithHttpEndpoint(targetPort: 5173).WithReference(api);
// Go worker
var worker = builder.AddGolangApp("worker", "../go-worker")
.WithReference(redis);
builder.Build().Run();For complete API signatures, see Polyglot APIs.
5. Core Concepts (Summary)
| Concept | Key point |
|---|---|
| Run vs Publish | aspire run = local dev (DCP engine). aspire publish = generate deployment manifests. |
| Service discovery | Automatic via env vars: ConnectionStrings__<name>, services__<name>__http__0 |
| Resource lifecycle | DAG ordering — dependencies start first. .WaitFor() gates on health checks. |
| Resource types | ProjectResource, ContainerResource, ExecutableResource, ParameterResource |
| Integrations | 144+ across 13 categories. Hosting package (AppHost) + Client package (service). |
| Dashboard | Real-time logs, traces, metrics, GenAI visualizer. Runs automatically with aspire run. |
| MCP Server | AI assistants can query running apps and search docs via CLI (STDIO). |
| Testing | Aspire.Hosting.Testing — spin up full AppHost in xUnit/MSTest/NUnit. |
| Deployment | Docker, Kubernetes, Azure Container Apps, Azure App Service. |
6. CLI Quick Reference
Valid commands in Aspire CLI 13.1:
| Command | Description | Status |
|---|---|---|
aspire new <template> | Create from template | Stable |
aspire init | Initialize in existing project | Stable |
aspire run | Start all resources locally | Stable |
aspire add <integration> | Add an integration | Stable |
aspire publish | Generate deployment manifests | Preview |
aspire config | Manage configuration settings | Stable |
aspire cache | Manage disk cache | Stable |
aspire deploy | Deploy to defined targets | Preview |
aspire do <step> | Execute a pipeline step | Preview |
aspire update | Update integrations (or --self for CLI) | Preview |
aspire mcp init | Configure MCP for AI assistants | Stable |
aspire mcp start | Start the MCP server | Stable |
Full command reference with flags: CLI Reference.
7. Common Patterns
Adding a new service
Create your service directory (any language)
Add to AppHost:
Add*App()orAddProject<T>()Wire dependencies:
.WithReference()Gate on health:
.WaitFor()if neededRun:
aspire run
Migrating from Docker Compose
aspire new aspire-apphost-singlefile(empty AppHost)Replace each
docker-composeservice with an Aspire resourcedepends_on→.WithReference()+.WaitFor()ports→.WithHttpEndpoint()environment→.WithEnvironment()or.WithReference()
8. Key URLs
| Resource | URL |
|---|---|
| Documentation | https://aspire.dev |
| Runtime repo | https://github.com/dotnet/aspire |
| Docs repo | https://github.com/microsoft/aspire.dev |
| Samples | https://github.com/dotnet/aspire-samples |
| Community Toolkit | https://github.com/CommunityToolkit/Aspire |
| Dashboard image | mcr.microsoft.com/dotnet/aspire-dashboard |
| Discord | https://aka.ms/aspire/discord |
| https://www.reddit.com/r/aspiredotdev/ |
Files
- ATTRIBUTION.mdAdded by AutoGineer851 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md9.1 KiB
- references/architecture.md10.0 KiB
- references/cli-reference.md8.5 KiB
- references/dashboard.md6.3 KiB
- references/deployment.md6.2 KiB
- references/integrations-catalog.md5.0 KiB
- references/mcp-server.md8.3 KiB
- references/polyglot-apis.md8.8 KiB
- references/testing.md7.4 KiB
- references/troubleshooting.md10.8 KiB
references/troubleshooting.md
Troubleshooting — Diagnostics & Common Issues
Diagnostic Codes
Aspire emits diagnostic codes for common issues. These appear in build warnings/errors and IDE diagnostics.
Standard diagnostics
| Code | Severity | Description |
|---|---|---|
| ASPIRE001 | Warning | Resource name contains invalid characters |
| ASPIRE002 | Warning | Duplicate resource name detected |
| ASPIRE003 | Error | Missing required package reference |
| ASPIRE004 | Warning | Deprecated API usage |
| ASPIRE005 | Error | Invalid endpoint configuration |
| ASPIRE006 | Warning | Health check not configured for resource with .WaitFor() |
| ASPIRE007 | Warning | Container image tag not specified (using latest) |
| ASPIRE008 | Error | Circular dependency detected in resource graph |
Experimental diagnostics (ASPIREHOSTINGX*)
These codes indicate usage of experimental/preview APIs. They may require #pragma warning disable or <NoWarn> if you intentionally use experimental features:
| Code | Area |
|---|---|
| ASPIRE_HOSTINGX_0001–0005 | Experimental hosting APIs |
| ASPIRE_HOSTINGX_0006–0010 | Experimental integration APIs |
| ASPIRE_HOSTINGX_0011–0015 | Experimental deployment APIs |
| ASPIRE_HOSTINGX_0016–0022 | Experimental resource model APIs |
To suppress experimental warnings:
<!-- In .csproj -->
<PropertyGroup>
<NoWarn>$(NoWarn);ASPIRE_HOSTINGX_0001</NoWarn>
</PropertyGroup>Or per-line:
#pragma warning disable ASPIRE_HOSTINGX_0001
var resource = builder.AddExperimentalResource("test");
#pragma warning restore ASPIRE_HOSTINGX_0001Common Issues & Solutions
Container runtime
| Problem | Solution |
|---|---|
| "Cannot connect to Docker daemon" | Start Docker Desktop / Podman / Rancher Desktop |
| Container fails to start | Check docker ps -a for exit codes; check dashboard console logs |
| Port already in use | Another process is using the port; Aspire auto-assigns, but targetPort must be free on the container |
| Container image pull fails | Check network connectivity; verify image name and tag |
| "Permission denied" on Linux | Add user to docker group: sudo usermod -aG docker $USER |
Service discovery
| Problem | Solution |
|---|---|
| Service can't find dependency | Verify .WithReference() in AppHost; check env vars in dashboard |
| Connection string is null | The reference resource name doesn't match; check ConnectionStrings__<name> |
| Wrong port in service URL | Check targetPort vs actual service listen port |
| Env var not set | Rebuild AppHost; verify resource name matches exactly |
Python workloads
| Problem | Solution |
|---|---|
| "Python not found" | Ensure Python is on PATH; specify full path in AddPythonApp() |
| venv not found | Use .WithVirtualEnvironment() or create venv manually |
| pip packages fail to install | Use .WithPipPackages() or install in venv before aspire run |
| ModuleNotFoundError | venv isn't activated; .WithVirtualEnvironment() handles this |
| "Port already in use" for Uvicorn | Check targetPort — another instance may be running |
JavaScript / TypeScript workloads
| Problem | Solution |
|---|---|
| "node_modules not found" | Use .WithNpmPackageInstallation() to auto-install |
| npm install fails | Check package.json is valid; check npm registry connectivity |
| Vite dev server won't start | Verify vite is in devDependencies; check Vite config |
| Port mismatch | Ensure targetPort matches the port in your JS framework config |
| TypeScript compilation errors | These happen in the service, not Aspire — check service logs |
Go workloads
| Problem | Solution |
|---|---|
| "go not found" | Ensure Go is installed and on PATH |
| Build fails | Check go.mod exists in working directory |
| "no Go files in directory" | Verify workingDir points to the directory with main.go |
Java workloads
| Problem | Solution |
|---|---|
| "java not found" | Ensure JDK is installed and JAVA_HOME is set |
| Maven/Gradle build fails | Verify build files exist; check build tool installation |
| Spring Boot won't start | Check application.properties; verify main class |
Rust workloads
| Problem | Solution |
|---|---|
| "cargo not found" | Install Rust via rustup |
| Build takes too long | Rust compile times are normal; use .WithCargoBuild() for pre-build |
Health checks & startup
| Problem | Solution |
|---|---|
| Resource stuck in "Starting" | Health check endpoint not responding; check service logs |
.WaitFor() timeout | Increase timeout or fix health endpoint; default is 30 seconds |
| Health check always fails | Verify endpoint path (default: /health); check service binds to correct port |
| Cascading startup failures | A dependency failed; check the root resource first |
Dashboard
| Problem | Solution |
|---|---|
| Dashboard doesn't open | Check terminal for URL; use --dashboard-port for fixed port |
| No logs appearing | Service may not be writing to stdout/stderr; check console output |
| No traces for non-.NET services | Configure OpenTelemetry SDK in the service; see Dashboard |
| Traces don't show cross-service calls | Propagate trace context headers (traceparent, tracestate) |
Build & configuration
| Problem | Solution |
|---|---|
"Project not found" for AddProject<T>() | Ensure .csproj is in the solution and referenced by AppHost |
| Package version conflicts | Pin all Aspire packages to the same version |
| AppHost won't build | Check Aspire.AppHost.Sdk is in the project; run dotnet restore |
aspire run build error | Fix the build error first; aspire run requires a successful build |
Deployment
| Problem | Solution |
|---|---|
aspire publish fails | Check publisher package is installed (e.g., Aspire.Hosting.Docker) |
| Generated Bicep has errors | Check for unsupported resource configurations |
| Container image push fails | Verify registry credentials and permissions |
| Missing connection strings in deployment | Check generated ConfigMaps/Secrets match resource names |
Debugging strategies
1. Check the dashboard first
The dashboard shows resource state, logs, traces, and metrics. Start here for any issue.
2. Check environment variables
In the dashboard, click a resource to see all injected environment variables. Verify connection strings and service URLs are correct.
3. Read console logs
Dashboard → Console Logs → filter by the failing resource. Raw stdout/stderr often contains the root cause.
4. Check the DAG
If services fail to start, check the dependency order. A failed dependency blocks all downstream resources.
5. Use MCP for AI-assisted debugging
If MCP is configured (see MCP Server), ask your AI assistant:
"What resources are failing?"
"Show me the logs for [service]"
"What traces show errors?"
6. Isolate the problem
Run just the failing resource by commenting out others in the AppHost. This narrows whether the issue is the resource itself or a dependency.
Getting help
| Channel | URL |
|---|---|
| GitHub Issues (runtime) | https://github.com/dotnet/aspire/issues |
| GitHub Issues (docs) | https://github.com/microsoft/aspire.dev/issues |
| Discord | https://aka.ms/aspire/discord |
| Stack Overflow | Tag: dotnet-aspire |
| https://www.reddit.com/r/aspiredotdev/ |
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs network access
Security
What our scanner noticed· Medium risk
- Instructions that use the network
- Downloads piped into a shell
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- First committed by
ChrisMcKee1
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/aspire · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- ChrisMcKee1
AutoGineer is not affiliated with or endorsed by ChrisMcKee1 or GitHub.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download aspire.zip