RepoPilotOpen in app →

microsoft/aspire

Aspire is the tool for code-first, extensible, observable dev and deploy.

Healthy

Healthy across the board

Use as dependencyHealthy

Permissive license, no critical CVEs, actively maintained — safe to depend on.

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isHealthy

No critical CVEs, sane security posture — runnable as-is.

  • Last commit today
  • 19 active contributors
  • Distributed ownership (top contributor 15% of recent commits)
Show 3 more →
  • MIT licensed
  • CI configured
  • Tests present

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Healthy" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Healthy
[![RepoPilot: Healthy](https://repopilot.app/api/badge/microsoft/aspire)](https://repopilot.app/r/microsoft/aspire)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/microsoft/aspire on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: microsoft/aspire

Generated by RepoPilot · 2026-05-10 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/microsoft/aspire shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

GO — Healthy across the board

  • Last commit today
  • 19 active contributors
  • Distributed ownership (top contributor 15% of recent commits)
  • MIT licensed
  • CI configured
  • Tests present

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live microsoft/aspire repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/microsoft/aspire.

What it runs against: a local clone of microsoft/aspire — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in microsoft/aspire | Confirms the artifact applies here, not a fork | | 2 | License is still MIT | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | Last commit ≤ 30 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>microsoft/aspire</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of microsoft/aspire. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/microsoft/aspire.git
#   cd aspire
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of microsoft/aspire and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "microsoft/aspire(\\.git)?\\b" \\
  && ok "origin remote is microsoft/aspire" \\
  || miss "origin remote is not microsoft/aspire (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
  && ok "license is MIT" \\
  || miss "license drift — was MIT at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/microsoft/aspire"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

Microsoft Aspire is a code-first, multi-language toolchain (C#, TypeScript, Python, Go, Java, Rust) for defining, running, and deploying distributed applications as declarative app manifests. It unifies local development (via the Aspire CLI) with production deployment by expressing services, databases, caches, and inter-service dependencies in a single source file (apphost.cs or apphost.ts), then auto-generates observability via OpenTelemetry and handles orchestration from dev to cloud. Monorepo structure: C# runtime and core libraries likely under src/ (29.9 MB C# code), TypeScript integration in a separate layer (3.2 MB TypeScript), with .agents/skills containing AI agent workflows and evals. .devcontainer/Dockerfile and .github/actions suggest containerized CI and local dev setup. Bicep templates (970 KB) handle Azure deployment definitions.

👥Who it's for

Full-stack and backend developers building microservices or multi-tier applications who want to define infrastructure-as-code without learning Docker/Kubernetes YAML syntax. Platform engineers and DevOps teams use it to enforce observability and deployment patterns across teams. Contributors are primarily .NET/TypeScript engineers; Microsoft and community maintainers.

🌱Maturity & risk

Actively developed and production-ready for .NET / TypeScript stacks. The repo shows consistent CI/CD (CI and Tests workflows present), broad language support (C#/TS as primary, Go/Rust/Java/Python as secondary), and integration with Azure. However, TypeScript and non-.NET language support are more recent and less battle-tested than the C# core.

Multi-language support increases maintenance surface and test burden (visible in .azuredevops and .github/actions complexity). Dependency on OpenTelemetry, Docker, Bicep, and cloud SDKs introduces transitive risk. The .agents/skills directory suggests AI/automation integration that may be experimental. However, Microsoft backing and active CI reduces abandonment risk.

Active areas of work

Active work on multi-language support (Java, Go, Rust, Python additions visible). Agent-based workflows and AI skill definitions under .agents/ suggest recent push toward AI-assisted app scaffolding. Frequent CI runs and test matrix expansion indicate ongoing hardening across platforms.

🚀Get running

Clone: git clone https://github.com/microsoft/aspire.git && cd aspire. Install .NET SDK (check .devcontainer/Dockerfile for version). Install Node.js for TypeScript tools. Run dotnet tool install -g Microsoft.Aspire.CLI or build from source: dotnet build src/Aspire.sln. Start with docs/using-latest-daily.md if you want dev builds.

Daily commands: For C# apphost: aspire run --project ./apphost.csproj or dotnet run --project ./apphost.csproj. For TypeScript: aspire run --project ./apphost.ts. Check .devcontainer for containerized dev environment: docker build -f .devcontainer/Dockerfile . && docker run -it <image>.

🗺️Map of the codebase

🛠️How to make changes

New resource type (C#): Add to src/Aspire.Hosting/ (resource interfaces and builder extensions). New resource type (TypeScript): Add to TypeScript layer (3.2 MB codebase). Observability: Modify OpenTelemetry exporter configs. New deployment target: Add Bicep template under deployment docs. Testing: Use .github/actions/enumerate-tests to understand test matrix. Agent skills: Edit .agents/skills/aspire/references/ markdown files or evals in evals.json.

🪤Traps & gotchas

Docker daemon required: Local aspire run requires Docker or equivalent container runtime. Language-specific SDKs: TypeScript/Node.js, Python, Go, Rust, and Java each require their respective runtimes and build tools; see .devcontainer for baseline versions. Azure credentials: Deployment to Azure requires az login or service principal setup. Bicep compilation: Bicep templates must compile to ARM JSON during deploy. AppHost naming conventions: Resource names become environment variable prefixes; hyphens are converted to underscores (non-obvious string sanitization). OpenTelemetry exporter config: Must be explicitly wired in apphost or config files; default is often no-op.

💡Concepts to learn

  • Builder Pattern (Fluent API) — Aspire's core API (DistributedApplication.CreateBuilder() and .WithReference() chains) relies on fluent builders for readable, chainable service composition
  • OpenTelemetry (Signals: Traces, Metrics, Logs) — Aspire auto-instruments all services with OTel; you must understand traces, metrics, and log correlation to debug and monitor distributed apps
  • Declarative Infrastructure (IaC) vs. Imperative — Aspire apphost files are declarative definitions that Aspire interprets and executes; this differs from imperative Docker/shell scripts and enables code-first deployment
  • Resource Orchestration and Dependency Injection — Aspire's .WaitFor() and .WithReference() methods model inter-service dependencies and runtime wiring; understanding dependency graphs is critical for local-to-cloud parity
  • Multi-Language / Polyglot Development — Aspire supports C#, TypeScript, Python, Go, Rust, and Java apphosts; each has a different builder API, so you must adapt the core patterns to each language's idioms
  • Environment Variable Injection & Sanitization — Aspire converts resource names to environment variables (e.g., cacheCACHE_*); hyphens are sanitized to underscores, which is a non-obvious gotcha
  • Bicep (Azure IaC Language) — Aspire generates Bicep templates for Azure deployment; you must understand Bicep syntax and semantics to customize or debug generated infrastructure
  • docker/compose — Docker Compose is a predecessor to Aspire's local orchestration model; Aspire builds on similar YAML-less composition ideas but for multiple languages
  • open-telemetry/opentelemetry-dotnet — Aspire's observability layer depends heavily on OpenTelemetry .NET SDK; understanding OTel is essential for observability features
  • Azure/bicep — Bicep is the deployment language for Azure; Aspire generates Bicep templates for cloud deployment, so understanding Bicep is needed for deployment workflows
  • dapr/dapr — Dapr is a sibling Microsoft project for distributed app development; Aspire users may integrate Dapr sidecars as resources in their apphost definitions
  • kubernetes/kubernetes — Aspire can deploy to Kubernetes via custom manifests or AKS; understanding K8s is needed for container orchestration at scale

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive evaluation tests for Aspireify skill agent workflows

The .agents/skills/aspireify/evals directory appears to be missing (only aspire/evals/evals.json exists). The aspireify skill handles critical transformations (docker-compose to AppHost, JavaScript app integration). Adding structured evals would validate agent accuracy on real-world migration scenarios and prevent regressions as the skill evolves.

  • [ ] Create .agents/skills/aspireify/evals/evals.json with test cases covering docker-compose.md transformations
  • [ ] Add evaluation cases for javascript-apps.md and apphost-wiring.md scenarios
  • [ ] Reference existing .agents/skills/aspire/evals/evals.json format and extend for aspireify-specific patterns
  • [ ] Include edge cases: multi-container compose files, complex service dependencies, OpenTelemetry instrumentation

Add GitHub Actions workflow for agent skill validation

The repo has .github/agents/ with agentic-workflows.agent.md but no dedicated CI workflow validating skill definitions (.agents/skills/*/SKILL.md) and references. This would catch malformed skill metadata, broken reference links, and missing evaluation coverage before merge.

  • [ ] Create .github/workflows/validate-agent-skills.yml workflow
  • [ ] Add validation step to check SKILL.md format against a schema (.agents/skills/SKILL.schema.json if needed)
  • [ ] Add step to validate all .agents/skills//references/.md files are linked and accessible
  • [ ] Add step to verify evals.json completeness (all reference topics have evaluation coverage)

Create missing deployment reference documentation for TypeScript AppHosts

The file structure shows .agents/skills/aspire/references/typescript-apphosts.md exists but .agents/skills/aspire/references/deployment.md likely lacks TypeScript-specific deployment patterns (comparing with comprehensive csharp-apphosts.md). New contributors deploying TypeScript Aspire apps lack parity with C# docs.

  • [ ] Review .agents/skills/aspire/references/deployment.md and identify C#-only sections
  • [ ] Add TypeScript AppHost deployment section covering: Azure Container Apps setup, environment variables, secrets management
  • [ ] Cross-reference .agents/skills/aspire/references/typescript-apphosts.md with deployment patterns
  • [ ] Add code examples for TypeScript app deployment (parallel to C# examples if present)

🌿Good first issues

  • Add missing documentation for the Python resource support (e.g., apphost.py reference guide analogous to .agents/skills/aspire/references/csharp-apphosts.md and typescript-apphosts.md). The .agents/skills/aspire/references/ directory has no python-apphosts.md file despite Python being in the language support list.
  • Implement or improve Go/Rust apphost builder API examples and tests. The codebase has Go (1.2 MB) and Rust (1.05 MB) but minimal visible reference docs in .agents/skills/aspire/references/; a Go or Rust contributor could flesh out go-apphosts.md and rust-apphosts.md with working examples.
  • Add unit tests for edge cases in resource name sanitization (hyphen-to-underscore conversion for environment variables). The .agents/skills/aspire/references/resource-management.md documents this but no explicit test file is visible in the structure; this is a low-risk, high-value safety improvement.

Top contributors

Click to expand

📝Recent commits

Click to expand
  • a5e0b81 — Support named resource command options (#16903) (davidfowl)
  • 972852c — Add displayImmediately command result overload (#16906) (davidfowl)
  • fbf7ec3 — Improve create-pr skill PR descriptions (#16904) (davidfowl)
  • 77115c5 — Avoid duplicate inherited ATS properties (#16898) (sebastienros)
  • 553537a — Fix YARP SDK static files export (#16900) (sebastienros)
  • 05b473e — Fix GitHub Models health check export (#16896) (sebastienros)
  • 5a757a0 — Add public AzureRoleAssignmentResource type (#16888) (eerhardt)
  • cbdecf2 — Clarify AppHost output from stop all (#16854) (davidfowl)
  • fa54b27 — Add aspire ls command (#16696) (Copilot)
  • 69445d0 — Use specific role assignment export names (#16886) (sebastienros)

🔒Security observations

The microsoft/aspire repository demonstrates a reasonable security posture with presence of security scanning infrastructure (Guardian, CredScan), security reporting guidelines (SECURITY.md), and proper use of development containerization. However, there are several areas for improvement: the SECURITY.md file is incomplete, suppression configurations should be regularly audited, custom GitHub Actions require security review, and AI agent configurations need to be validated for information leakage. No obvious hardcoded credentials, insecure dependencies, or critical injection vulnerabilities are evident from the file structure analysis, but full codebase review of actual source files would be needed for comprehensive assessment.

  • Medium · Credential Suppression Configuration Detected — .config/CredScanSuppressions.json. The presence of '.config/CredScanSuppressions.json' indicates that credential scanning suppressions are in place. While suppression files are normal, they should be minimized and well-justified to prevent accidental inclusion of secrets in the repository. Fix: Review all suppressions in CredScanSuppressions.json to ensure they are legitimate and necessary. Document the business justification for each suppression. Consider implementing pre-commit hooks to prevent new credentials from being committed.
  • Medium · Security Policy Documentation Incomplete — SECURITY.md. The SECURITY.md file appears to be truncated and does not provide complete guidance on security reporting procedures. The file cuts off mid-sentence when describing the MSRC reporting process. Fix: Complete the SECURITY.md file with full instructions for reporting security vulnerabilities, including expected response times and disclosure policies. Ensure the document is comprehensive and easily accessible to security researchers.
  • Low · Guardian Configuration Present — .config/guardian/.gdnbaselines. A Guardian baseline configuration exists at '.config/guardian/.gdnbaselines'. While Guardian is a security scanning tool, the presence of baseline files should be regularly reviewed to ensure vulnerabilities are not being baseline-ignored inappropriately. Fix: Regularly audit Guardian baseline configurations to ensure no critical vulnerabilities are being suppressed. Implement a process to review and justify all baseline exceptions. Consider incorporating Guardian scans into CI/CD pipeline if not already present.
  • Low · Development Container Configuration Should Be Reviewed — .devcontainer/Dockerfile. A Dockerfile exists in the .devcontainer directory. Development container images should follow security best practices to prevent supply chain attacks and ensure development environment security. Fix: Review the Dockerfile for security best practices: use specific base image versions (not 'latest'), run as non-root user, minimize image layers, scan for vulnerabilities using tools like Trivy or Snyk, and avoid including unnecessary tools or dependencies.
  • Low · Multiple GitHub Actions Defined — .github/actions/. The repository contains multiple custom GitHub Actions in '.github/actions/'. Custom actions should be carefully audited to prevent supply chain attacks and privilege escalation. Fix: Review all custom GitHub Actions for security vulnerabilities. Use pinned versions for all external action dependencies. Implement CODEOWNERS reviews for action modifications. Consider using GitHub's Action security scanning features and keep actions updated.
  • Low · Agent/Skill Configurations Present — .agents/ and .github/agents/. The repository contains AI agent configurations and skills under '.agents/' and '.github/agents/'. These should be reviewed to ensure no sensitive information is exposed through agent prompts or knowledge bases. Fix: Audit all agent skills and configurations to ensure no API keys, credentials, or sensitive organizational information are embedded in agent prompts, references, or evaluation data. Implement access controls for agent configurations.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Healthy signals · microsoft/aspire — RepoPilot