🎯

working-with-aspire

🎯Skill

from mhagrelius/dotfiles

VibeIndex|
What it does

Helps debug and configure .NET Aspire distributed applications, resolving service discovery, environment, deployment, and polyglot integration challenges.

working-with-aspire

Installation

Install skill:
npx skills add https://github.com/mhagrelius/dotfiles --skill working-with-aspire
14
Last UpdatedJan 21, 2026

Skill Details

SKILL.md

Use when building distributed apps with Aspire; orchestrating .NET, JavaScript, Python, or polyglot services; when environment variables or service discovery aren't working; when migrating from .NET Aspire 9 to 13+ or Community Toolkit; when seeing AddNpmApp deprecated errors; when OTEL not appearing in dashboard; when ports change on restart breaking OAuth; when configuring MCP server for AI assistants; when debugging Aspire apps and need to check resource status or logs

Overview

# Working with .NET Aspire 13

For AI Assistants: Use MCP Tools

CRITICAL: When helping users debug Aspire applications, use the Aspire MCP tools instead of curl, external HTTP calls, or suggesting manual dashboard inspection.

| Task | MCP Tool | NOT This |

|------|----------|----------|

| Check resource status | list_resources | ❌ curl to dashboard API |

| Get service logs | list_console_logs | ❌ curl, docker logs |

| View traces | list_traces | ❌ curl to OTLP endpoint |

| Find errors in traces | list_trace_structured_logs | ❌ manual dashboard search |

| List available AppHosts | list_apphosts | ❌ file system search |

If MCP is not configured, guide the user to run aspire mcp init in their AppHost directory.

Quick Reference

| Task | Reference File |

|------|----------------|

| AppHost patterns, resources, lifecycle | app-host.md |

| Azure integrations (databases, messaging, AI) | azure-integrations.md |

| Database integrations (Postgres, SQL, Mongo) | database-integrations.md |

| Caching (Redis, Valkey, Garnet) | caching-integrations.md |

| Messaging (Kafka, RabbitMQ, NATS) | messaging-integrations.md |

| Polyglot (Node.js, Python, Go, Rust, Java) | polyglot-integrations.md |

| Deployment, CLI, and aspire do pipelines | deployment-cli.md |

| Testing with Aspire | testing.md |

| Errors and troubleshooting | diagnostics.md |

| MCP integration for AI assistants | mcp-integration.md |

| VS Code extension | vs-code-extension.md |

| Certificate trust configuration | certificate-config.md |

| Migration from 9.x to 13.x | aspire-13-migration.md |

Common Mistakes

❌ Wrong: Using non-existent or deprecated APIs

| Wrong | Correct | Why |

|-------|---------|-----|

| AddPythonUvicornApp | AddUvicornApp | Method is just AddUvicornApp |

| AddNpmApp | AddViteApp or AddJavaScriptApp | AddNpmApp removed in 13.0 |

| AddPythonApp for FastAPI | AddUvicornApp | Use AddUvicornApp for ASGI (FastAPI, Starlette) |

| Aspire.Hosting.NodeJs | Aspire.Hosting.JavaScript | Package renamed in 13.0 |

❌ Wrong: Putting secrets in appsettings.json

```csharp

// WRONG - secrets exposed in source control

// appsettings.json: { "Parameters": { "api-key": "secret123" } }

// CORRECT - use user-secrets for development

// dotnet user-secrets set "Parameters:api-key" "secret123"

```

Aspire 13 Breaking Changes

Critical: Migration from Aspire 9.x requires attention. See aspire-13-migration.md for full details.

JavaScript/Node.js Changes (13.0)

```csharp

// BEFORE (9.x) - REMOVED IN 13.0

builder.AddNpmApp("frontend", "../app", scriptName: "dev", args: ["--no-open"])

// AFTER (13.0) - Use AddJavaScriptApp or AddViteApp

builder.AddJavaScriptApp("frontend", "../app")

.WithRunScript("dev")

.WithArgs("--no-open");

// For Vite/React specifically:

builder.AddViteApp("frontend", "../app")

.WithHttpEndpoint(env: "PORT");

// Package renamed: Aspire.Hosting.NodeJs β†’ Aspire.Hosting.JavaScript

```

Azure Redis Changes (13.1)

```csharp

// BEFORE (13.0) - DEPRECATED

builder.AddAzureRedisEnterprise("cache")

// AFTER (13.1)

builder.AddAzureManagedRedis("cache")

```

Network Context Changes (13.0)

```csharp

// BEFORE (9.x) - containerHostName parameter removed

await resource.ProcessArgumentValuesAsync(

executionContext, processValue, logger,

containerHostName: "localhost", cancellationToken);

// AFTER (13.0) - Use NetworkIdentifier

await resource.ProcessArgumentValuesAsync(

executionContext, processValue, logger, cancellationToken);

// Get endpoints with network context

var endpoint = api.GetEndpoint("http", KnownNetworkIdentifiers.DefaultAspireContainerNetwork);

```

Publishing API Changes (13.0)

```csharp

// BEFORE (9.x)

public class MyPublisher : IDistributedApplicationPublisher { }

// AFTER (13.0) - Use aspire do pipelines instead

// IDistributedApplicationPublisher is deprecated

```

Aspire 13.0+ New Features

Certificate Trust Automation

```csharp

// Automatic - no configuration needed

var pythonApi = builder.AddUvicornApp("api", "./api", "main:app");

var nodeApi = builder.AddJavaScriptApp("frontend", "./frontend");

// Both automatically trust development certificates

```

MCP Integration for AI Assistants

```bash

# Initialize MCP for Claude Code, GitHub Copilot, etc.

aspire mcp init

```

aspire do Pipeline System

```bash

aspire do build # Build container images

aspire do push # Push to registry

aspire do deploy # Full deployment

aspire do diagnostics # Show available steps

```

aspire init (Aspirify Existing Projects)

```bash

aspire init # Interactive setup

aspire init --single-file # Create .cs AppHost without .csproj

```

Single-File AppHost

```csharp

// apphost.cs - no project file needed

#:package Aspire.Hosting@*

#:package Aspire.Hosting.Redis@*

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddRedis("cache");

builder.Build().Run();

```

Common Patterns

FastAPI + React (Vite) Full Stack

```csharp

// Required packages:

// dotnet add package Aspire.Hosting.Python

// dotnet add package Aspire.Hosting.JavaScript (NOT NodeJs!)

// dotnet add package Aspire.Hosting.PostgreSQL

var builder = DistributedApplication.CreateBuilder(args);

// Database

var db = builder.AddPostgres("db")

.AddDatabase("appdata")

.WithDataVolume();

// FastAPI backend - use AddUvicornApp (NOT AddPythonApp!)

var api = builder.AddUvicornApp("api", "../api", "main:app")

.WithHttpEndpoint(port: 8000, env: "PORT")

.WithReference(db)

.WaitFor(db);

// React frontend - use AddViteApp (NOT AddNpmApp!)

builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithExternalHttpEndpoints()

.WithReference(api);

builder.Build().Run();

```

Frontend reads API URL from env: process.env.services__api__http__0

Basic AppHost Structure

```csharp

var builder = DistributedApplication.CreateBuilder(args);

// Database

var db = builder.AddPostgres("db")

.AddDatabase("appdata")

.WithDataVolume();

// API with database reference

var api = builder.AddProject("api")

.WithReference(db)

.WaitFor(db);

// Frontend with API reference

builder.AddViteApp("frontend", "../frontend")

.WithHttpEndpoint(env: "PORT")

.WithReference(api);

builder.Build().Run();

```

Service Discovery Pattern

```csharp

// Producer exposes endpoint

var api = builder.AddProject("api")

.WithHttpEndpoint(port: 5000, name: "api");

// Consumer references it (gets services__api__api__0 env var)

builder.AddProject("web")

.WithReference(api);

```

Health Checks and Wait

```csharp

var db = builder.AddPostgres("db");

var cache = builder.AddRedis("cache");

builder.AddProject("api")

.WithReference(db)

.WithReference(cache)

.WaitFor(db) // Wait for running

.WaitForHealthy(cache); // Wait for healthy (requires health check)

```

When to Read Specific Files

Read app-host.md when:

  • Setting up new AppHost project
  • Understanding resource lifecycle events
  • Configuring endpoints and networking
  • Using parameters and secrets

Read azure-integrations.md when:

  • Using Azure services (Cosmos, Service Bus, Storage)
  • Running Azure emulators locally
  • Using RunAsEmulator() or RunAsContainer()
  • Customizing Bicep output

Read polyglot-integrations.md when:

  • Adding Node.js, Python, Go, Rust, or Java apps
  • Frontend frameworks (Vite, Angular, React)
  • Container-based polyglot services
  • Migrating from AddNpmApp to AddJavaScriptApp

Read deployment-cli.md when:

  • Using aspire deploy, aspire publish, or aspire do
  • Using aspire init to Aspirify existing projects
  • Setting up CI/CD pipelines
  • Understanding manifest format

Read mcp-integration.md when:

  • Setting up AI assistant integration
  • Configuring Claude Code, GitHub Copilot, or Cursor
  • Excluding resources from MCP access

Read vs-code-extension.md when:

  • Using Aspire in VS Code
  • Debugging polyglot applications
  • Creating new Aspire projects in VS Code

Read certificate-config.md when:

  • Configuring HTTPS for polyglot apps
  • Custom certificate authorities
  • Certificate trust issues between services

Read aspire-13-migration.md when:

  • Upgrading from Aspire 9.x
  • Seeing deprecated API warnings
  • Container networking issues after upgrade

Read diagnostics.md when:

  • Seeing ASPIRE* compiler errors
  • Debugging service discovery issues
  • Troubleshooting container startup

More from this repository8