microsoft/aspire
Aspire is the tool for code-first, extensible, observable dev and deploy.
Healthy across the board
Permissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
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 →Show less
- ✓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.
[](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:
- 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. - 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.
- 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 |
#!/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).
⚡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
- src/Aspire.Hosting/DistributedApplicationBuilder.cs: Core builder API that defines the fluent interface for declaring services and resources in C#
- .agents/skills/aspire/SKILL.md: AI agent skill definition; describes how LLMs should assist with Aspire app generation
- .agents/skills/aspire/references/csharp-apphosts.md: Documentation for C# apphost patterns; primary reference for the most mature language
- .agents/skills/aspire/references/resource-management.md: Core reference for all resource types (Redis, databases, containers, endpoints)
- .devcontainer/devcontainer.json: Dev container setup; tells you all required tools and versions for local development
- .github/workflows/ci.yml: CI/CD pipeline definition; shows build, test, and validation steps across all languages
- .config/dotnet-tools.json: Local .NET tool manifest; shows required tool versions (likely includes Aspire CLI)
🛠️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.,
cache→CACHE_*); 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
🔗Related repos
docker/compose— Docker Compose is a predecessor to Aspire's local orchestration model; Aspire builds on similar YAML-less composition ideas but for multiple languagesopen-telemetry/opentelemetry-dotnet— Aspire's observability layer depends heavily on OpenTelemetry .NET SDK; understanding OTel is essential for observability featuresAzure/bicep— Bicep is the deployment language for Azure; Aspire generates Bicep templates for cloud deployment, so understanding Bicep is needed for deployment workflowsdapr/dapr— Dapr is a sibling Microsoft project for distributed app development; Aspire users may integrate Dapr sidecars as resources in their apphost definitionskubernetes/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.pyreference guide analogous to.agents/skills/aspire/references/csharp-apphosts.mdandtypescript-apphosts.md). The.agents/skills/aspire/references/directory has nopython-apphosts.mdfile 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 outgo-apphosts.mdandrust-apphosts.mdwith 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.mddocuments 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
Top contributors
- @sebastienros — 15 commits
- @JamesNK — 13 commits
- @adamint — 12 commits
- @davidfowl — 11 commits
- @eerhardt — 9 commits
📝Recent commits
Click to expand
Recent commits
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.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.