Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
b25c688
Merge main into release/13.4 (#893)
davidfowl May 8, 2026
8a6601b
[docs] Add command arguments, validation, and visibility to custom-re…
aspire-repo-bot[bot] May 9, 2026
c544bc8
docs: update Foundry TypeScript role assignment method name (#895)
aspire-repo-bot[bot] May 9, 2026
b89370d
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 9, 2026
065e75b
Remove execCommandEnabled from CLI config settings reference (#901)
aspire-repo-bot[bot] May 11, 2026
f015e0a
docs: update custom-resource-commands to use new CommandResults.Succe…
aspire-repo-bot[bot] May 11, 2026
2dd28e6
[docs] aspire update: document --yes required with --non-interactive …
aspire-repo-bot[bot] May 11, 2026
3699c5a
[docs] Document resource-scoped command help and --include-hidden opt…
aspire-repo-bot[bot] May 11, 2026
6d968db
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 11, 2026
d0f4a44
[docs] Dashboard AI Agents dialog and DisableAgentHelp configuration …
aspire-repo-bot[bot] May 11, 2026
318202d
[docs] Update aspire resource command docs with named options and com…
aspire-repo-bot[bot] May 11, 2026
deed841
[docs] Add AzureRoleAssignmentResource documentation to Azure role as…
aspire-repo-bot[bot] May 11, 2026
efdb602
[docs] Add AspireUseCliBundle opt-in documentation (#894)
aspire-repo-bot[bot] May 11, 2026
882b2b6
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 11, 2026
5f9d13c
Draft skeleton What's New for Aspire 13.4 (#914)
Copilot May 11, 2026
1afc5b3
[docs] Add process-backed resource commands documentation (#918)
aspire-repo-bot[bot] May 12, 2026
3731f39
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 12, 2026
3761291
[docs] Add Custom process commands docs (withProcessCommand / withPro…
aspire-repo-bot[bot] May 12, 2026
caf0493
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 13, 2026
1b467fa
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 14, 2026
cc4742c
Add first-class Go hosting docs (#950)
davidfowl May 14, 2026
2ada4ec
Update Aspire 13.4 release notes (#975)
davidfowl May 15, 2026
d019fb7
Update Azure Front Door Bicep naming in docs for 13.4 (#965)
aspire-repo-bot[bot] May 15, 2026
494b9ec
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 15, 2026
e1a483d
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 15, 2026
ec5d7df
Document AddAzureKubernetesEnvironment ingress + AddCertManager flow …
mitchdenny May 16, 2026
afb9f8a
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 18, 2026
0974a1c
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 18, 2026
08184d5
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 18, 2026
4feace5
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 18, 2026
3f5d512
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 18, 2026
d1d7f55
Optimize Open Graph SEO metadata across every English page (#1007)
IEvangelist May 19, 2026
72a6235
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 19, 2026
87ca7cd
docs(ts-apphost): document supported AppHost-root package managers an…
IEvangelist May 19, 2026
755d1a2
Regenerate TS API docs against Aspire CLI 13.4 (XML doc preservation)…
IEvangelist May 19, 2026
eb576bd
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 19, 2026
d82b415
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 19, 2026
7d7bc96
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 20, 2026
8886cc7
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 20, 2026
c36a52c
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 20, 2026
6336e16
docs: document run script and Dockerfile conflict for AddJavaScriptAp…
aspire-repo-bot[bot] May 20, 2026
f20f80e
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 20, 2026
f1274e8
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 20, 2026
34e819d
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 21, 2026
584197b
Document TypeScript AppHost package manager support (#1025)
sebastienros May 21, 2026
7952986
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 21, 2026
ebc3667
docs: document ResourceCommandService support in polyglot (TypeScript…
aspire-repo-bot[bot] May 21, 2026
a58bf1e
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 21, 2026
f1363ed
docs: add HTTPS dev certificate guidance for TypeScript AppHost users
aspire-repo-bot[bot] May 21, 2026
53127ed
docs: address ResourceCommandService review feedback
sebastienros May 21, 2026
5209c6f
Merge pull request #1031 from microsoft/docs/polyglot-resource-comman…
sebastienros May 21, 2026
c0f3a21
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 21, 2026
b0dc2b9
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 21, 2026
8a3de44
Add TypeScript AppHost snippet parity (#969)
sebastienros May 21, 2026
9e5a835
Update TypeScript AppHost Node support docs (#968)
sebastienros May 21, 2026
d2883ed
Document AsExisting on AzureContainerAppEnvironment and WithAcrPullId…
eerhardt May 22, 2026
8c4a211
docs: add ExternalServiceResource to withEnvironment union type examp…
aspire-repo-bot[bot] May 23, 2026
e0dacc9
Update TypeScript AppHost documentation (#1049)
sebastienros May 23, 2026
a8eda43
docs: document deferred restore behavior for aspire update --channel …
aspire-repo-bot[bot] May 25, 2026
d31927f
[docs] Graduate Azure Container Apps job APIs from experimental (#1001)
aspire-repo-bot[bot] May 25, 2026
d2270d8
Document ATS service provider services (#1043)
sebastienros May 25, 2026
c5eb492
[docs] Add custom Kubernetes manifest API documentation (#927)
aspire-repo-bot[bot] May 25, 2026
7c57e52
Warn TS AppHost users to run `aspire update --self` first in 13.4 rel…
mitchdenny May 26, 2026
ddf525c
Update ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE docs for cross-platform d…
aspire-repo-bot[bot] May 26, 2026
9fcd2ad
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 26, 2026
ed77af8
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 26, 2026
b4743eb
Merge remote-tracking branch 'origin/main' into release/13.4
github-actions[bot] May 26, 2026
1b31adb
fix(docs): update import paths for createBuilder in TypeScript exampl…
IEvangelist May 26, 2026
147f4ea
Update TypeScript AppHost GA docs (#1057)
sebastienros May 26, 2026
44177b1
[docs] Document async chaining support in TypeScript AppHosts (#1056)
aspire-repo-bot[bot] May 26, 2026
5383522
docs: document legacy apphost.ts compatibility for TypeScript AppHost…
sebastienros May 26, 2026
f57c601
[docs] Add polyglot WithComputeEnvironment examples to Kubernetes and…
aspire-repo-bot[bot] May 26, 2026
6d3b387
Remove platform implementation detail from DCP cert docs per review f…
Copilot May 26, 2026
c291dac
[docs] Add TypeScript publish lifecycle event APIs to eventing docs (…
aspire-repo-bot[bot] May 26, 2026
316375f
[docs] Update aspire update docs: CLI version preflight check for gue…
aspire-repo-bot[bot] May 26, 2026
a7c2aaf
[docs] Document collection property behavior in polyglot SDK DTOs
aspire-repo-bot[bot] May 26, 2026
e594d09
Merge pull request #1032 from microsoft/docs/polyglot-https-certs-tru…
danegsta May 26, 2026
9848499
Merge pull request #1069 from microsoft/docs/dcp-dev-cert-tls-files-v…
danegsta May 26, 2026
07d857b
[docs] Update ATS docs for polyglot APIs and add ATS diagnostics
aspire-repo-bot[bot] May 26, 2026
0a7fec4
Docs: rename Ingress WithRoute to WithPath (K8s 13.4) (#1060)
mitchdenny May 26, 2026
aae0652
docs: clarify RunSyncOnBackgroundThread applies to async-returning ex…
aspire-repo-bot[bot] May 26, 2026
1597dbb
Document proxyless endpoint requirements
danegsta May 27, 2026
afb7242
Merge pull request #1083 from microsoft/danegsta-microsoft/proxyless-…
danegsta May 27, 2026
114835d
docs: expand VS Code Go debugging section in go-host integration guid…
aspire-repo-bot[bot] May 27, 2026
01ea5cb
[docs] Add Blazor hosting integration docs and Dockerfile factory API…
aspire-repo-bot[bot] May 27, 2026
b320952
docs: aspire do --list-steps now requires a step argument
aspire-repo-bot[bot] May 27, 2026
f7ecb0f
Address review feedback (3 threads)
IEvangelist May 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ This step ensures that the documentation you've created is properly indexed and
### AppHost language parity

- Follow the `doc-writer` skill's AppHost language parity guidance for all AppHost and hosting-integration examples.
- Always show both C# AppHost (`AppHost.cs`) and TypeScript AppHost (`apphost.ts`) variants inside synced `Tabs` (with `syncKey='aspire-lang'`) unless the feature is genuinely language-specific or TypeScript AppHost support does not exist yet.
- Always show both C# AppHost (`AppHost.cs`) and TypeScript AppHost (`apphost.mts`) variants inside synced `Tabs` (with `syncKey='aspire-lang'`) unless the feature is genuinely language-specific or TypeScript AppHost support does not exist yet.
- Before writing a TypeScript AppHost example, verify the API exists in the TypeScript AppHost SDK. Do not invent TypeScript samples.
- If TypeScript AppHost support is not available, show only the C# example without language tabs and add a note that TypeScript AppHost support for the integration is not yet available.
- Use language-neutral prose around AppHost examples, such as "Add a resource to your AppHost" instead of C#-specific method instructions.
Expand Down
2 changes: 1 addition & 1 deletion .github/skills/aspire/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: "Orchestrates Aspire distributed applications using the Aspire CLI

# Aspire Skill

This repository uses Aspire to orchestrate its distributed application. Resources are defined in the AppHost project (`apphost.cs` or `apphost.ts`).
This repository uses Aspire to orchestrate its distributed application. Resources are defined in the AppHost project (`apphost.cs` or `apphost.mts`).

## CLI command reference

Expand Down
50 changes: 39 additions & 11 deletions .github/skills/doc-writer/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,36 @@ description: A brief summary of the page content (required for SEO)
Optional frontmatter fields:

- `next: false` - Disable "Next page" link for terminal pages
- `seoTitle` - Override the page's `og:title` / `twitter:title` only,
without touching the visible H1 or sidebar label. Use this **only**
when the natural H1 must stay short (commands, terse labels). When
set, the value is emitted verbatim — no `· Aspire` suffix is appended.
- Custom metadata as needed by Starlight theme

#### SEO length targets

The site uses Open Graph metadata to render social cards and feed SEO
tooling. To keep previews scannable on every social network and to
avoid the "title too short / description too long" lints that surface
on Yoast, LinkedIn, and the search-console reports, follow these
length targets when authoring frontmatter:

| Field | Composed length target | Hard limit |
| ------------- | ---------------------: | ---------: |
| `title` | 41-51 characters | 70 characters |
| `seoTitle` | 50-60 characters | 70 characters |
| `description` | 110-160 characters | 200 characters (auto-truncated) |

`title` becomes `og:title` composed as `${title} · Aspire`, so the
target window leaves room for the 9-character suffix. `seoTitle`
overrides the composition outright — write the full string yourself.

Surface keywords from the article body itself in the description
(verbs, integration names, API surfaces). The CI guard at
`tests/unit/seo-lengths.vitest.test.ts` fails when any English page
strays outside the wider 30-65 / 80-200 character guard ranges, so a
draft can land slightly off-target and tighten in follow-ups.

### Required Imports

Import Starlight components at the top of your MDX file:
Expand Down Expand Up @@ -368,8 +396,8 @@ builder.Build().Run();
````

````mdx
```typescript title="apphost.ts"
import { createBuilder } from "./.modules/aspire.js";
```typescript title="apphost.mts"
import { createBuilder } from "./.aspire/modules/aspire.mjs";

const builder = await createBuilder();

Expand Down Expand Up @@ -407,7 +435,7 @@ For client/library packages:

## AppHost Language Parity (C# and TypeScript)

Aspire supports both **C# AppHosts** (`AppHost.cs`) and **TypeScript AppHosts** (`apphost.ts`). Documentation must treat both languages as first-class citizens. **Always show both C# and TypeScript code samples for AppHost code unless the feature is genuinely language-specific or TypeScript support does not exist yet.** Never write AppHost or hosting-integration documentation with a C#-only bias.
Aspire supports both **C# AppHosts** (`AppHost.cs`) and **TypeScript AppHosts** (`apphost.mts`). Documentation must treat both languages as first-class citizens. **Always show both C# and TypeScript code samples for AppHost code unless the feature is genuinely language-specific or TypeScript support does not exist yet.** Never write AppHost or hosting-integration documentation with a C#-only bias.

### Core Principles

Expand Down Expand Up @@ -440,8 +468,8 @@ builder.Build().Run();
</TabItem>
<TabItem id='typescript' label='TypeScript'>

```typescript title="apphost.ts"
import { createBuilder } from "./.modules/aspire.js";
```typescript title="apphost.mts"
import { createBuilder } from "./.aspire/modules/aspire.mjs";

const builder = await createBuilder();

Expand All @@ -467,10 +495,10 @@ If a section heading should appear in the **On this page** table of contents, ke

| Aspect | C# | TypeScript |
| ---------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| File title | `title="AppHost.cs"` | `title="apphost.ts"` |
| File title | `title="AppHost.cs"` | `title="apphost.mts"` |
| Tab wrapper | Shared `<Tabs syncKey='aspire-lang'>` container | Shared `<Tabs syncKey='aspire-lang'>` container |
| Tab item | `<TabItem id='csharp' label='C#'>` | `<TabItem id='typescript' label='TypeScript'>` |
| Builder creation | `DistributedApplication.CreateBuilder(args)` | `import { createBuilder } from './.modules/aspire.js';` then newline for space followed by `await createBuilder();` |
| Builder creation | `DistributedApplication.CreateBuilder(args)` | `import { createBuilder } from './.aspire/modules/aspire.mjs';` then newline for space followed by `await createBuilder();` |
| Method casing | PascalCase (`AddRedis`) | camelCase (`addRedis`) |
| Async pattern | Synchronous fluent calls | `await` each builder call |
| Build & run | `builder.Build().Run()` | `await builder.build().run()` |
Expand Down Expand Up @@ -565,8 +593,8 @@ builder.Build().Run();
</TabItem>
<TabItem id='typescript' label='TypeScript'>

```typescript title="apphost.ts"
import { createBuilder } from "./.modules/aspire.js";
```typescript title="apphost.mts"
import { createBuilder } from "./.aspire/modules/aspire.mjs";

const builder = await createBuilder();

Expand Down Expand Up @@ -616,8 +644,8 @@ builder.Build().Run();
</TabItem>
<TabItem id='typescript' label='TypeScript'>

```typescript title="apphost.ts"
import { createBuilder } from "./.modules/aspire.js";
```typescript title="apphost.mts"
import { createBuilder } from "./.aspire/modules/aspire.mjs";

const builder = await createBuilder();

Expand Down
2 changes: 1 addition & 1 deletion src/frontend/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ export default defineConfig({
starlightLinksValidator({
errorOnRelativeLinks: false,
errorOnFallbackPages: false,
exclude: ['/i18n/'],
exclude: ['/i18n/', '/reference/api', '/reference/api/**'],
}),
starlightScrollToTop({
// https://frostybee.github.io/starlight-scroll-to-top/svg-paths/
Expand Down
3 changes: 3 additions & 0 deletions src/frontend/config/redirects.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ export const redirects = {
'/integrations/devtools/flagd/': '/integrations/devtools/flagd/flagd-get-started/',
'/integrations/devtools/goff/': '/integrations/devtools/goff/goff-get-started/',
'/integrations/devtools/mailpit/': '/integrations/devtools/mailpit/mailpit-get-started/',
'/integrations/frameworks/go/': '/integrations/frameworks/go/go-get-started/',
'/integrations/frameworks/go-apps/': '/integrations/frameworks/go/go-get-started/',
'/ja/integrations/frameworks/go-apps/': '/integrations/frameworks/go/go-get-started/',
'/integrations/frameworks/csharp-file-based-apps/': '/integrations/dotnet/csharp-file-based-apps/',
'/integrations/frameworks/maui/': '/integrations/dotnet/maui/',
'/fundamentals/service-defaults/': '/get-started/csharp-service-defaults/',
Expand Down
4 changes: 4 additions & 0 deletions src/frontend/config/sidebar/docs.topics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ export const docsTopics: StarlightSidebarTopicsUserConfig = {
label: "What's new",
collapsed: true,
items: [
{
label: 'Aspire 13.4',
slug: 'whats-new/aspire-13-4',
},
{
label: 'Aspire 13.3',
slug: 'whats-new/aspire-13-3',
Expand Down
26 changes: 24 additions & 2 deletions src/frontend/config/sidebar/integrations.topics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1248,7 +1248,7 @@ export const integrationTopics: StarlightSidebarTopicsUserConfig = {
},
],
},
{
{
label: 'SQLite',
collapsed: true,
items: [
Expand Down Expand Up @@ -1332,13 +1332,35 @@ export const integrationTopics: StarlightSidebarTopicsUserConfig = {
{ label: 'C# file-based apps', slug: 'integrations/dotnet/csharp-file-based-apps' },
{ label: 'Launch profiles', slug: 'integrations/dotnet/launch-profiles' },
{ label: '.NET tool resources', slug: 'integrations/dotnet/dotnet-tool-resources' },
{
label: 'Blazor',
collapsed: true,
items: [
{ label: 'Get started', slug: 'integrations/dotnet/blazor-get-started' },
{ label: 'Set up Blazor hosting in the AppHost', slug: 'integrations/dotnet/blazor-hosting' },
{ label: 'Connect Blazor apps and APIs', slug: 'integrations/dotnet/blazor-connect' },
],
},
{ label: '.NET MAUI', slug: 'integrations/dotnet/maui' },
{ label: 'WPF and Windows Forms', slug: 'integrations/frameworks/wpf-winforms' },
{ label: 'Orleans', slug: 'integrations/frameworks/orleans' },
],
},
{ label: 'Dapr', slug: 'integrations/frameworks/dapr' },
{ label: 'Go', slug: 'integrations/frameworks/go-apps' },
{
label: 'Go',
collapsed: true,
items: [
{
label: 'Get started',
slug: 'integrations/frameworks/go/go-get-started',
},
{
label: 'Set up Go apps in the AppHost',
slug: 'integrations/frameworks/go/go-host',
},
],
},
{ label: 'Java', slug: 'integrations/frameworks/java' },
{
label: 'JavaScript and Node.js',
Expand Down
12 changes: 12 additions & 0 deletions src/frontend/config/sidebar/reference.topics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,10 @@ export const referenceTopics: StarlightSidebarTopicsUserConfig[number] = {
label: 'ASPIREEXPORT013',
link: '/diagnostics/aspireexport013',
},
{
label: 'ASPIREEXPORT016',
link: '/diagnostics/aspireexport016',
},
{
label: 'ASPIRECERTIFICATES001',
link: '/diagnostics/aspirecertificates001',
Expand Down Expand Up @@ -666,6 +670,10 @@ export const referenceTopics: StarlightSidebarTopicsUserConfig[number] = {
label: 'ASPIREPOSTGRES001',
link: '/diagnostics/aspirepostgres001',
},
{
label: 'ASPIREPROCESSCOMMAND001',
link: '/diagnostics/aspireprocesscommand001',
},
{
label: 'ASPIREUSERSECRETS001',
link: '/diagnostics/aspireusersecrets001',
Expand Down Expand Up @@ -708,6 +716,10 @@ export const referenceTopics: StarlightSidebarTopicsUserConfig[number] = {
label: 'ASPIREEXPORT004',
link: '/diagnostics/aspireexport004',
},
{
label: 'ASPIREEXPORT015',
link: '/diagnostics/aspireexport015',
},
{
label: 'ASPIREHOSTINGPYTHON001',
link: '/diagnostics/aspirehostingpython001',
Expand Down
7 changes: 4 additions & 3 deletions src/frontend/config/twoslash.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ export const TWOSLASH_ENABLED = true;
* `typescript` package from `ec.config.mjs`).
*
* - `moduleResolution: 100` → `ts.ModuleResolutionKind.Bundler` so
* `./.modules/aspire.js` falls through to the virtual `.modules/aspire.ts`.
* `./.aspire/modules/aspire.mjs` falls through to the virtual
* `.aspire/modules/aspire.mts`.
* - `module: 99` → `ts.ModuleKind.ESNext` (paired with bundler resolution).
* - `target: 99` → `ts.ScriptTarget.ESNext` so `lib.esnext.full.d.ts` is the
* default `lib`, pulling in `Date`, `URL`, DOM, and friends via TS's
Expand Down Expand Up @@ -79,12 +80,12 @@ export function readAspireTypes() {
/**
* Returns the `extraFiles` map twoslash should mount in its VFS. Returns an
* empty object when the SDK bundle is missing so twoslash can still compile
* blocks that don't import from `./.modules/aspire.js` (they'll just see
* blocks that don't import from `./.aspire/modules/aspire.mjs` (they'll just see
* `any` for the missing module — same fallback `ec.config.mjs` had inline).
*/
export function getTwoslashExtraFiles() {
const { source } = readAspireTypes();
return source ? { '.modules/aspire.ts': source } : {};
return source ? { '.aspire/modules/aspire.mts': source } : {};
}

/**
Expand Down
Loading
Loading