From dc41b0dcc809ca6e1083823365949c7f865ead10 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 3 Nov 2025 14:22:31 -0600 Subject: [PATCH 01/18] feat: Add placeholder component with links to Learn, and stub articles and TOC. Ported SQL article --- src/frontend/astro.config.mjs | 6 +- src/frontend/redirects.mjs | 9 + src/frontend/sidebar.topics.ts | 144 +- .../sql/mssql-vscode-add-connection.png | Bin 0 -> 111358 bytes .../sql/mssql-vscode-connected.png | Bin 0 -> 197318 bytes .../sql/mssql-vscode-connection-details.png | Bin 0 -> 112877 bytes .../integrations/sql/ssms-connected.png | Bin 0 -> 76645 bytes .../integrations/sql/ssms-new-connection.png | Bin 0 -> 75284 bytes .../src/components/Integrations.astro | 2 +- src/frontend/src/components/Placeholder.astro | 35 + .../docs/integrations/ai/github-models.mdx | 13 + .../content/docs/integrations/ai/ollama.mdx | 12 + .../content/docs/integrations/ai/openai.mdx | 12 + .../docs/integrations/caching/garnet.mdx | 12 + .../caching/redis-distributed.mdx | 12 + .../integrations/caching/redis-output.mdx | 12 + .../docs/integrations/caching/redis.mdx | 12 + .../docs/integrations/caching/valkey.mdx | 12 + .../integrations/cloud/azure/overview.mdx | 4 + .../integrations/databases/elasticsearch.mdx | 12 + .../integrations/databases/eventstore.mdx | 12 + .../integrations/databases/meilisearch.mdx | 12 + .../docs/integrations/databases/milvus.mdx | 12 + .../docs/integrations/databases/mongodb.mdx | 12 + .../docs/integrations/databases/mysql.mdx | 12 + .../docs/integrations/databases/oracle.mdx | 12 + .../integrations/{ => databases}/postgres.mdx | 3 +- .../docs/integrations/databases/qdrant.mdx | 12 + .../docs/integrations/databases/ravendb.mdx | 12 + .../integrations/databases/sql-server.mdx | 450 +++++ .../docs/integrations/databases/sqlite.mdx | 12 + .../docs/integrations/devtools/dab.mdx | 12 + .../integrations/devtools/sql-projects.mdx | 12 + .../docs/integrations/frameworks/bun-apps.mdx | 13 + .../docs/integrations/frameworks/dapr.mdx | 12 + .../integrations/frameworks/deno-apps.mdx | 13 + .../docs/integrations/frameworks/go-apps.mdx | 13 + .../docs/integrations/frameworks/java.mdx | 13 + .../docs/integrations/frameworks/python.mdx | 13 + .../docs/integrations/frameworks/rust.mdx | 13 + .../integrations/messaging/apache-kafka.mdx | 12 + .../docs/integrations/messaging/nats.mdx | 12 + .../integrations/{ => messaging}/rabbitmq.mdx | 7 +- .../docs/integrations/observability/seq.mdx | 12 + .../integrations/reverse-proxies/yarp.mdx | 12 + .../docs/integrations/security/keycloak.mdx | 12 + .../src/content/docs/whats-new/aspire-13.mdx | 1634 ++++++++++++++++ .../src/content/docs/whats-new/aspire-9-5.mdx | 1702 ----------------- src/frontend/src/data/integration-docs.json | 4 +- 49 files changed, 2668 insertions(+), 1723 deletions(-) create mode 100644 src/frontend/redirects.mjs create mode 100644 src/frontend/src/assets/integrations/sql/mssql-vscode-add-connection.png create mode 100644 src/frontend/src/assets/integrations/sql/mssql-vscode-connected.png create mode 100644 src/frontend/src/assets/integrations/sql/mssql-vscode-connection-details.png create mode 100644 src/frontend/src/assets/integrations/sql/ssms-connected.png create mode 100644 src/frontend/src/assets/integrations/sql/ssms-new-connection.png create mode 100644 src/frontend/src/components/Placeholder.astro create mode 100644 src/frontend/src/content/docs/integrations/ai/github-models.mdx create mode 100644 src/frontend/src/content/docs/integrations/ai/ollama.mdx create mode 100644 src/frontend/src/content/docs/integrations/ai/openai.mdx create mode 100644 src/frontend/src/content/docs/integrations/caching/garnet.mdx create mode 100644 src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx create mode 100644 src/frontend/src/content/docs/integrations/caching/redis-output.mdx create mode 100644 src/frontend/src/content/docs/integrations/caching/redis.mdx create mode 100644 src/frontend/src/content/docs/integrations/caching/valkey.mdx create mode 100644 src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/eventstore.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/meilisearch.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/milvus.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/mongodb.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/mysql.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/oracle.mdx rename src/frontend/src/content/docs/integrations/{ => databases}/postgres.mdx (99%) create mode 100644 src/frontend/src/content/docs/integrations/databases/qdrant.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/ravendb.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/sql-server.mdx create mode 100644 src/frontend/src/content/docs/integrations/databases/sqlite.mdx create mode 100644 src/frontend/src/content/docs/integrations/devtools/dab.mdx create mode 100644 src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/dapr.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/java.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/python.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/rust.mdx create mode 100644 src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx create mode 100644 src/frontend/src/content/docs/integrations/messaging/nats.mdx rename src/frontend/src/content/docs/integrations/{ => messaging}/rabbitmq.mdx (97%) create mode 100644 src/frontend/src/content/docs/integrations/observability/seq.mdx create mode 100644 src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx create mode 100644 src/frontend/src/content/docs/integrations/security/keycloak.mdx create mode 100644 src/frontend/src/content/docs/whats-new/aspire-13.mdx delete mode 100644 src/frontend/src/content/docs/whats-new/aspire-9-5.mdx diff --git a/src/frontend/astro.config.mjs b/src/frontend/astro.config.mjs index 1f67f5c56..1f80edf2a 100644 --- a/src/frontend/astro.config.mjs +++ b/src/frontend/astro.config.mjs @@ -2,6 +2,7 @@ import { defineConfig } from 'astro/config'; import { sidebarTopics } from './sidebar.topics'; import { pivotDirective } from './src/directives/pivot-directive.mjs' +import { redirects } from './redirects.mjs'; import catppuccin from "@catppuccin/starlight"; import lunaria from '@lunariajs/starlight'; import mermaid from 'astro-mermaid'; @@ -43,10 +44,7 @@ export default defineConfig({ prefetch: true, site: 'https://aspire.dev', trailingSlash: 'always', - redirects: { - '/install.sh': 'https://aka.ms/aspire/get/install.sh', - '/install.ps1': 'https://aka.ms/aspire/get/install.ps1', - }, + redirects: redirects, integrations: [ mermaid({ theme: 'forest', diff --git a/src/frontend/redirects.mjs b/src/frontend/redirects.mjs new file mode 100644 index 000000000..14eabf439 --- /dev/null +++ b/src/frontend/redirects.mjs @@ -0,0 +1,9 @@ +export const redirects = { + // Install scripts + '/install.sh': 'https://aka.ms/aspire/get/install.sh', + '/install.ps1': 'https://aka.ms/aspire/get/install.ps1', + + // Docs redirects + '/integrations/postgres': '/integrations/databases/postgres/', + '/integrations/rabbitmq/': '/integrations/messaging/rabbitmq/', +}; \ No newline at end of file diff --git a/src/frontend/sidebar.topics.ts b/src/frontend/sidebar.topics.ts index 8384e7cbe..59182475d 100644 --- a/src/frontend/sidebar.topics.ts +++ b/src/frontend/sidebar.topics.ts @@ -45,7 +45,7 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ }, { label: "What's new", collapsed: true, items: [ - { label: 'Aspire 9.5', slug: 'whats-new/aspire-9-5' } + { label: 'Aspire 13', slug: 'whats-new/aspire-13' } ], translations: { da: 'Hvad er nyt', @@ -127,7 +127,7 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ tr: 'CLI Kur', uk: 'Встановити CLI', 'zh-CN': '安装 CLI', - }, + }, slug: 'get-started/install-cli' }, { @@ -538,11 +538,60 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ ] }, { - label: 'Database', + label: "Artificial Intelligence (AI)", + collapsed: true, + translations: { }, + items: [ + { label: "GitHub Models", slug: "integrations/ai/github-models" }, + { label: "Ollama", slug: "integrations/ai/ollama" }, + { label: "OpenAI", slug: "integrations/ai/openai" }, + ] + }, + { + label: 'Cloud providers', + collapsed: true, + translations: { + da: 'Cloud-udbydere', + de: 'Cloud-Anbieter', + en: 'Cloud providers', + es: 'Proveedores de la nube', + fr: 'Fournisseurs de cloud', + hi: 'क्लाउड प्रदाता', + id: 'Penyedia Cloud', + it: 'Provider Cloud', + ja: 'クラウドプロバイダー', + ko: '클라우드 제공업체', + pt: 'Provedores de Nuvem', + 'pt-BR': 'Provedores de Nuvem', + 'pt-PT': 'Provedores de Nuvem', + ru: 'Облачные провайдеры', + tr: 'Bulut Sağlayıcıları', + uk: 'Хмарні провайдери', + 'zh-CN': '云提供商', + }, items: [ + { label: 'AWS', link: 'https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/aspire-integrations.html' }, + { label: 'Azure', slug: 'integrations/cloud/azure/overview' }, + ] + }, + { + label: "Caching & state", + collapsed: true, + translations: { }, + items: [ + { label: "Redis", slug: "integrations/caching/redis" }, + { label: "Redis Distributed Cache", slug: "integrations/caching/redis-distributed" }, + { label: "Redis Output Cache", slug: "integrations/caching/redis-output" }, + { label: "Valkey", slug: "integrations/caching/valkey" }, + { label: "Garnet", slug: "integrations/caching/garnet" } + ] + }, + { + label: 'Data & databases', + collapsed: true, translations: { da: 'Database', de: 'Datenbank', - en: 'Database', + en: 'Data & databases', es: 'Base de datos', fr: 'Base de données', hi: 'डेटाबेस', @@ -558,15 +607,59 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ uk: 'База даних', 'zh-CN': '数据库', }, items: [ - { label: 'PostgreSQL', slug: 'integrations/postgres' }, + { label: "Elasticsearch", slug: "integrations/databases/elasticsearch" }, + { label: "EventStore", slug: "integrations/databases/eventstore" }, + { label: "Meilisearch", slug: "integrations/databases/meilisearch" }, + { label: "Milvus", slug: "integrations/databases/milvus" }, + { label: "MongoDB", slug: "integrations/databases/mongodb" }, + { label: "MySQL", slug: "integrations/databases/mysql" }, + { label: "Oracle", slug: "integrations/databases/oracle" }, + { label: "PostgreSQL", slug: "integrations/databases/postgres" }, + { label: "Qdrant", slug: "integrations/databases/qdrant" }, + { label: "RavenDB", slug: "integrations/databases/ravendb" }, + { label: "SQLite", slug: "integrations/databases/sqlite" }, + { label: "SQL Server", slug: "integrations/databases/sql-server" } + ] + }, + { + label: 'Frameworks & runtimes', + collapsed: true, + translations: { + da: 'Frameworks og runtime-miljøer', + de: 'Frameworks & Laufzeiten', + en: 'Frameworks & runtimes', + es: 'Frameworks y entornos de ejecución', + fr: 'Frameworks et environnements d\'exécution', + hi: 'फ्रेमवर्क और रनटाइम', + id: 'Kerangka & Runtime', + it: 'Framework e runtime', + ja: 'フレームワークとランタイム', + ko: '프레임워크 및 런타임', + pt: 'Frameworks e Runtimes', + 'pt-BR': 'Frameworks e Runtimes', + 'pt-PT': 'Frameworks e Runtimes', + ru: 'Фреймворки и среды выполнения', + tr: 'Çerçeveler ve Çalışma Zamanları', + uk: 'Фреймворки та середовища виконання', + 'zh-CN': '框架和运行时', + }, + items: [ + { label: 'Bun apps', slug: 'integrations/frameworks/bun-apps' }, + { label: 'Dapr', slug: 'integrations/frameworks/dapr' }, + { label: 'Deno apps', slug: 'integrations/frameworks/deno-apps' }, + { label: 'Go apps', slug: 'integrations/frameworks/go-apps' }, + { label: 'Java', slug: 'integrations/frameworks/java' }, + { label: 'Python', slug: 'integrations/frameworks/python' }, + { label: 'Rust', slug: 'integrations/frameworks/rust' }, ] }, { - label: 'Messaging', + label: 'Messaging & eventing', + collapsed: true, translations: { da: 'Meddelelser', de: 'Messaging', - en: 'Messaging', + en: 'Messaging & eventing', es: 'Mensajería', fr: 'Messagerie', hi: 'मैसेजिंग', @@ -583,7 +676,42 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ 'zh-CN': '消息传递', }, items: [ - { label: 'RabbitMQ', slug: 'integrations/rabbitmq' }, + { label: 'Apache Kafka', slug: 'integrations/messaging/apache-kafka' }, + { label: 'RabbitMQ', slug: 'integrations/messaging/rabbitmq' }, + { label: 'NATS', slug: 'integrations/messaging/nats' }, + ] + }, + { + label: "Security & identity", + collapsed: true, + translations: { }, + items: [ + { label: "Keycloak", slug: "integrations/security/keycloak" } + ] + }, + { + label: "Observability & logging", + collapsed: true, + translations: { }, + items: [ + { label: 'Seq', slug: 'integrations/observability/seq' }, + ] + }, + { + label: "Reverse proxies & APIs", + collapsed: true, + translations: { }, + items: [ + { label: 'YARP (Yet Another Reverse Proxy)', slug: 'integrations/reverse-proxies/yarp' }, + ] + }, + { + label: "Dev tools & extensions", + collapsed: true, + translations: { }, + items: [ + { label: "Data API Builder", slug: "integrations/devtools/dab" }, + { label: "SQL Database Projects", slug: "integrations/devtools/sql-projects" }, ] } ], diff --git a/src/frontend/src/assets/integrations/sql/mssql-vscode-add-connection.png b/src/frontend/src/assets/integrations/sql/mssql-vscode-add-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..0104b14b79f42fe3df7245a6761770d8025848b8 GIT binary patch literal 111358 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 literal 0 HcmV?d00001 diff --git a/src/frontend/src/assets/integrations/sql/mssql-vscode-connected.png b/src/frontend/src/assets/integrations/sql/mssql-vscode-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..2491427141d47f69731a7e112ffdfd5ce2815e1e GIT binary patch literal 197318 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%0DytNh+IGUZaQvGuL{ylPf@`vIyvlND$D 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�)O# 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
+
+

{description}

+ +
+ {linkText || "Learn more"} + + diff --git a/src/frontend/src/content/docs/integrations/ai/github-models.mdx b/src/frontend/src/content/docs/integrations/ai/github-models.mdx new file mode 100644 index 000000000..2e17b84bd --- /dev/null +++ b/src/frontend/src/content/docs/integrations/ai/github-models.mdx @@ -0,0 +1,13 @@ +--- +title: GitHub Models integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/ai/ollama.mdx b/src/frontend/src/content/docs/integrations/ai/ollama.mdx new file mode 100644 index 000000000..24759c064 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/ai/ollama.mdx @@ -0,0 +1,12 @@ +--- +title: Ollama integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/ai/openai.mdx b/src/frontend/src/content/docs/integrations/ai/openai.mdx new file mode 100644 index 000000000..a74e89041 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/ai/openai.mdx @@ -0,0 +1,12 @@ +--- +title: OpenAI integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/caching/garnet.mdx b/src/frontend/src/content/docs/integrations/caching/garnet.mdx new file mode 100644 index 000000000..b33aff47a --- /dev/null +++ b/src/frontend/src/content/docs/integrations/caching/garnet.mdx @@ -0,0 +1,12 @@ +--- +title: Garnet integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx new file mode 100644 index 000000000..9c21173fe --- /dev/null +++ b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx @@ -0,0 +1,12 @@ +--- +title: Redis Distributed Cache integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/caching/redis-output.mdx b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx new file mode 100644 index 000000000..47e0e2f9f --- /dev/null +++ b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx @@ -0,0 +1,12 @@ +--- +title: Redis Output Cache integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/caching/redis.mdx b/src/frontend/src/content/docs/integrations/caching/redis.mdx new file mode 100644 index 000000000..cb26cc6cf --- /dev/null +++ b/src/frontend/src/content/docs/integrations/caching/redis.mdx @@ -0,0 +1,12 @@ +--- +title: Redis integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/caching/valkey.mdx b/src/frontend/src/content/docs/integrations/caching/valkey.mdx new file mode 100644 index 000000000..9fad94025 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/caching/valkey.mdx @@ -0,0 +1,12 @@ +--- +title: Valkey integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx new file mode 100644 index 000000000..804b93b41 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx @@ -0,0 +1,4 @@ +--- +title: Azure integrations overview +--- + diff --git a/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx new file mode 100644 index 000000000..a84045ac4 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx @@ -0,0 +1,12 @@ +--- +title: Elasticsearch integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/eventstore.mdx b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx new file mode 100644 index 000000000..c164e9f57 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx @@ -0,0 +1,12 @@ +--- +title: EventStore integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx new file mode 100644 index 000000000..f8af61133 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx @@ -0,0 +1,12 @@ +--- +title: Meilisearch integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/milvus.mdx b/src/frontend/src/content/docs/integrations/databases/milvus.mdx new file mode 100644 index 000000000..2734fb249 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/milvus.mdx @@ -0,0 +1,12 @@ +--- +title: Milvus integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/mongodb.mdx b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx new file mode 100644 index 000000000..e07883dc5 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx @@ -0,0 +1,12 @@ +--- +title: MongoDB integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/mysql.mdx b/src/frontend/src/content/docs/integrations/databases/mysql.mdx new file mode 100644 index 000000000..e53f14bf4 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/mysql.mdx @@ -0,0 +1,12 @@ +--- +title: MySQL integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/oracle.mdx b/src/frontend/src/content/docs/integrations/databases/oracle.mdx new file mode 100644 index 000000000..de5bcdb97 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/oracle.mdx @@ -0,0 +1,12 @@ +--- +title: Oracle integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/postgres.mdx b/src/frontend/src/content/docs/integrations/databases/postgres.mdx similarity index 99% rename from src/frontend/src/content/docs/integrations/postgres.mdx rename to src/frontend/src/content/docs/integrations/databases/postgres.mdx index 9891295bf..19a6a084f 100644 --- a/src/frontend/src/content/docs/integrations/postgres.mdx +++ b/src/frontend/src/content/docs/integrations/databases/postgres.mdx @@ -1,6 +1,5 @@ --- -title: PostgreSQL Integration -prev: false +title: PostgreSQL integration --- import InstallPackage from '@components/InstallPackage.astro'; diff --git a/src/frontend/src/content/docs/integrations/databases/qdrant.mdx b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx new file mode 100644 index 000000000..5f70fe1ec --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx @@ -0,0 +1,12 @@ +--- +title: Qdrant integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx new file mode 100644 index 000000000..3362ae1a4 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx @@ -0,0 +1,12 @@ +--- +title: RavenDB integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/databases/sql-server.mdx b/src/frontend/src/content/docs/integrations/databases/sql-server.mdx new file mode 100644 index 000000000..5bded7ae1 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/sql-server.mdx @@ -0,0 +1,450 @@ +--- +title: SQL Server integration +description: Learn how to use the Aspire SQL Server integration, which includes both hosting and client integrations. +--- + +import LearnMore from '@components/LearnMore.astro'; +import InstallPackage from '@components/InstallPackage.astro'; +import InstallDotNetPackage from '@components/InstallDotNetPackage.astro'; +import { Aside, Code, Steps, Tabs, TabItem } from '@astrojs/starlight/components'; + +[SQL Server](https://www.microsoft.com/sql-server) is a relational database management system developed by Microsoft. The Aspire SQL Server integration enables you to connect to existing SQL Server instances or create new instances from .NET with the [`mcr.microsoft.com/mssql/server` container image](https://hub.docker.com/_/microsoft-mssql-server). + +## Hosting integration + +The SQL Server hosting integration models the server as the `SqlServerServerResource` type and the database as the `SqlServerDatabaseResource` type. To access these types and APIs, add the [📦 Aspire.Hosting.SqlServer](https://www.nuget.org/packages/Aspire.Hosting.SqlServer) NuGet package in the [AppHost](/get-started/app-host/) project. + + + +### Add SQL Server resource and database resource + +In your AppHost project, call `AddSqlServer` to add and return a SQL Server resource builder. Chain a call to the returned resource builder to `AddDatabase`, to add SQL Server database resource. + +```csharp title="C# — AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithLifetime(ContainerLifetime.Persistent); + +var db = sql.AddDatabase("database"); + +builder.AddProject("exampleproject") + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... + +builder.Build().Run(); +``` + +> [!NOTE] +> The SQL Server container is slow to start, so it's best to use a _persistent_ lifetime to avoid unnecessary restarts. For more information, see [Container resource lifetime](../../fundamentals/orchestrate-resources.md#container-resource-lifetime). + +When Aspire adds a container image to the AppHost, as shown in the preceding example with the `mcr.microsoft.com/mssql/server` image, it creates a new SQL Server instance on your local machine. A reference to your SQL Server resource builder (the `sql` variable) is used to add a database. The database is named `database` and then added to the `ExampleProject`. + +When adding a database resource to the app model, the database is created if it doesn't already exist. The creation of the database relies on the [AppHost eventing APIs](../../app-host/eventing.md), specifically `ResourceReadyEvent`. In other words, when the `sql` resource is _ready_, the event is raised and the database resource is created. + +The SQL Server resource includes default credentials with a `username` of `sa` and a random `password` generated using the `CreateDefaultPasswordParameter` method. + +When the AppHost runs, the password is stored in the AppHost's secret store. It's added to the `Parameters` section, for example: + +```json +{ + "Parameters:sql-password": "" +} +``` + +The name of the parameter is `sql-password`, but really it's just formatting the resource name with a `-password` suffix. For more information, see [Safe storage of app secrets in development in ASP.NET Core](https://learn.microsoft.com/aspnet/core/security/app-secrets) and [Add SQL Server resource with parameters](#add-sql-server-resource-with-parameters). + +The `WithReference` method configures a connection in the `ExampleProject` named `database`. + +> [!TIP] +> If you'd rather connect to an existing SQL Server, call `AddConnectionString` instead. For more information, see [Reference existing resources](../../fundamentals/app-host-overview.md#reference-existing-resources). + +### Add SQL Server resource with database scripts + +By default, when you add a `SqlServerDatabaseResource`, it relies on the following SQL script to create the database: + +```sql title="SQL — Default database creation script" +IF +( + NOT EXISTS + ( + SELECT 1 + FROM sys.databases + WHERE name = @DatabaseName + ) +) +CREATE DATABASE []; +``` + +To alter the default script, chain a call to the `WithCreationScript` method on the database resource builder: + +```csharp title="C# — AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithLifetime(ContainerLifetime.Persistent); + +var databaseName = "app-db"; +var creationScript = $$""" + IF DB_ID('{{databaseName}}') IS NULL + CREATE DATABASE [{{databaseName}}]; + GO + + -- Use the database + USE [{{databaseName}}]; + GO + + -- Create the todos table + CREATE TABLE todos ( + id INT PRIMARY KEY IDENTITY(1,1), -- Unique ID for each todo + title VARCHAR(255) NOT NULL, -- Short description of the task + description TEXT, -- Optional detailed description + is_completed BIT DEFAULT 0, -- Completion status + due_date DATE, -- Optional due date + created_at DATETIME DEFAULT GETDATE() -- Creation timestamp + ); + GO + + """; + +var db = sql.AddDatabase(databaseName) + .WithCreationScript(creationScript); + +builder.AddProject("exampleproject") + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... + +builder.Build().Run(); + +``` + +The preceding example creates a database named `app_db` with a single `todos` table. The SQL script is executed when the database resource is created. The script is passed as a string to the `WithCreationScript` method, which is then executed in the context of the SQL Server resource. + +### Add SQL Server resource with data volume + +To add a data volume to the SQL Server resource, call the `WithDataVolume` method on the SQL Server resource: + +```csharp title="C# — AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithDataVolume(); + +var db = sql.AddDatabase("database"); + +builder.AddProject("exampleproject") + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... + +builder.Build().Run(); +``` + +The data volume is used to persist the SQL Server data outside the lifecycle of its container. The data volume is mounted at the `/var/opt/mssql` path in the SQL Server container and when a `name` parameter isn't provided, the name is generated at random. For more information on data volumes and details on why they're preferred over [bind mounts](#add-sql-server-resource-with-data-bind-mount), see [Docker docs: Volumes](https://docs.docker.com/engine/storage/volumes). + +> [!WARNING] +> The password is stored in the data volume. When using a data volume and if the password changes, it will not work until you delete the volume. + +### Add SQL Server resource with data bind mount + +To add a data bind mount to the SQL Server resource, call the `WithDataBindMount` method: + +```csharp title="C# — AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithDataBindMount(source: @"C:\SqlServer\Data"); + +var db = sql.AddDatabase("database"); + +builder.AddProject("exampleproject") + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... + +builder.Build().Run(); +``` + + + +Data bind mounts rely on the host machine's filesystem to persist the SQL Server data across container restarts. The data bind mount is mounted at the `C:\SqlServer\Data` on Windows (or `/SqlServer/Data` on Unix) path on the host machine in the SQL Server container. For more information on data bind mounts, see [Docker docs: Bind mounts](https://docs.docker.com/engine/storage/bind-mounts). + +### Add SQL Server resource with parameters + +When you want to explicitly provide the password used by the container image, you can provide these credentials as parameters. Consider the following alternative example: + +```csharp title="C# — AppHost.cs" +var builder = DistributedApplication.CreateBuilder(args); + +var password = builder.AddParameter("password", secret: true); + +var sql = builder.AddSqlServer("sql", password); +var db = sql.AddDatabase("database"); + +builder.AddProject("exampleproject") + .WithReference(db) + .WaitFor(db); + +// After adding all resources, run the app... + +builder.Build().Run(); +``` + +For more information on providing parameters, see [External parameters](../../fundamentals/external-parameters.md). + +### Connect to database resources + +When the Aspire AppHost runs, the server's database resources can be accessed from external tools, such as [SQL Server Management Studio (SSMS)](/sql/ssms/download-sql-server-management-studio-ssms) or [MSSQL for Visual Studio Code](/sql/tools/visual-studio-code-extensions/mssql/mssql-extension-visual-studio-code). The connection string for the database resource is available in the dependent resources environment variables and is accessed using the [Aspire dashboard: Resource details](../../fundamentals/dashboard/explore.md#resource-details) pane. The environment variable is named `ConnectionStrings__{name}` where `{name}` is the name of the database resource, in this example it's `database`. Use the connection string to connect to the database resource from external tools. Imagine that you have a database named `todos` with a single `dbo.Todos` table. + + + + To connect to the database resource from SQL Server Management Studio, follow these steps: + + 1. Open SSMS. + 1. In the **Connect to Server** dialog, select the **Additional Connection Parameters** tab. + 1. Paste the connection string into the **Additional Connection Parameters** field and select **Connect**. + + ![SQL Server Management Studio: Connect to Server dialog.](../../../../assets/integrations/sql/ssms-new-connection.png) + + 1. If you're connected, you can see the database resource in the **Object Explorer**: + + ![SQL Server Management Studio: Connected to database.](../../../../assets/integrations/sql/ssms-connected.png) + + + + For more information, see [SQL Server Management Studio: Connect to a server](https://learn.microsoft.com/sql/ssms/quickstarts/ssms-connect-query-sql-server). + + + + To connect to the database resource from MSSQL for Visual Studio Code, follow these steps: + + + 1. Open the **SQL SERVER** extension. + 1. Select the **Add Connection** option under **CONNECTIONS**. + + ![MSSQL for Visual Studio Code: Connections / add connection screen capture.](../../../../assets/integrations/sql/mssql-vscode-add-connection.png) + + 1. Change the **Input type** to **Connection string** and paste the connection string into the **Connection string** field. + 1. Select **Connect**. + + ![MSSQL for Visual Studio Code: Connection string input details.](../../../../assets/integrations/sql/mssql-vscode-connection-details.png) + + 1. Once you're connected, you can see the database resource in the active tab and run queries against it: + + ![MSSQL for Visual Studio Code: Connected to database.](../../../../assets/integrations/sql/mssql-vscode-connected.png) + + + + For more information, see [MSSQL for Visual Studio Code](https://learn.microsoft.com/sql/tools/visual-studio-code-extensions/mssql/mssql-extension-visual-studio-code). + + + + +### Hosting integration health checks + +The SQL Server hosting integration automatically adds a health check for the SQL Server resource. The health check verifies that the SQL Server is running and that a connection can be established to it. + +The hosting integration relies on the [📦 AspNetCore.HealthChecks.SqlServer](https://www.nuget.org/packages/AspNetCore.HealthChecks.SqlServer) NuGet package. + +## Using with non-.NET applications + +The SQL Server hosting integration can be used with any application technology, not just .NET applications. When you use `WithReference` to reference a SQL Server resource, connection information is automatically injected as environment variables into the referencing application. + +For applications that don't use the [client integration](#client-integration), you can access the connection information through environment variables. Here's an example of how to configure environment variables for a non-.NET application: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var sql = builder.AddSqlServer("sql") + .WithLifetime(ContainerLifetime.Persistent); + +var database = sql.AddDatabase("myDatabase"); + +// Example: Configure a non-.NET application with SQL Server access +var app = builder.AddExecutable("my-app", "python", "app.py", ".") + .WithReference(database) // Provides ConnectionStrings__myDatabase + .WithEnvironment(context => + { + // Additional individual connection details as environment variables + context.EnvironmentVariables["SQL_SERVER"] = sql.Resource.PrimaryEndpoint.Property(EndpointProperty.Host); + context.EnvironmentVariables["SQL_PORT"] = sql.Resource.PrimaryEndpoint.Property(EndpointProperty.Port); + context.EnvironmentVariables["SQL_USERNAME"] = "sa"; + context.EnvironmentVariables["SQL_PASSWORD"] = sql.Resource.PasswordParameter; + context.EnvironmentVariables["SQL_DATABASE"] = database.Resource.DatabaseName; + }); + +builder.Build().Run(); +``` + +This configuration provides the non-.NET application with several environment variables: + +- `ConnectionStrings__myDatabase`: The complete SQL Server connection string +- `SQL_SERVER`: The hostname/IP address of the SQL Server +- `SQL_PORT`: The port number the SQL Server is listening on +- `SQL_USERNAME`: The username (typically `sa` for SQL Server) +- `SQL_PASSWORD`: The dynamically generated password +- `SQL_DATABASE`: The name of the database + +Your non-.NET application can then read these environment variables to connect to the SQL Server database using the appropriate database driver for that technology (for example, `pyodbc` for Python, `node-mssql` for Node.js, or `database/sql` with a SQL Server driver for Go). + +## Client integration + +To get started with the Aspire SQL Server client integration, install the [📦 Aspire.Microsoft.Data.SqlClient](https://www.nuget.org/packages/Aspire.Microsoft.Data.SqlClient) NuGet package in the client-consuming project, that is, the project for the application that uses the SQL Server client. The SQL Server client integration registers a `SqlConnection` instance that you can use to interact with SQL Server. + + + +### Add SQL Server client + +In the _Program.cs_ file of your client-consuming project, call the `AddSqlServerClient` extension method on any `IHostApplicationBuilder` to register a `SqlConnection` for use via the dependency injection container. The method takes a connection name parameter. + +```csharp +builder.AddSqlServerClient(connectionName: "database"); +``` + +> [!TIP] +> The `connectionName` parameter must match the name used when adding the SQL Server database resource in the AppHost project. In other words, when you call `AddDatabase` and provide a name of `database` that same name should be used when calling `AddSqlServerClient`. For more information, see [Add SQL Server resource and database resource](../sql-server-integration.md#add-sql-server-resource-and-database-resource). + +You can then retrieve the `SqlConnection` instance using dependency injection. For example, to retrieve the connection from an example service: + +```csharp +public class ExampleService(SqlConnection connection) +{ + // Use connection... +} +``` + +For more information on dependency injection, see [.NET dependency injection](/dotnet/core/extensions/dependency-injection). + +### Add keyed SQL Server client + +There might be situations where you want to register multiple `SqlConnection` instances with different connection names. To register keyed SQL Server clients, call the `AddKeyedSqlServerClient` method: + +```csharp +builder.AddKeyedSqlServerClient(name: "mainDb"); +builder.AddKeyedSqlServerClient(name: "loggingDb"); +``` + +> [!IMPORTANT] +> When using keyed services, it's expected that your SQL Server resource configured two named databases, one for the `mainDb` and one for the `loggingDb`. + +Then you can retrieve the `SqlConnection` instances using dependency injection. For example, to retrieve the connection from an example service: + +```csharp +public class ExampleService( + [FromKeyedServices("mainDb")] SqlConnection mainDbConnection, + [FromKeyedServices("loggingDb")] SqlConnection loggingDbConnection) +{ + // Use connections... +} +``` + +For more information on keyed services, see [.NET dependency injection: Keyed services](/dotnet/core/extensions/dependency-injection#keyed-services). + +### Configuration + +The Aspire SQL Server integration provides multiple options to configure the connection based on the requirements and conventions of your project. + +#### Use a connection string + +When using a connection string from the `ConnectionStrings` configuration section, you can provide the name of the connection string when calling the `AddSqlServerClient` method: + +```csharp +builder.AddSqlServerClient(connectionName: "sql"); +``` + +Then the connection string is retrieved from the `ConnectionStrings` configuration section: + +```json +{ + "ConnectionStrings": { + "database": "Data Source=myserver;Initial Catalog=master" + } +} +``` + +For more information on how to format this connection string, see the [ConnectionString](/dotnet/api/system.data.sqlclient.sqlconnection.connectionstring#remarks). + +#### Use configuration providers + +The Aspire SQL Server integration supports `Microsoft.Extensions.Configuration`. It loads the `MicrosoftDataSqlClientSettings` from configuration by using the `Aspire:Microsoft:Data:SqlClient` key. The following snippet is an example of a _:::no-loc text="appsettings.json":::_ file that configures some of the options: + +```json +{ + "Aspire": { + "Microsoft": { + "Data": { + "SqlClient": { + "ConnectionString": "YOUR_CONNECTIONSTRING", + "DisableHealthChecks": false, + "DisableMetrics": true + } + } + } + } +} +``` + +For the complete SQL Server client integration JSON schema, see [Aspire.Microsoft.Data.SqlClient/ConfigurationSchema.json](https://github.com/dotnet/aspire/blob/v8.2.2/src/Components/Aspire.Microsoft.Data.SqlClient/ConfigurationSchema.json). + +#### Use inline delegates + +Also you can pass the `Action configureSettings` delegate to set up some or all the options inline, for example to disable health checks from code: + +```csharp +builder.AddSqlServerClient( + "database", + static settings => settings.DisableHealthChecks = true); +``` + +### Client integration health checks + +By default, Aspire integrations enable [health checks](../../fundamentals/health-checks.md) for all services. For more information, see [Aspire integrations overview](../../fundamentals/integrations-overview.md). + +The Aspire SQL Server integration: + +- Adds the health check when `MicrosoftDataSqlClientSettings.DisableHealthChecks` is `false`, which attempts to connect to the SQL Server. +- Integrates with the `/health` HTTP endpoint, which specifies all registered health checks must pass for app to be considered ready to accept traffic. + +### Observability and telemetry + +Aspire integrations automatically set up Logging, Tracing, and Metrics configurations, which are sometimes known as *the pillars of observability*. Depending on the backing service, some integrations may only support some of these features. For example, some integrations support logging and tracing, but not metrics. Telemetry features can also be disabled using the techniques presented in the [Configuration](#configuration) section. + +#### Logging + +The Aspire SQL Server integration currently doesn't enable logging by default due to limitations of the `SqlClient`. + +#### Tracing + +The Aspire SQL Server integration emits the following tracing activities using OpenTelemetry: + +- `OpenTelemetry.Instrumentation.SqlClient` + +#### Metrics + +The Aspire SQL Server integration will emit the following metrics using OpenTelemetry: + +- Microsoft.Data.SqlClient.EventSource + - `active-hard-connections` + - `hard-connects` + - `hard-disconnects` + - `active-soft-connects` + - `soft-connects` + - `soft-disconnects` + - `number-of-non-pooled-connections` + - `number-of-pooled-connections` + - `number-of-active-connection-pool-groups` + - `number-of-inactive-connection-pool-groups` + - `number-of-active-connection-pools` + - `number-of-inactive-connection-pools` + - `number-of-active-connections` + - `number-of-free-connections` + - `number-of-stasis-connections` + - `number-of-reclaimed-connections` diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx new file mode 100644 index 000000000..db6de1fe7 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx @@ -0,0 +1,12 @@ +--- +title: SQLite integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/devtools/dab.mdx b/src/frontend/src/content/docs/integrations/devtools/dab.mdx new file mode 100644 index 000000000..162023330 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/devtools/dab.mdx @@ -0,0 +1,12 @@ +--- +title: Data API Builder integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx new file mode 100644 index 000000000..a40749236 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx @@ -0,0 +1,12 @@ +--- +title: SQL Database Projects integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx new file mode 100644 index 000000000..1ba9d60ea --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx @@ -0,0 +1,13 @@ +--- +title: Bun integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx new file mode 100644 index 000000000..d3c59ba30 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx @@ -0,0 +1,12 @@ +--- +title: Dapr integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx new file mode 100644 index 000000000..fc75798c1 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx @@ -0,0 +1,13 @@ +--- +title: Deno integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx new file mode 100644 index 000000000..ff70ca6ad --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx @@ -0,0 +1,13 @@ +--- +title: Go integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/java.mdx b/src/frontend/src/content/docs/integrations/frameworks/java.mdx new file mode 100644 index 000000000..69c23770a --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/java.mdx @@ -0,0 +1,13 @@ +--- +title: Java integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/python.mdx b/src/frontend/src/content/docs/integrations/frameworks/python.mdx new file mode 100644 index 000000000..770403710 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/python.mdx @@ -0,0 +1,13 @@ +--- +title: Python integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/frameworks/rust.mdx b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx new file mode 100644 index 000000000..7b37a37fb --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx @@ -0,0 +1,13 @@ +--- +title: Rust integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx new file mode 100644 index 000000000..29a2ce838 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx @@ -0,0 +1,12 @@ +--- +title: Apache Kafka integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + \ No newline at end of file diff --git a/src/frontend/src/content/docs/integrations/messaging/nats.mdx b/src/frontend/src/content/docs/integrations/messaging/nats.mdx new file mode 100644 index 000000000..271881f3d --- /dev/null +++ b/src/frontend/src/content/docs/integrations/messaging/nats.mdx @@ -0,0 +1,12 @@ +--- +title: NATS integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/rabbitmq.mdx b/src/frontend/src/content/docs/integrations/messaging/rabbitmq.mdx similarity index 97% rename from src/frontend/src/content/docs/integrations/rabbitmq.mdx rename to src/frontend/src/content/docs/integrations/messaging/rabbitmq.mdx index a87d1db9f..ac4ac47c4 100644 --- a/src/frontend/src/content/docs/integrations/rabbitmq.mdx +++ b/src/frontend/src/content/docs/integrations/messaging/rabbitmq.mdx @@ -1,6 +1,5 @@ --- title: RabbitMQ Integration -next: false --- import InstallPackage from '@components/InstallPackage.astro'; @@ -124,11 +123,11 @@ builder.AddProject() The RabbitMQ management plugin provides an HTTP-based API for management and monitoring of your RabbitMQ server. Aspire adds another container image [`docker.io/library/rabbitmq-management`](https://hub.docker.com/_/rabbitmq) to the AppHost that runs the management plugin. You can access the management plugin from the Aspire dashboard by selecting an endpoint for your RabbitMQ resource: -![The Aspire dashboard interface displays a list of resources with RabbitMQ selected. The right panel shows endpoints including a link labeled Management Plugin. The environment is a web-based dashboard with a clean, organized layout. Visible text includes Management Plugin and other resource names. The tone is neutral and informative, focusing on guiding users to access the RabbitMQ management plugin.](../../../assets/integrations/rabbitmq/dashboard-access-rabbitmq-management.png) +![The Aspire dashboard interface displays a list of resources with RabbitMQ selected. The right panel shows endpoints including a link labeled Management Plugin. The environment is a web-based dashboard with a clean, organized layout. Visible text includes Management Plugin and other resource names. The tone is neutral and informative, focusing on guiding users to access the RabbitMQ management plugin.](../../../../assets/integrations/rabbitmq/dashboard-access-rabbitmq-management.png) Log into the management plugin using the credentials you configured with parameters: -![RabbitMQ management plugin dashboard showing an overview of queues, exchanges, and connections. The interface displays navigation tabs for Overview, Connections, Channels, Exchanges, Queues, Admin, and a search bar. Visible text includes RabbitMQ Management, Overview, Queues, Exchanges, and Connections. The environment is a web-based dashboard with a clean and organized layout. The tone is neutral and informative, focusing on providing management and monitoring information for RabbitMQ.](../../../assets/integrations/rabbitmq/rabbitmq-management-plugin.png) +![RabbitMQ management plugin dashboard showing an overview of queues, exchanges, and connections. The interface displays navigation tabs for Overview, Connections, Channels, Exchanges, Queues, Admin, and a search bar. Visible text includes RabbitMQ Management, Overview, Queues, Exchanges, and Connections. The environment is a web-based dashboard with a clean and organized layout. The tone is neutral and informative, focusing on providing management and monitoring information for RabbitMQ.](../../../../assets/integrations/rabbitmq/rabbitmq-management-plugin.png) ### Hosting integration health checks @@ -213,7 +212,7 @@ For more information on how to format this connection string, see the [RabbitMQ #### Use configuration providers -The Aspire RabbitMQ integration supports `Configuration`. It loads the `RabbitMQClientSettings` from configuration by using the `Aspire:RabbitMQ:Client` key. The following snippet is an example of a _:::no-loc text="appsettings.json":::_ file that configures some of the options: +The Aspire RabbitMQ integration supports `Configuration`. It loads the `RabbitMQClientSettings` from configuration by using the `Aspire:RabbitMQ:Client` key. The following snippet is an example of a _appsettings.json_ file that configures some of the options: ```json title="JSON — appsettings.json" { diff --git a/src/frontend/src/content/docs/integrations/observability/seq.mdx b/src/frontend/src/content/docs/integrations/observability/seq.mdx new file mode 100644 index 000000000..0e15376cd --- /dev/null +++ b/src/frontend/src/content/docs/integrations/observability/seq.mdx @@ -0,0 +1,12 @@ +--- +title: Seq integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx new file mode 100644 index 000000000..89935a21c --- /dev/null +++ b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx @@ -0,0 +1,12 @@ +--- +title: YARP (Yet Another Reverse Proxy) integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/security/keycloak.mdx b/src/frontend/src/content/docs/integrations/security/keycloak.mdx new file mode 100644 index 000000000..01ec97d1e --- /dev/null +++ b/src/frontend/src/content/docs/integrations/security/keycloak.mdx @@ -0,0 +1,12 @@ +--- +title: Keycloak integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/whats-new/aspire-13.mdx b/src/frontend/src/content/docs/whats-new/aspire-13.mdx new file mode 100644 index 000000000..e9a8d35c8 --- /dev/null +++ b/src/frontend/src/content/docs/whats-new/aspire-13.mdx @@ -0,0 +1,1634 @@ +--- +title: What's new in Aspire 13 +description: Learn what's new in Aspire 13. +tableOfContents: + minHeadingLevel: 2 + maxHeadingLevel: 2 +--- + +📢 Aspire 13 represents a major milestone in the Aspire product line. + +Aspire is no longer ".NET Aspire" - it's now simply **Aspire**, a full **polyglot cloud-native application platform**. While Aspire continues to provide best-in-class support for .NET applications, version 13.0 elevates **Python and JavaScript to first-class citizens**, with comprehensive support for running, debugging, and deploying applications written in these languages. + +This release introduces: + +- **First-class Python support**: Debug Python modules in VS Code, deploy with uvicorn, use modern tooling like uv, and generate production Dockerfiles automatically +- **First-class JavaScript support**: Vite and npm-based apps with package manager auto-detection, debugging support, and container-based build pipelines +- **Polyglot infrastructure**: Connection properties work in any language (URI, JDBC, individual properties), certificate trust across languages and containers +- **Container files as build artifacts**: A new paradigm where build outputs are containers, not folders - enabling reproducible, isolated, and portable builds +- **Modern CLI**: `aspire init` to Aspirify existing apps, and `aspire do` as the foundation for the next-generation build/publish/deploy pipeline + +Along with the rebranding, Aspire now has a new home at **[aspire.dev](https://aspire.dev)** - your central hub for documentation, getting started guides, and community resources. + +**Requirements:** + +- .NET 10 SDK or later + +import { Icon } from '@astrojs/starlight/components'; + +If you have feedback, questions, or want to contribute to Aspire, collaborate with us on [ GitHub](https://github.com/dotnet/aspire) or join us on our new [ Discord](https://aka.ms/aspire-discord) to chat with the team and other community members. + +## 🆙 Upgrade to Aspire 13.0 + +> [!IMPORTANT] +> Aspire 13.0 is a major version release with breaking changes. Please review the [Breaking changes](#-breaking-changes) section before upgrading. + +The easiest way to upgrade to Aspire 13.0 is using the `aspire update` command: + +1. Update the Aspire CLI to the latest version: + + ```bash + # Bash + curl -sSL https://aspire.dev/install.sh | bash + + # PowerShell + iex "& { $(irm https://aspire.dev/install.ps1) }" + ``` + +2. Update your Aspire project using the [`aspire update` command](#aspire-update-command): + + ```bash + aspire update + ``` + + This command will: + - Update the Aspire.AppHost.Sdk version in your AppHost project + - Update all Aspire NuGet packages to version 13.0 + - Handle dependency resolution automatically + - Support both regular projects and Central Package Management (CPM) + +3. Update your Aspire templates: + + ```bash + dotnet new install Aspire.ProjectTemplates + ``` + +> [!NOTE] +> If you're upgrading from Aspire 8.x, follow [the upgrade guide](../get-started/upgrade-to-aspire-9.md) first to upgrade to 9.x, then upgrade to 13.0. + +## 🌐 Aspire as a polyglot platform + +Aspire 13 marks a transformative shift from a .NET-centric orchestration tool to a truly **polyglot cloud-native application platform**. Python and JavaScript are now first-class citizens alongside .NET, with comprehensive support for development, debugging, and deployment workflows. + +### Python as a first-class citizen + +Aspire 13 introduces comprehensive Python support, making it effortless to build, debug, and deploy Python applications alongside your other services. + +#### Flexible Python application models + +Aspire provides three ways to run Python code, each suited to different use cases: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Run a Python script directly +var script = builder.AddPythonScript("data-processor", "./scripts", "process.py") + .WithReference(database); + +// Run a Python module (python -m module_name) +var worker = builder.AddPythonModule("worker", "./worker", "worker.main") + .WithReference(queue); + +// Run any Python executable (e.g., Flask, FastAPI, uvicorn) +var api = builder.AddPythonExecutable("api", "./api", "uvicorn", ["main:app", "--reload"]); +``` + +#### Uvicorn integration for ASGI applications + +For Python web applications using ASGI frameworks like FastAPI, Starlette, or Quart, Aspire provides dedicated `AddUvicornApp` support: + +```csharp +var api = builder.AddUvicornApp("api", "./api", "main:app") + .WithUvEnvironment() // Use uv for fast, modern Python package management + .WithExternalHttpEndpoints() + .WithReference(database) + .WithHttpHealthCheck("/health"); +``` + +The `AddUvicornApp` method automatically: +- Configures HTTP/HTTPS endpoints +- Sets up appropriate Uvicorn command-line arguments +- Supports hot-reload during development +- Integrates with Aspire's health check system + +#### Modern Python tooling with uv + +Aspire 13 integrates with [uv](https://github.com/astral-sh/uv), the modern Python package and project manager: + +```csharp +builder.AddUvicornApp("api", "./api", "main:app") + .WithUvEnvironment(); // Automatically uses uv for package management +``` + +When using `WithUvEnvironment()`, Aspire: +- Uses uv for fast, reliable dependency resolution +- Automatically syncs dependencies from `pyproject.toml` +- Creates isolated virtual environments per project +- Leverages uv's performance benefits (10-100x faster than pip) + +#### VS Code debugging support + +Python applications can be debugged directly in VS Code with full breakpoint support. Aspire 13 adds debugging support for: + +- **Python scripts**: Debug `AddPythonScript` resources +- **Python modules**: Debug `AddPythonModule` with proper module resolution +- **Flask applications**: Debug Flask apps with auto-reload +- **Uvicorn/FastAPI**: Debug ASGI applications with hot-reload + +The Aspire IDE extensions automatically configure the Python debugger with the correct launch configuration, environment variables, and working directories. + +#### Automatic Dockerfile generation + +Aspire automatically generates production-ready Dockerfiles for Python applications when publishing. No additional configuration is required: + +```csharp +builder.AddUvicornApp("api", "./api", "main:app") + .WithUvEnvironment(); +``` + +When you publish this app, Aspire automatically generates a Dockerfile that: +- Uses appropriate Python base images +- Installs dependencies using uv or pip +- Configures the working directory +- Sets up the ASGI server with production settings +- Follows Python container best practices + +#### Starter template: Vite + FastAPI + +Aspire 13 includes a new `aspire-py-starter` template that demonstrates a full-stack Python application: + +```bash +aspire new aspire-py-starter +``` + +This template includes: +- **FastAPI backend**: Python ASGI application using Uvicorn +- **Vite + React frontend**: Modern JavaScript frontend with TypeScript +- **OpenTelemetry integration**: Distributed tracing across Python and JavaScript +- **Redis caching** (optional): Shared cache between services +- **Container files**: Frontend static files served by the Python backend + +The template demonstrates how to build polyglot applications with Python and JavaScript working together seamlessly. + +### JavaScript as a first-class citizen + +Aspire 13 refactors and expands JavaScript support, introducing `AddJavaScriptApp` as the foundational method for all JavaScript applications. + +#### Unified JavaScript application model + +The new `AddJavaScriptApp` method replaces the older `AddNpmApp` (now obsolete) and provides a consistent way to add JavaScript applications: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add a JavaScript application - runs "npm run dev" by default +var frontend = builder.AddJavaScriptApp("frontend", "./frontend"); + +// Use a different package manager +var admin = builder.AddJavaScriptApp("admin", "./admin") + .WithYarn(); +``` + +By default, `AddJavaScriptApp`: +- Automatically detects npm from `package.json` +- Runs the "dev" script during local development +- Runs the "build" script when publishing to create production assets + +#### Package manager flexibility + +Aspire automatically detects and supports multiple JavaScript package managers. You can explicitly specify a package manager or customize installation: + +```csharp +// Explicitly use npm with custom install command +var app1 = builder.AddJavaScriptApp("app1", "./app1") + .WithNpm(installCommand: "ci"); // Use npm ci for faster, deterministic installs + +// Use yarn with frozen lockfile in production +var app2 = builder.AddJavaScriptApp("app2", "./app2") + .WithYarn(installArgs: ["--immutable"]); + +// Use pnpm with specific flags +var app3 = builder.AddJavaScriptApp("app3", "./app3") + .WithPnpm(installArgs: ["--frozen-lockfile"]); +``` + +#### Customizing scripts + +You can customize which scripts run during development and build: + +```csharp +// Use different script names +var app = builder.AddJavaScriptApp("app", "./app") + .WithRunScript("start") // Run "npm run start" during development instead of "dev" + .WithBuildScript("prod"); // Run "npm run prod" during publish instead of "build" +``` + +#### Vite support + +`AddViteApp` is now a specialization of `AddJavaScriptApp` with Vite-specific optimizations: + +```csharp +var frontend = builder.AddViteApp("frontend", "./frontend") + .WithReference(api); +``` + +Vite applications get: +- Automatic port binding configuration +- Hot module replacement (HMR) support +- Optimized build scripts for production +- Automatic Dockerfile generation + +#### Dynamic Dockerfile generation + +JavaScript applications automatically generate Dockerfiles when published, with intelligent defaults based on your package manager: + +```csharp +var app = builder.AddJavaScriptApp("app", "./app"); +``` + +The generated Dockerfile: +- Detects Node.js version from `.nvmrc`, `.node-version`, `package.json`, or `.tool-versions` +- Uses multi-stage builds for smaller images +- Installs dependencies in a separate layer for better caching +- Runs your build script to create production assets +- Defaults to `node:22-slim` if no version is specified + +#### Container files as build artifacts + +JavaScript applications can specify that their build output should be used as container files for other services: + +```csharp +var frontend = builder.AddViteApp("frontend", "./frontend"); + +var api = builder.AddUvicornApp("api", "./api", "main:app") + .WithReference(frontend); + +// Publish frontend's dist folder as static files in the API container +api.PublishWithContainerFiles(frontend, "./static"); +``` + +This pattern: +- Builds the frontend as a container +- Extracts the `/app/dist` directory from the container +- Copies it into the API's container at `./static` +- Enables the Python API to serve the frontend static files + +This approach provides **reproducible builds** where the frontend is always built in an isolated container environment, not on the developer's machine. + +### Polyglot infrastructure + +Beyond language-specific support, Aspire 13 introduces infrastructure features that work across all languages. + +#### Polyglot connection properties + +Database resources now expose multiple connection string formats automatically, making it easy to connect from any language: + +```csharp +var postgres = builder.AddPostgres("db").AddDatabase("mydb"); + +// .NET app uses service discovery +var dotnetApi = builder.AddProject() + .WithReference(postgres); + +// Python app can use URI format +var pythonWorker = builder.AddPythonModule("worker", "./worker", "worker.main") + .WithEnvironment("DATABASE_URL", postgres.Resource.UriExpression); + +// Java app can use JDBC format +var javaApp = builder.AddExecutable("java-app", "java", "./app", ["-jar", "app.jar"]) + .WithEnvironment("DB_JDBC", postgres.Resource.JdbcConnectionStringExpression); +``` + +When you reference a database resource with `WithReference`, Aspire automatically exposes multiple connection properties as environment variables: + +**PostgreSQL example** - for a resource named `db`, Aspire exposes: +- `DB_URI` - PostgreSQL URI format: `postgresql://user:pass@host:port/dbname` +- `DB_JDBCCONNECTIONSTRING` - JDBC format: `jdbc:postgresql://host:port/dbname?user=user&password=pass` +- `DB_HOST`, `DB_PORT`, `DB_USERNAME`, `DB_PASSWORD`, `DB_DATABASENAME` - Individual properties + +**SQL Server example** - for a resource named `sql`, Aspire exposes: +- `SQL_URI` - SQL Server URI format: `mssql://user:pass@host:port/dbname` +- `SQL_JDBCCONNECTIONSTRING` - JDBC format: `jdbc:sqlserver://host:port;user=user;password=pass;databaseName=dbname;trustServerCertificate=true` +- `SQL_HOST`, `SQL_PORT`, `SQL_USERNAME`, `SQL_PASSWORD`, `SQL_DATABASENAME` - Individual properties + +**Oracle example** - for a resource named `oracle`, Aspire exposes: +- `ORACLE_URI` - Oracle URI format: `oracle://user:pass@host:port/dbname` +- `ORACLE_JDBCCONNECTIONSTRING` - JDBC format: `jdbc:oracle:thin:user/pass@//host:port/dbname` +- `ORACLE_HOST`, `ORACLE_PORT`, `ORACLE_USERNAME`, `ORACLE_PASSWORD`, `ORACLE_DATABASE` - Individual properties + +This works automatically for all supported databases including PostgreSQL, SQL Server, Oracle, MySQL, MongoDB, and more. No additional configuration needed - just use `WithReference` and access the connection format your language needs. + +> [!NOTE] +> These new connection property conventions are available in the built-in Aspire database integrations (PostgreSQL, SQL Server, Oracle, MySQL, MongoDB, etc.). If you have custom or community integrations, they may need to be updated to expose these properties. See the [connection properties agent documentation](https://github.com/dotnet/aspire/blob/main/.github/agents/connectionproperties.agent.md) for guidance on implementing these conventions in your own integrations. + +#### Certificate trust across languages + +Aspire 13 automatically configures certificate trust for Python, Node.js, and containerized applications without any additional configuration: + +```csharp +// Python applications automatically trust development certificates +var pythonApi = builder.AddUvicornApp("api", "./api", "main:app"); + +// Node.js applications automatically trust development certificates +var nodeApi = builder.AddJavaScriptApp("frontend", "./frontend"); + +// Containerized applications automatically trust development certificates +var container = builder.AddContainer("service", "myimage"); +``` + +Aspire automatically: +- **Python**: Configures `SSL_CERT_FILE` and `REQUESTS_CA_BUNDLE` environment variables +- **Node.js**: Configures `NODE_EXTRA_CA_CERTS` environment variable +- **Containers**: Mounts certificate bundles and configures appropriate environment variables +- **All platforms**: Generates and manages development certificates without manual intervention + +This enables secure HTTPS communication during local development across all languages and containerized services. + +#### Simplified service URL environment variables + +Aspire 13.0 introduces polyglot-friendly environment variables that make service discovery easier for non-.NET applications. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +// Python app gets simple environment variables +var pythonApp = builder.AddPythonModule("worker", "./worker", "worker.main") + .WithReference(api); // Sets API and API_HTTPS env vars + +await builder.Build().RunAsync(); +``` + +Instead of complex service discovery formats, non-.NET apps receive simple environment variables: + +- `API=http://localhost:5000` - HTTP endpoint +- `API_HTTPS=https://localhost:5001` - HTTPS endpoint + +This can be customized per-resource or per-type using `WithReferenceEnvironment()`: + +```csharp +var api = builder.AddProject("api"); + +var nodeApp = builder.AddJavaScriptApp("frontend", "./frontend") + .WithReference(api, env => + { + // Customize environment variable generation + env.EnvironmentVariables["API_URL"] = api.GetEndpoint("http"); + }); +``` + +This feature makes Aspire's service discovery mechanism accessible to any programming language, not just .NET applications with service discovery libraries. + +## 🛠️ CLI and tooling + +### aspire init command + +The new `aspire init` command provides a streamlined, interactive experience for initializing Aspire solutions with comprehensive project setup and configuration. + +```bash +# Initialize a new Aspire solution - interactive prompts guide you through setup +aspire init +``` + +When you run `aspire init`, the CLI will: + +- **Discover existing solutions**: Automatically finds and updates solution files in the current directory +- **Create single-file AppHost**: If no solution exists, creates a single-file AppHost for quick starts +- **Add projects intelligently**: Prompts to add projects to your app host +- **Configure service defaults**: Sets up service defaults referencing automatically +- **Setup NuGet.config**: Creates package source mappings for Aspire packages +- **Manage template versions**: Interactively selects the appropriate template version + +The init command simplifies the initial project setup through an interactive workflow that ensures consistent configuration across team members. + +> [!NOTE] +> The `aspire init` command sets up the Aspire project structure and configuration, but does not automatically add resources (databases, caches, message queues, etc.) to your AppHost. You'll need to manually add resource definitions to your AppHost code using methods like `AddPostgres`, `AddRedis`, `AddRabbitMQ`, etc. + +### aspire update improvements + +The `aspire update` command has received significant improvements in Aspire 13.0, including the new `--self` flag to update the CLI itself: + +```bash +# Update all Aspire packages in the current project +aspire update + +# Update the Aspire CLI itself (new in 13.0) +aspire update --self + +# Update a specific project +aspire update --project ./src/MyApp.AppHost +``` + +**New in Aspire 13.0:** + +- **CLI self-update**: The `--self` flag allows you to update the Aspire CLI without reinstalling +- **Improved reliability**: Numerous bug fixes for edge cases in dependency resolution +- **Better error handling**: Clearer error messages when updates fail +- **Performance improvements**: Faster package detection and update operations + +The `aspire update` command continues to support: + +- Central package management (CPM) solutions +- Diamond dependency resolution +- Single-file app hosts +- XML fallback parsing for unresolvable AppHost SDKs +- Enhanced visual presentation with colorized output +- Channel awareness (stable, preview, staging) + +### Single-file AppHost support + +Aspire 13.0 introduces comprehensive support for single-file app hosts, allowing you to define your entire distributed application in a single `.cs` file without a project file. + +```csharp +// apphost.cs +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); +var database = builder.AddPostgres("postgres"); + +api.WithReference(database); + +await builder.Build().RunAsync(); +``` + +Single-file app host support includes: + +- **Template support**: Use the `aspire-apphost-singlefile` template via `aspire new` +- **Full CLI integration**: Works seamlessly with `aspire run`, `aspire deploy`, `aspire publish`, `aspire add`, `aspire update` +- **Launch profile support**: Full debugging and launch configuration support +- **Python integration**: Enhanced Python and JavaScript application support + +> [!NOTE] +> Single-file app hosts require .NET 10.0 SDK or later. + +### Automatic .NET SDK installation (Preview) + +The Aspire CLI includes a preview feature for automatically installing required .NET SDK versions when they're missing. + +> [!IMPORTANT] +> This is a preview feature that is **not enabled by default**. To use automatic SDK installation, enable it with: +> ```bash +> aspire config set features.dotnetSdkInstallationEnabled true +> ``` + +Once enabled, the CLI will automatically install missing SDKs: + +```bash +# With the feature enabled, the CLI will automatically install the required SDK +aspire run + +# Installing .NET SDK 10.0.100... +# ✅ SDK installation complete +# Running app host... +``` + +The automatic SDK installation feature provides: + +- **Embeds installation scripts**: dotnet-install.sh and dotnet-install.ps1 as resources +- **Cross-platform support**: Works on Windows, macOS, and Linux +- **Version detection**: Automatically detects required SDK versions +- **Fallback support**: Provides alternative installation options if automatic installation fails + +When enabled, this preview feature can improve the onboarding experience for new team members and CI/CD environments. + +## 😲 Major new features + +### Distributed Application Pipeline + +Aspire 13.0 introduces a comprehensive pipeline system for coordinating build, deployment, and publishing operations. This new architecture provides a foundation for orchestrating complex deployment workflows with built-in support for step dependencies, parallel execution, and detailed progress reporting. + +The pipeline system replaces the previous publishing infrastructure with a more flexible, extensible model that allows resource-specific deployment logic to be decentralized and composed into larger workflows. + +> [!IMPORTANT] +> 🧪 **Early Preview**: The pipeline APIs are in early preview and marked as experimental. While these APIs may evolve based on feedback, we're confident this is the right direction as it enables much more flexible modeling of arbitrary build, publish, and deployment steps. The pipeline system provides the foundation for advanced deployment scenarios that weren't possible with the previous publishing model. + +**Global pipeline steps:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add a custom pipeline step that runs before build +builder.Pipeline.AddStep("validate", (context) => +{ + context.Logger.LogInformation("Running validation checks..."); + // Your custom validation logic + context.Logger.LogInformation("Validation complete!"); + return Task.CompletedTask; +}, requiredBy: "build"); + +await builder.Build().RunAsync(); +``` + +You can run this step directly using the CLI: + +```bash +# Run the validate step and all its dependencies +aspire do validate +``` + +**Resource-specific pipeline steps:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api") + .WithPipelineStepFactory(context => new PipelineStep + { + Name = "seed-database", + Action = async (ctx) => + { + ctx.Logger.LogInformation("Seeding database for {Resource}...", context.Resource.Name); + // Your seeding logic here + await Task.CompletedTask; + } + }); + +await builder.Build().RunAsync(); +``` + +**Configure step dependencies between resources:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +var frontend = builder.AddNpmApp("frontend", "../frontend") + .WithPipelineConfiguration(context => + { + // Get the build steps for this resource + var frontendBuild = context.GetSteps(context.Resource, WellKnownPipelineTags.BuildCompute); + + // Get the build steps for the API resource + var apiBuild = context.GetSteps(api.Resource, WellKnownPipelineTags.BuildCompute); + + // Make frontend build depend on API build + frontendBuild.DependsOn(apiBuild); + }); + +await builder.Build().RunAsync(); +``` + +The pipeline system includes: + +- **Global steps**: Define custom deployment steps with `builder.Pipeline.AddStep` +- **Resource steps**: Resources contribute steps via `WithPipelineStepFactory` +- **Dependency configuration**: Control step ordering with `WithPipelineConfiguration` +- **Parallel execution**: Steps run concurrently when dependencies allow +- **Built-in logging**: Use `context.Logger` to log step progress +- **CLI execution**: Run specific steps with `aspire do ` + +#### Executing pipelines with aspire do + +Once you've defined your pipeline steps using the APIs above, you can execute them through the CLI using the new `aspire do` command. This command serves as the primary entry point for running pipeline steps, whether they're built-in steps like `build`, `publish`, and `deploy`, or custom steps you've defined in your AppHost. + +The `aspire do` command understands the entire pipeline graph, automatically resolving dependencies and executing steps in the correct order. For example, when you run `aspire do deploy`, it will automatically run any prerequisite steps (like `build` and `publish`) before executing the deployment itself. + +```bash +# Execute a specific pipeline step (e.g., deploy) +# This automatically runs all required steps: build → publish → deploy +aspire do deploy + +# Execute with custom output path +aspire do publish --output-path ./artifacts + +# Execute with specific environment +aspire do deploy --environment Production + +# Execute with verbose logging +aspire do deploy --log-level debug + +# Execute a custom step you defined (like the "validate" example above) +aspire do validate +``` + +The `aspire do` command provides fine-grained control over deployment workflows, allowing you to execute any step in your pipeline independently while ensuring all dependencies are satisfied. + +For more details on the pipeline architecture, see [Deployment pipeline documentation](../deployment/pipeline-architecture.md). + +### Container files as build artifacts + +Aspire 13 introduces the ability to **extract files from one resource's container and copy them into another resource's container** during the build process. This enables powerful patterns like building a frontend in one container and serving it from a backend in another container. + +```csharp +var frontend = builder.AddViteApp("frontend", "./frontend"); + +var api = builder.AddUvicornApp("api", "./api", "main:app"); + +// Extract files FROM the frontend container and copy TO the api container +api.PublishWithContainerFiles(frontend, "./static"); +``` + +**How it works:** + +1. The `frontend` resource builds inside its container, producing output files at `/app/dist` +2. Aspire extracts those files from the frontend container +3. The files are copied into the `api` container at `./static` during the build process +4. The final `api` container contains both the API code and the frontend static files + +#### Example: Frontend with backend API + +A common pattern is building a frontend and serving it from a backend: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Build a Vite frontend in a container +var frontend = builder.AddViteApp("frontend", "./frontend"); + +// Python FastAPI backend +var api = builder.AddUvicornApp("api", "./api", "main:app") + .WithUvEnvironment() + .WithExternalHttpEndpoints(); + +// Extract frontend's /app/dist and copy to api's ./static +api.PublishWithContainerFiles(frontend, "./static"); + +builder.Build().Run(); +``` + +When you deploy this: + +1. **Frontend container builds**: Vite builds the React/Vue/Svelte app inside a Node container +2. **Files are extracted**: Aspire extracts `/app/dist` from the frontend container +3. **Files are injected**: The dist files are copied into the API container at `./static` +4. **Single deployment artifact**: The API container now contains both the Python app AND the frontend static files + +The FastAPI app can serve the static files: + +```python +from fastapi import FastAPI +from fastapi.staticfiles import StaticFiles + +app = FastAPI() + +# Serve the frontend static files +app.mount("/", StaticFiles(directory="static", html=True), name="static") + +# API endpoints +@app.get("/api/data") +def get_data(): + return {"message": "Hello from API"} +``` + +#### Using with .NET projects + +You can also use container files with .NET projects that produce build artifacts: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// .NET Blazor WebAssembly app that builds to wwwroot +var blazorWasm = builder.AddProject("blazor-wasm"); + +// .NET API that serves static files +var api = builder.AddProject("api"); + +// Copy Blazor's published wwwroot into the API container +api.PublishWithContainerFiles(blazorWasm, "./static"); +``` + +#### Container files in the pipeline + +Container files integrate seamlessly with the Distributed Application Pipeline: + +- **Dependency tracking**: The pipeline knows that the API container depends on the frontend container +- **Parallel execution**: Independent containers build in parallel +- **Incremental builds**: Only changed containers rebuild + +This makes container files a natural fit for complex build workflows with multiple dependent services. + +The `PublishWithContainerFiles` API is the key to this functionality, allowing you to specify which resource's container to extract files from and where to place them in the consuming container. + +### Dockerfile Builder API (Experimental) + +Aspire 13.0 introduces an experimental programmatic Dockerfile generation API that allows you to define Dockerfiles using C# code with a composable, type-safe API. + +> [!IMPORTANT] +> 🧪 **Experimental Feature**: The Dockerfile Builder API is experimental and may change before general availability. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var app = builder.AddContainer("goapp", "goapp") + .PublishAsDockerFile(publish => + { + publish.WithDockerfileBuilder("/path/to/goapp", context => + { + // Build stage - compile Go application + var buildStage = context.Builder + .From("golang:1.23-alpine", "builder") + .EmptyLine() + .Comment("Install build dependencies") + .Run("apk add --no-cache git") + .EmptyLine() + .WorkDir("/build") + .Comment("Download dependencies first for better caching") + .Copy("go.mod", "./") + .Copy("go.sum", "./") + .Run("go mod download") + .EmptyLine() + .Comment("Copy source and build") + .Copy(".", "./") + .Run("CGO_ENABLED=0 GOOS=linux go build -o /app/server ."); + + // Runtime stage - minimal runtime image + context.Builder + .From("alpine:latest", "runtime") + .EmptyLine() + .Comment("Install CA certificates for HTTPS") + .Run("apk add --no-cache ca-certificates") + .EmptyLine() + .Comment("Create non-root user") + .Run("adduser -D -u 1000 appuser") + .EmptyLine() + .Comment("Copy binary from builder") + .CopyFrom(buildStage.StageName!, "/app/server", "/app/server", "appuser:appuser") + .EmptyLine() + .User("appuser") + .WorkDir("/app") + .EmptyLine() + .Entrypoint(["/app/server"]); + }); + }); + +await builder.Build().RunAsync(); +``` + +The Dockerfile Builder API provides: + +- **Multi-stage builds**: Create stages with `From(image, stageName)` and reference them with `CopyFrom` +- **Fluent API**: Chain methods like `WorkDir`, `Copy`, `Run`, `Env`, `User`, `Entrypoint` +- **Comments and formatting**: Add comments and empty lines for readable generated Dockerfiles +- **BuildKit features**: Use `RunWithMounts` for cache mounts and bind mounts +- **Dynamic generation**: Access resource configuration via `context.Resource` to customize based on annotations + +This experimental feature enables sophisticated container image construction scenarios while maintaining the developer experience of working in C#. + +### Certificate management + +Aspire 13.0 introduces comprehensive certificate management capabilities for handling custom certificate authorities and developer certificate trust in containerized environments. + +#### Certificate authority collections + +Define and manage custom certificate collections for your distributed applications: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add a certificate authority collection +var certs = builder.AddCertificateAuthorityCollection("custom-certs") + .WithCertificatesFromFile("./certs/my-ca.pem") + .WithCertificatesFromStore( + StoreName.CertificateAuthority, + StoreLocation.LocalMachine); + +// Use the certificate collection in your resources +var api = builder.AddProject("api") + .WithReference(certs); + +await builder.Build().RunAsync(); +``` + +#### Developer certificate trust + +Automatically configure container trust for developer certificates on Mac and Linux: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api") + .WithDeveloperCertificateTrust(trust: true); // Trust dev certs in container + +await builder.Build().RunAsync(); +``` + +Certificate management features include: + +- **Multiple certificate sources**: Load from PEM files, Windows certificate stores, or programmatically +- **Flexible trust scoping**: System-level, append, override, or no trust +- **Container certificate paths**: Customize where certificates are placed in containers +- **Developer certificate support**: Automatic trust configuration for local development +- **Environment variable control**: Configure certificate behavior through environment variables + +These features enable production-ready certificate handling in development, testing, and deployment scenarios. + +## 📦 Integrations + +Aspire 13.0 introduces new integration packages that expand platform support. + +### .NET MAUI integration + +Aspire 13.0 introduces a new `Aspire.Hosting.Maui` package that enables orchestrating .NET MAUI mobile applications alongside your cloud services. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +// Add MAUI app for Windows +var mauiWindows = builder.AddMauiWindows("myapp-windows", "../MyApp/MyApp.csproj") + .WithReference(api); + +// Add MAUI app for Mac Catalyst +var mauiMac = builder.AddMauiMacCatalyst("myapp-mac", "../MyApp/MyApp.csproj") + .WithReference(api); + +await builder.Build().RunAsync(); +``` + +MAUI integration features: + +- **Platform support**: Windows and Mac Catalyst platforms +- **Device registration**: Register multiple device instances for testing +- **Platform validation**: Automatically detects host OS compatibility and marks resources as unsupported when needed +- **Full orchestration**: MAUI apps participate in service discovery and can reference backend services + +This enables a complete mobile + cloud development experience where you can run and debug your mobile app alongside your backend services in a single Aspire project. + +## 📊 Dashboard enhancements + +### Model Context Protocol (MCP) server + +The Dashboard now includes a Model Context Protocol (MCP) server implementation, enabling integration with external AI tools and development environments. + +The MCP server provides: + +- **Resource tools**: `AspireResourceMcpTools` for querying and managing resources +- **Telemetry tools**: `AspireTelemetryMcpTools` for accessing traces, logs, and metrics +- **VS Code integration**: Tab support in MCP dialog +- **Improved results**: Resource links and shortened names for better readability +- **Server configuration**: Flexible MCP server dialog settings + +This enables AI assistants like Claude and other MCP-compatible tools to directly interact with your Aspire applications, querying resources, analyzing telemetry, and providing intelligent insights. + +### Console logs refactoring + +The console logs page has been refactored using an item provider pattern with enhanced multi-resource viewing capabilities. + +**Features:** + +- **"All" resources view**: See logs from all resources in chronological order with colored prefixes +- **Shared logging channel**: Efficient log collection across resources +- **Smart timestamps**: Configurable timestamp display to reduce noise +- **Wrap log lines**: Optional line wrapping for long log entries +- **Race condition fixes**: Improved reliability when viewing logs from multiple resources + +```text +[api ] Application starting up +[postgres ] Database system is ready to accept connections +[redis ] Server initialized +[api ] Connected to database successfully +``` + +The refactored logs page makes it easier to understand the interaction between services in your distributed application. + +### Trace and telemetry improvements + +#### Trace details enhancements +- **Collapse/expand all**: Quickly expand or collapse all spans in a trace +- **Resource column**: See which resource produced each span +- **Span actions menu**: GenAI link and other actions from span details +- **Destination display**: Shows span destination information +- **Performance improvements**: Faster rendering for large traces + +#### Span filtering +- **Span type selector**: Filter spans by type (HTTP, Database, Messaging, etc.) +- **Cloud type filter**: Filter by cloud provider or service +- **Filter grouping**: Organized filter labels for better UX +- **Type classification**: Automatic span type detection + +#### Structured logs +- **Enhanced display**: Improved structured log entry visualization +- **Log level filtering**: Quick filter by log level (Error, Warning, Info, etc.) +- **Filter deduplication**: Cleaner filter lists + +### Markdown rendering + +The Dashboard now includes comprehensive markdown rendering capabilities with code block support and syntax highlighting. + +**Features:** + +- **MarkdownRenderer component**: Rich markdown display throughout the dashboard +- **Code block highlighting**: `HighlightedCodeBlockRenderer` with syntax highlighting +- **Custom extensions**: `AspireEnrichmentParser` for Aspire-specific markdown +- **Multi-language support**: Syntax highlighting for C#, JavaScript, Python, and more +- **Responsive styling**: Markdown CSS optimized for dashboard layouts + +This enables richer documentation, better error messages, and improved AI assistant responses with properly formatted code examples. + +### UI and accessibility improvements + +#### Visual enhancements +- **Updated FluentUI**: FluentUI 4.13.0 with improved components +- **Accent color refactoring**: Consistent color usage across the dashboard +- **Mobile/desktop toolbar**: Responsive toolbars that adapt to screen size +- **Vertical menu overflow**: Better handling of long menu lists +- **Span name truncation**: Ellipsis for long span names + +#### Interaction improvements +- **ComboBox filtering**: Enhanced filtering in dropdown selections +- **Default values**: Better support for choice input defaults +- **Parameter descriptions**: Custom input rendering for parameters +- **Dynamic inputs**: Load inputs based on other input values +- **Server-side validation**: Validation of interaction inputs + +#### Health check display +- **Timestamp display**: Shows when health checks last ran +- **"Just now" indicator**: Recent health check indication +- **Tooltip details**: Last run time in tooltips +- **Unhealthy state display**: Clear visualization of unhealthy resources + +## 🖥️ App model enhancements + +### C# app support + +Aspire 13.0 adds first-class support for C# file-based applications, enabling you to add C# apps without full project files to your distributed application. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add a C# file-based app +var app = builder.AddCSharpApp("myapp", "./path/to/app.cs") + .WithReference(database); + +await builder.Build().RunAsync(); +``` + +This feature works seamlessly with .NET 10 SDK's file-based application support and includes: + +- **CSharpAppResource**: New resource type for file-based apps +- **Launch profile support**: Debugging support for file-based apps +- **Service discovery**: File-based apps participate in service discovery + +### Network identifiers + +Aspire 13.0 introduces `NetworkIdentifier` for better network context awareness in endpoint resolution. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +// Get endpoint with specific network context +var localhostEndpoint = api.GetEndpoint("http", KnownNetworkIdentifiers.LocalhostNetwork); +var containerEndpoint = api.GetEndpoint("http", KnownNetworkIdentifiers.DefaultAspireContainerNetwork); + +await builder.Build().RunAsync(); +``` + +Network identifier features: + +- **Context-aware endpoint resolution**: Resolve endpoints based on the network context (host, container network, etc.) +- **Known network identifiers**: Predefined identifiers for common scenarios (`LocalhostNetwork`, `DefaultAspireContainerNetwork`, `PublicInternet`) +- **AllocatedEndpoint changes**: Endpoints now include their `NetworkID` instead of a container host address +- **Better container networking**: Improved support for container-to-container communication scenarios + +### Dynamic input system (Experimental) + +The new dynamic input system allows inputs to load options based on other input values, enabling sophisticated parameter prompting scenarios like cascading dropdowns. + +> [!NOTE] +> This is an experimental feature marked with `[Experimental("ASPIREINTERACTION001")]`. + +```csharp +var interactionService = serviceProvider.GetRequiredService(); + +var inputs = new List +{ + // First input - static options + new InteractionInput + { + Name = "Region", + InputType = InputType.Choice, + Label = "Azure Region", + Required = true, + Options = + [ + KeyValuePair.Create("eastus", "East US"), + KeyValuePair.Create("westus", "West US"), + KeyValuePair.Create("centralus", "Central US") + ] + }, + + // Second input - dynamically loads based on first input + new InteractionInput + { + Name = "Subscription", + InputType = InputType.Choice, + Label = "Subscription", + Required = true, + Disabled = true, // Initially disabled until region is selected + DynamicLoading = new InputLoadOptions + { + LoadCallback = async (context) => + { + // Access the region input value + var region = context.AllInputs["Region"].Value; + + if (!string.IsNullOrEmpty(region)) + { + // Load subscriptions for the selected region + var subscriptions = await GetSubscriptionsForRegionAsync(region, context.CancellationToken); + + context.Input.Options = subscriptions; + context.Input.Disabled = false; // Enable input when options are loaded + } + }, + DependsOnInputs = ["Region"] // Reload when Region changes + } + } +}; + +var result = await interactionService.PromptInputsAsync( + "Azure Configuration", + "Select your Azure region and subscription", + inputs, + cancellationToken); +``` + +Dynamic input features: + +- **InputLoadOptions**: Define callback-based option loading with `LoadCallback` +- **LoadInputContext**: Access other inputs via `context.AllInputs[name]`, cancellation token, and the current input via `context.Input` +- **Dependency tracking**: Specify dependencies with `DependsOnInputs` array to trigger reloading +- **Dynamic enable/disable**: Control `context.Input.Disabled` based on loaded data +- **Async support**: Load options from APIs, databases, or external services + +### Reference and connection improvements + +#### Named references + +Reference resources with explicit names for better service discovery control: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var database = builder.AddPostgres("postgres"); + +// Add a named reference for service discovery +var api = builder.AddProject("api") + .WithReference(database, "primary-db"); + +await builder.Build().RunAsync(); +``` + +#### Connection properties + +Access individual connection string properties programmatically: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var postgres = builder.AddPostgres("postgres"); +var db = postgres.AddDatabase("appdb"); + +// Get individual connection properties +var host = postgres.GetConnectionProperty("Host"); +var port = postgres.GetConnectionProperty("Port"); +var username = postgres.GetConnectionProperty("Username"); + +// Combine properties for custom connection strings +var customConnectionString = postgres.CombineProperties( + ("Host", host), + ("Port", port), + ("Username", username), + ("Database", db.Resource.DatabaseName)); + +await builder.Build().RunAsync(); +``` + +#### Endpoint reference enhancements + +More flexible endpoint resolution with network context awareness: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +// Get endpoint with network identifier context +var endpoint = api.GetEndpoint("http", NetworkIdentifier.Host); + +// Remap host URL (address and port) +var remappedEndpoint = api.GetEndpoint("http") + .WithHostUrlRemapping(newAddress: "custom-host", newPort: 8080); + +await builder.Build().RunAsync(); +``` + +#### Child relationships + +Model parent-child relationships between resources: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var parent = builder.AddContainer("parent", "parent-image"); + +var child = builder.AddContainer("child", "child-image") + .WithChildRelationship(parent); + +await builder.Build().RunAsync(); +``` + +### Event system + +Aspire 13.0 replaces lifecycle hooks with a new eventing system for better composability and testability. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var database = builder.AddPostgres("postgres") + .OnResourceStopped(async (resource, evt, cancellationToken) => + { + // Handle resource stopped event + Console.WriteLine($"Database {resource.Name} stopped"); + await CleanupAsync(cancellationToken); + }); + +await builder.Build().RunAsync(); +``` + +Event system features: + +- **IDistributedApplicationEventingSubscriber**: Subscribe to application events +- **ResourceStoppedEvent**: Triggered when resources stop +- **ResourceEndpointsAllocatedEvent**: Triggered when endpoints are allocated +- **Composable subscriptions**: Register multiple subscribers for the same event +- **Cancellation support**: Properly handle cancellation during event processing + +### Other app model improvements + +**Compute environment support (graduated from experimental)**: +- `WithComputeEnvironment` API is now stable (no longer marked as experimental) +- Deploy resources to specific compute environments without experimental warnings + +**Resource exclusion from MCP**: +- `ExcludeFromMcp` extension to exclude specific resources from Model Context Protocol exposure +- Control which resources are visible to AI assistants and MCP clients + +**Reference environment injection control**: +- `WithReferenceEnvironment` to control how environment variables are injected from references +- `ReferenceEnvironmentInjectionFlags` for fine-grained control over environment variable behavior + +**Helper methods**: +- `TryCreateResourceBuilder` for safely attempting resource builder creation with failure handling +- Returns false instead of throwing when resource builder creation fails + +## 🚀 Deployment improvements + +### Deployment pipeline reimplementation + +Aspire 13.0 completely reimplements the deployment workflow on top of the new [Distributed Application Pipeline](#distributed-application-pipeline) system. This architectural change transforms deployment from a monolithic operation into a composable set of discrete, parallelizable steps. + +#### Maximum parallelization + +The new deployment pipeline automatically parallelizes independent operations. Here's a real execution graph from `aspire do diagnostics` for an Azure deployment: + +``` +aspire deploy + +Execution order (14 total steps): + [0] build-prereq | deploy-prereq (parallel) + [1] build-fe | validate-azure-login (parallel) + [2] build-static | create-provisioning-context (parallel) + [3] provision-env + [4] login-to-acr-env + [5] push-static + [6] provision-static-containerapp + [7] print-static-summary | provision-azure-bicep-resources (parallel) + [8] print-dashboard-url-env + [9] deploy +``` + +Notice how the pipeline automatically parallelizes at multiple levels: +- **Level 0**: Prerequisites run in parallel +- **Level 1**: Frontend builds while Azure login validates (parallel) +- **Level 2**: Static files build while provisioning context is created (parallel) +- **Level 7**: Summary printing and Bicep resource provisioning run in parallel + +This dramatically reduces deployment time for applications with multiple services by executing independent steps concurrently. + +#### Granular step control + +You can now execute individual deployment phases as discrete operations using `aspire do`: + +```bash +# Build all containers +aspire do build + +# Push a specific container image +aspire do push-static + +# Provision Azure infrastructure +aspire do provision-azure-bicep-resources + +# Deploy everything +aspire deploy +``` + +This granular control enables powerful workflows: + +**Incremental deployments**: Build once, reuse across environments +```bash +aspire do build # Build containers locally +aspire do push-static # Push to registry +aspire do provision-azure-bicep-resources # Deploy infrastructure +aspire deploy # Complete deployment +``` + +**Debugging builds**: Iterate on specific steps +```bash +aspire do build-fe # Build just the frontend +aspire do build-static # Build just the static files +aspire deploy # Then deploy everything +``` + +**CI/CD integration**: Split pipeline stages +```bash +# CI stage: Build and test +aspire do build + +# CD stage: Push and deploy +aspire deploy +``` + +#### Pipeline diagnostics + +Aspire 13.0 includes a built-in `aspire do diagnostics` command to help you understand and troubleshoot your pipeline graph: + +```bash +aspire do diagnostics +``` + +This command provides comprehensive information about your pipeline: + +**Execution order analysis:** +Shows the complete execution order with parallelization indicators: +``` +Execution order (14 total steps): + [0] build-prereq | deploy-prereq (parallel) + [1] build-fe | validate-azure-login (parallel) + [2] build-static | create-provisioning-context (parallel) + ... +``` + +**Detailed step analysis:** +For each step, see: +- Dependencies (with validation) +- Associated resources +- Tags for categorization + +``` +Step: push-static + Dependencies: ✓ build-static, ✓ login-to-acr-env, ✓ provision-env + Resource: static-containerapp (AzureContainerAppResource) + Tags: push-container-image +``` + +**"What If" simulation:** +See exactly what steps will run for any target: +``` +If targeting 'build': + Total steps: 5 + Execution order: + [0] build-prereq | deploy-prereq (parallel) + [1] build-fe + [2] build-static + [3] build +``` + +**Problem detection:** +Identifies configuration issues: +- Orphaned steps (not required by anything) +- Missing dependencies +- Circular dependencies + +Use `aspire do diagnostics` when: +- Setting up a new deployment pipeline +- Adding custom pipeline steps +- Debugging why certain steps aren't running +- Understanding deployment performance + +#### Pipeline step benefits + +The pipeline-based deployment provides: + +- **Dependency tracking**: Steps automatically run prerequisites +- **Progress reporting**: Real-time status for each step +- **Failure isolation**: Identify exactly which step failed +- **Selective execution**: Run only the steps you need +- **Extensibility**: Add custom deployment steps via pipeline API +- **Built-in diagnostics**: `aspire do diagnostics` for pipeline visualization and troubleshooting + +For more details on the underlying pipeline system, see [Distributed Application Pipeline](#distributed-application-pipeline). + +### Deployment state management + +Aspire 13.0 introduces deployment state management that automatically persists deployment information locally across runs. When you deploy to Azure, Aspire now remembers your choices and deployment state between sessions. + +**What persists locally:** + +- **Azure configuration**: Subscription, resource group, location, and tenant selections +- **Parameter values**: Input values from previous deployments +- **Deployed resources**: Track what's been deployed and where +- **Deployment context**: Maintain context across multiple deployment runs + +**User experience:** + +```bash +# First deployment - you're prompted for configuration +aspire deploy +# Select Azure subscription, resource group, location, tenant... + +# Subsequent deployments - no prompts, uses saved state +aspire deploy +# Uses previous selections automatically +``` + +This eliminates repetitive prompts and makes iterative deployments faster. Your deployment configuration is stored locally (not in source control), so each developer can have their own Azure configuration without conflicts. + +**Example workflow:** + +1. First time: Select subscription "My Subscription", resource group "my-rg", location "eastus" +2. Deploy completes, state saved locally +3. Make code changes +4. Run `aspire deploy` again - automatically uses "My Subscription", "my-rg", "eastus" +5. No need to re-enter configuration + +The state is stored in your local user profile, making it seamless to work across multiple Aspire projects with different Azure configurations. + +## ☁️ Azure + +### Azure tenant selection + +Aspire 13.0 introduces interactive tenant selection during Azure provisioning, fixing issues with multi-tenant scenarios (work and personal accounts). + +When provisioning Azure resources, if multiple tenants are available, the CLI will prompt you to select the appropriate tenant. The tenant selection is stored alongside your subscription, location, and resource group choices for consistent deployments. + +```bash +aspire deploy + +# If you have multiple tenants, you'll be prompted: +# Select Azure tenant: +# > work@company.com (Default Directory) +# personal@outlook.com (Personal Account) +``` + +### Azure App Service enhancements + +Aspire 13.0 brings significant improvements to Azure App Service deployment, making it easier to deploy and monitor your applications in production. + +#### Aspire Dashboard in App Service + +The Aspire Dashboard is now included by default when deploying to Azure App Service, giving you visibility into your deployed applications: + +```csharp +builder.AddAzureAppServiceEnvironment("env"); +// Dashboard is included by default at https://[prefix]-aspire-dashboard.azurewebsites.net +``` + +The deployed dashboard provides the same experience as local development: view logs, traces, metrics, and application topology for your production environment. + +To disable the dashboard: + +```csharp +builder.AddAzureAppServiceEnvironment("env") + .WithDashboard(enable: false); +``` + +#### Application Insights integration + +Enable Azure Application Insights for comprehensive monitoring and telemetry: + +```csharp +builder.AddAzureAppServiceEnvironment("env") + .WithAzureApplicationInsights(); +``` + +When enabled, Aspire automatically: +- Creates a Log Analytics workspace +- Creates an Application Insights resource +- Configures all App Service Web Apps with the connection string +- Injects `APPLICATIONINSIGHTS_CONNECTION_STRING` into your applications + +You can also reference an existing Application Insights resource: + +```csharp +var insights = builder.AddAzureApplicationInsights("insights"); + +builder.AddAzureAppServiceEnvironment("env") + .WithAzureApplicationInsights(insights); +``` + +#### Automatic scaling + +Enable automatic scaling for the App Service Plan to improve performance and avoid cold start issues: + +```csharp +builder.AddAzureAppServiceEnvironment("env") + .WithAutomaticScaling(); +``` + +This enables elastic scale on the App Service Plan, capping at 10 workers following Azure best practices. Without automatic scaling, each app service scales independently with per-site scaling. + +## ⚠️ Breaking changes + +### Removed APIs + +The following APIs have been removed in Aspire 13.0: + +**Publishing infrastructure** (replaced by pipeline system): +- `PublishingContext` and `PublishingCallbackAnnotation` +- `DeployingContext` and `DeployingCallbackAnnotation` +- `WithPublishingCallback` extension method +- `IDistributedApplicationPublisher` interface +- `IPublishingActivityReporter`, `IPublishingStep`, `IPublishingTask` interfaces +- `NullPublishingActivityReporter` class +- `PublishingExtensions` class (all extension methods) +- `PublishingOptions` class + +**Lifecycle hooks** (replaced by eventing system): +- `IDistributedApplicationLifecycleHook` interface + +**Debugging APIs** (replaced with new flexible API): +- Old `WithDebugSupport` overload with `debugAdapterId` and `requiredExtensionId` parameters +- `SupportsDebuggingAnnotation` (replaced with new debug support annotation) + +**Diagnostic codes**: +- `ASPIRECOMPUTE001` diagnostics (removed - API graduated from experimental) +- `ASPIREPUBLISHERS001` (renamed to `ASPIREPIPELINES001-003`) + +### Changed signatures + +**AllocatedEndpoint constructor**: +```csharp +// Before (9.x) +var endpoint = new AllocatedEndpoint("http", 8080, containerHostAddress: "localhost"); + +// After (13.0) +var endpoint = new AllocatedEndpoint("http", 8080, networkIdentifier: NetworkIdentifier.Host); +``` + +**ParameterProcessor constructor**: +```csharp +// Before (9.x) +var processor = new ParameterProcessor(distributedApplicationOptions); + +// After (13.0) +var processor = new ParameterProcessor(deploymentStateManager); +``` + +**InteractionInput property changes**: +- `MaxLength`: Changed from settable to init-only +- `Options`: Changed from init-only to settable +- `Placeholder`: Changed from settable to init-only + +**WithReference for IResourceWithServiceDiscovery**: +- Added new overload with `name` parameter for named references +- Existing overload still available for compatibility + +**ProcessArgumentValuesAsync and ProcessEnvironmentVariableValuesAsync**: +```csharp +// Before (9.x) +await resource.ProcessArgumentValuesAsync( + executionContext, processValue, logger, + containerHostName: "localhost", cancellationToken); + +// After (13.0) - uses NetworkIdentifier instead +await resource.ProcessArgumentValuesAsync( + executionContext, processValue, logger, cancellationToken); +``` + +The `containerHostName` parameter has been removed from these extension methods. Network context is now handled through the `NetworkIdentifier` type. + +### Major architectural changes + +#### Universal container-to-host communication + +Aspire 13.0 introduces a major architectural change to enable universal container-to-host communication, independent of container orchestrator support. + +**What changed:** +- Leverages DCP's container tunnel capability for container-to-host connectivity +- `EndpointReference` resolution is now context-aware (uses `NetworkIdentifier`) +- Endpoint references are tracked by their `EndpointAnnotation` +- `AllocatedEndpoint` constructor signature changed (see above) + +**Impact:** +- This enables containers to communicate with host-based services reliably across all deployment scenarios +- Code that directly constructs `AllocatedEndpoint` objects will need updates +- Extension methods that process endpoint references may need Network Identifier context + +**Migration:** +Most applications won't need changes as the endpoint resolution happens automatically. However, if you have custom code that creates or processes endpoints: + +```csharp +// Before (9.x) +var endpoint = new AllocatedEndpoint("http", 8080, containerHostAddress: "localhost"); + +// After (13.0) - specify network context +var endpoint = new AllocatedEndpoint("http", 8080, networkIdentifier: NetworkIdentifier.Host); +``` + +This change fixes long-standing issues with container-to-host communication (issue #6547). + +#### Refactored AddNodeApp API + +The `AddNodeApp` API has been refactored in Aspire 13.0, introducing breaking changes to how Node.js applications are added. + +**What changed:** +- Updated method signatures and behavior +- Package manager integration changes (npm/yarn/pnpm now auto-install by default) + +**Impact:** +If you're using `AddNodeApp` directly, review your code for compatibility with the new API. The new Vite app support (`AddViteApp`) follows similar patterns. + +For most users, the changes are improvements that reduce boilerplate, but may require minor code updates if you have custom Node.js integrations. + +### Migration guide + +#### Migrating from publishing callbacks to pipeline steps + +**Before (9.x)**: +```csharp +var api = builder.AddProject("api") + .WithPublishingCallback(async (context, cancellationToken) => + { + // Custom publishing logic + await CustomDeployAsync(context, cancellationToken); + }); +``` + +**After (13.0)**: +```csharp +// Define a custom pipeline step +public class CustomDeployStep : PipelineStep +{ + public override async Task ExecuteAsync(PipelineStepContext context, CancellationToken cancellationToken) + { + // Custom deployment logic + await CustomDeployAsync(context, cancellationToken); + } +} + +// Register the step +var api = builder.AddProject("api"); +builder.Services.AddSingleton(); +``` + +For more details on the pipeline system, see [Deployment pipeline documentation](../deployment/pipeline-architecture.md). + +#### Migrating from lifecycle hooks to events + +**Before (9.x)**: +```csharp +public class MyLifecycleHook : IDistributedApplicationLifecycleHook +{ + public async Task BeforeStartAsync(DistributedApplicationModel model, CancellationToken cancellationToken) + { + // Logic before start + } +} + +builder.Services.AddSingleton(); +``` + +**After (13.0)**: +```csharp +public class MyEventSubscriber : IDistributedApplicationEventingSubscriber +{ + public async Task OnEventAsync(TEvent evt, CancellationToken cancellationToken) + where TEvent : IDistributedApplicationEvent + { + if (evt is BeforeStartEvent beforeStart) + { + // Logic before start + } + } +} + +builder.Services.AddSingleton(); +``` + +### Experimental features + +The following features are marked as `[Experimental]` and may change in future releases: + +- **Dockerfile builder API**: `WithDockerfileBuilder`, `AddDockerfileBuilder`, `WithDockerfileBaseImage` +- **C# app support**: `AddCSharpApp` +- **Dynamic inputs**: `InputLoadOptions`, dynamic input loading +- **Pipeline features**: `IDistributedApplicationPipeline` and related APIs + +To use experimental features, you must enable them explicitly and acknowledge they may change: + +```csharp +#pragma warning disable ASPIREXXX // Experimental feature +var app = builder.AddCSharpApp("myapp", "./app.cs"); +#pragma warning restore ASPIREXXX +``` + +--- + +**Feedback and contributions**: We'd love to hear about your experience with Aspire 13.0! Share feedback on [GitHub](https://github.com/dotnet/aspire/issues) or join the conversation on [Discord](https://aka.ms/aspire-discord). diff --git a/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx b/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx deleted file mode 100644 index adeb09f51..000000000 --- a/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx +++ /dev/null @@ -1,1702 +0,0 @@ ---- -title: What's new in Aspire 9.5 -description: Learn what's new in Aspire 9.5. -tableOfContents: - minHeadingLevel: 2 - maxHeadingLevel: 2 ---- - -📢 Aspire 9.5 is the next minor version release of Aspire. It supports: - -- .NET 8.0 Long Term Support (LTS) -- .NET 9.0 Standard Term Support (STS) -- .NET 10.0 Preview 6 - -import { Icon } from '@astrojs/starlight/components'; - -If you have feedback, questions, or want to contribute to Aspire, collaborate with us on [ GitHub](https://github.com/dotnet/aspire) or join us on our new [ Discord](https://aka.ms/aspire-discord) to chat with the team and other community members. - -It's important to note that Aspire releases out-of-band from .NET releases. While major versions of Aspire align with major .NET versions, minor versions are released more frequently. For more information on .NET and Aspire version support, see: - -- [.NET support policy](https://dotnet.microsoft.com/platform/support/policy): Definitions for LTS and STS. -- [Aspire support policy](https://dotnet.microsoft.com/platform/support/policy/aspire): Important unique product lifecycle details. - -## Upgrade to Aspire 9.5 - -> [!NOTE] Try out the new update command! -> Aspire 9.5 brings a new preview CLI command - [aspire update](#new-aspire-update-command-preview) - that can update your AppHost and its packages for you. Get the latest CLI if you want to try and give us feedback about it on [GitHub](https://github.com/dotnet/aspire/issues)! - -Moving between minor releases of Aspire is simple: - -1. Get the latest release of the Aspire CLI: - - ```bash - # Bash - curl -sSL https://aspire.dev/install.sh | bash - - # PowerShell - iex "& { $(irm https://aspire.dev/install.ps1) }" - ``` - -1. In your AppHost project file (that is, _MyApp.AppHost.csproj_), update the [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) NuGet package to version `9.5.0`: - - ```xml - - ``` - - For more information, see [Aspire SDK](https://learn.microsoft.com/dotnet/aspire/fundamentals/dotnet-aspire-sdk). - -1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command from C# Dev Kit in VS Code. - -1. Update to the latest [Aspire templates](https://learn.microsoft.com/dotnet/aspire/fundamentals/aspire-sdk-templates) by running the following .NET command line: - - ```bash - dotnet new install Aspire.ProjectTemplates - ``` - - > [!NOTE] - > The `dotnet new install` command will update existing Aspire templates to the latest version if they are already installed. - -If your AppHost project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using Aspire 8. To upgrade to 9, follow [the upgrade guide](https://learn.microsoft.com/dotnet/aspire/get-started/upgrade-to-aspire-9). - -## CLI and tooling - -### Channel-aware `aspire add` & templating - -You can now pick packages from different channels or versions during `aspire add` (#10801, #10899). Additionally, friendly name generation is now more flexible for searching packages. - -### New `aspire update` command (preview) - -The new `aspire update` command helps you keep your Aspire projects current by automatically detecting and updating outdated packages and templates. - -```bash -# Analyze and update out-of-date Aspire packages & templates -aspire update -``` - -**Features:** -- **Automated package detection**: Finds outdated Aspire NuGet packages while respecting channel configurations -- **Diamond dependency resolution**: Intelligently handles complex dependency graphs without duplicate updates (#11145) -- **Enhanced reporting**: Colorized output with detailed summary of changes (#11148) -- **Channel awareness**: Respects your configured Aspire channel (preview, stable, etc.) -- **Safe updates**: Validates package compatibility before applying changes - -> [!IMPORTANT] -> 🧪 **Preview Feature**: The `aspire update` command is in preview and may change before general availability. - -### Enhanced markdown and styling support - -Extended markdown rendering support (#10815) with improved developer experience: - -- **Code fences** with syntax highlighting for better readability -- **Rich text formatting** including emphasis, bold, and inline code -- **Structured lists** with bullet points and numbering -- **Safe markup escaping** to prevent XSS and rendering issues (#10462) -- Purple styling for default values in prompts (#10474) - -### File-based AppHost support in preview - -Aspire 9.5 introduces infrastructure for .NET 10's new file-based apps feature, meaning you only need 1 file - and no project file! - for your Aspire apphost. The new capabilities are currently behind a feature flag that elevates the minimum .NET SDK requirement to prepare for upcoming file-based app execution scenarios. - -```bash -# Enable single-file AppHost support (requires .NET 10.0.100 RC1+) -aspire config set features.singlefileAppHostEnabled true -``` - -**SDK version requirements:** -- **Default (flag disabled)**: Requires .NET SDK 9.0.302 or later -- **Feature enabled**: Requires .NET SDK 10.0.100 RC1 or later -- **Override support**: Manual SDK version overrides continue to work with highest precedence - -### SSH Remote support for port forwarding - -Version 9.5 adds first-class support for SSH Remote development environments, extending automatic port forwarding configuration to VS Code SSH Remote scenarios alongside existing Devcontainer and Codespaces support. - -**Features:** -- **Automatic environment detection**: Detects SSH Remote scenarios via `VSCODE_IPC_HOOK_CLI` and `SSH_CONNECTION` environment variables -- **Seamless port forwarding**: Automatically configures VS Code settings for Aspire application endpoints -- **Consistent developer experience**: Matches existing behavior for Devcontainers and Codespaces -- **No configuration required**: Works out-of-the-box when using VS Code SSH Remote extension - -SSH Remote environments are automatically detected when both environment variables are present: - -```bash -# SSH Remote environment variables (automatically set) -export SSH_CONNECTION="192.168.1.1 12345 192.168.1.2 22" -export VSCODE_IPC_HOOK_CLI="/path/to/vscode/hook" - -# Aspire automatically detects and configures port forwarding -dotnet run --project MyApp.AppHost -``` - -Perfect for remote development scenarios: -- **Remote server development**: Working on a remote Linux server via SSH -- **Cloud development environments**: Using cloud-based development VMs -- **Team development servers**: Shared development environments accessed via SSH -- **Cross-platform development**: Developing on remote machines with different OS - -The SSH Remote support follows the exact same patterns as existing Devcontainer and Codespaces integration, ensuring a consistent experience across all VS Code remote development scenarios. Port forwarding settings are automatically written to `.vscode-server/data/Machine/settings.json` when SSH Remote environments are detected. - -### `aspire exec` command enhancements - -The `aspire exec` command allows you to execute commands within the context of your Aspire application environment, inheriting environment variables and configuration from your app model resources. - -Building on the 9.4 preview, version 9.5 adds several key improvements: - -- `--workdir` (`-w`) flag to run commands inside a specific working directory (#10912) -- Fail-fast argument validation with clearer error messages (#10606) -- Improved help and usage text for better developer experience (#10598) - -#### Basic usage examples - -```bash -# Execute database migrations with environment variables from your app model -aspire exec --resource my-api -- dotnet ef database update - -# Run commands in a specific working directory -aspire exec --resource worker --workdir /app/tools -- dotnet run - -# Wait for resource to start before executing command -aspire exec --start-resource my-worker -- npm run build -``` - -#### Command syntax - -- Use `--resource` to execute immediately when AppHost starts -- Use `--start-resource` to wait for the resource to be running first -- Use `--workdir` to specify the working directory for the command -- Use `--` to separate aspire options from the command to execute - -> [!IMPORTANT] -> 🧪 **Feature Flag**: The `aspire exec` command requires explicit enablement with: -> -> ```bash -> aspire config set features.execCommandEnabled true -> ``` - -### Other tweaks - -- Relative path included in AppHost status messages + TUI dashboard (#11132) -- Clean Spectre Console debug logging with reduced noise (#11125) -- Directory safety check for `aspire new` (#10496) and consistent template inputs (#10444, #10508) -- Refactored NuGet prefetch architecture (#11120) reducing UI lag during `aspire new` on macOS (#11069) and enabling command-aware caching. Temporary NuGet config improvements ensure wildcard mappings (#10894). -- Context-sensitive completion messages for publish/deploy (#10501) -- Markdown-to-Spectre converter foundation reuse (#10815) -- Interaction answer typing change (`object`) for future extensibility (#10480) -- Improved CTRL+C message and experience - -> The `aspire exec` and `aspire update` commands remain in preview behind feature flags; behavior may change in a subsequent release. - -## Dashboard enhancements - -### Deep-linked telemetry navigation - -The dashboard now provides seamless navigation between different telemetry views with interactive elements in property grids. Trace IDs, span IDs, resource names, and log levels become clickable buttons for one-click navigation (#10648). - -- **Trace IDs**: Click to view the complete distributed trace -- **Span IDs**: Navigate directly to specific trace spans -- **Resource names**: Jump to resource-specific telemetry views -- **Log levels**: Filter logs by severity level instantly - -This eliminates the need to manually copy/paste identifiers between different dashboard views, making debugging and monitoring much more efficient. - -### Multi-resource console logs - -A new "All" option in the console logs view streams logs from every running resource simultaneously (#10981). - -**Features:** -- **Unified log stream**: See logs from all resources in chronological order -- **Color-coded prefixes**: Each resource gets a deterministic color for easy identification -- **Configurable timestamps**: Separate timestamp preference to reduce noise -- **Real-time updates**: Live streaming of log events across your application - -**Example log output:** - -```text -[api INF] Application starting up -[postgres INF] Database system is ready to accept connections -[redis INF] Server initialized, ready to accept connections -[api INF] Connected to database successfully -``` - -### Custom resource icons - -Resources can specify custom icons using `WithIconName()` for better visual identification in dashboard views (#10760). - -```csharp -var postgres = builder.AddPostgres("database") - .WithIconName("database"); - -var redis = builder.AddRedis("cache") - .WithIconName("memory"); - -var api = builder.AddProject("api") - .WithIconName("web-app"); -``` - -**Icon variant options:** - -```csharp -// Available variants: Regular (outline) or Filled (solid, default) -var database = builder.AddPostgres("db") - .WithIconName("database", ApplicationModel.IconVariant.Regular); - -var api = builder.AddProject("api") - .WithIconName("web-app", ApplicationModel.IconVariant.Filled); -``` - -> [!NOTE] -> The default icon variant is `Filled` if not specified. - -This helps teams quickly identify different types of resources in complex applications with many services. Custom resource icons now also apply to project & container resources via unified annotation, providing consistent visual identification across all resource types. - -### Reverse proxy support - -The dashboard now properly handles reverse proxy scenarios with explicit forwarded header mapping when enabled. This fixes common issues with authentication redirects and URL generation behind proxies like YARP (#10388). - -```bash -# Enable forwarded headers processing -export ASPIRE_DASHBOARD_FORWARDEDHEADERS_ENABLED=true -``` - -**Supported scenarios:** -- **OpenID Connect authentication** works correctly behind reverse proxies -- **URL generation** respects the original client request scheme and host -- **Limited header processing** for security - only Host and X-Forwarded-Proto are processed -- **YARP integration** and other reverse proxy solutions - -This is particularly useful for deployment scenarios where the dashboard is accessed through a load balancer or reverse proxy. - -### Improved mobile experience - -The mobile and desktop experience has been redesigned with better responsive layouts and improved usability across all dashboard pages (#10407). - -- **Responsive toolbars**: Automatically adapt to screen size -- **Touch-friendly controls**: Larger targets for mobile interaction -- **Optimized layouts**: Better use of screen real estate on smaller devices -- **Consistent navigation**: Unified experience across desktop and mobile - -### Enhanced resource management - -Several improvements to resource management and debugging capabilities: - -**Resource organization:** -- **Sub-menu organization**: Resource action menus now use sub-menus to prevent overflow on complex applications (#10869) -- **Launch profile details**: Project resources now show their associated launch profile for easier debugging (#10906) -- **Improved navigation**: Better resource selection and navigation handling (#10848) -- **Launch profile localization**: Launch profile localization and model surfaced in dashboard resource details ([#10906](https://github.com/dotnet/aspire/pull/10906)) - -**Debugging enhancements:** -- **Direct launch profile access**: Quick access to the launch configuration used for each project -- **Resource state visibility**: Clearer indication of resource status and health -- **Action grouping**: Related resource actions are logically grouped for better discoverability - -### Container runtime notifications - -Smart notifications appear when Docker/Podman is installed but unhealthy, with automatic dismissal when runtime recovers (#11008). This provides immediate feedback when your container runtime needs attention, helping diagnose startup issues faster. - -### UI improvements - -- Error spans use consistent error styling (#10742) -- Better default icons for parameters and services (#10762) -- Improved navigation reliability (#10848) -- Enhanced port parsing (#10884) -- Message truncation for long log entries (#10882) -- Optional log line wrapping (#10271) -- Improved text visualizer dialog (#10964) - -### Trace performance & integration - -- Optimized trace detail page rendering (#10308) -- Embedded log entries within trace spans (#10281) -- Better span timing calculations (#10310) - -### Localization & deployment - -- Comprehensive dashboard localization with consolidated resource files -- Launch profile support with localized display names (#10906) -- Forwarded headers support for proxy/container scenarios (#10388) - -### GenAI insights - -New dialog and UI components make GenAI interactions easier to inspect and understand (#11227, #11286). - -### Richer markdown rendering - -Enhanced markdown rendering with syntax highlighting and better code block handling improves readability of generated or diagnostic content (#11286). - -### Trace filtering - -New span type filter lets you focus on specific kinds of spans for faster investigation (#11262). - -### Trace detail improvements - -Expand/collapse all, clearer exemplars, added resource column, preserved root span visibility, and more reliable span linking (#9474, #11089, #11085, #11078, #10747). - -### Logging usability - -Cleaner unified All view, removed redundant None option, clearer error log styling (#11087, #10725, #10481). - -### Navigation & accessibility - -Better toolbar/menu overflow handling, improved keyboard navigation, semantic headings, mobile navigation scroll fixes (#10740, #10708, #10729, #11317, #10893, #9827). - -### Resource menus - -Streamlined resource action menus and clearer command labeling (#10869, #11328). - -### Runtime visibility - -Always shows the .NET runtime version and improves framework detection (#11330, #11095). - -## Integration changes and additions - -### OpenAI hosting integration - -The new `AddOpenAI` integration provides first-class support for modeling OpenAI endpoints and their associated models within your Aspire application graph. - -**Features:** -- **Single OpenAI endpoint** resource with child model resources using `AddModel` -- **Parameter-based API key** provisioning with `ParameterResource` support -- **Endpoint override** for local gateways, proxies, or self-hosted solutions -- **Resource referencing** so other projects automatically receive connection information - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var apiKey = builder.AddParameter("openai-api-key", secret: true); - -var openai = builder.AddOpenAI("openai") - .WithApiKey(apiKey) - .WithEndpoint("https://api.openai.com"); - -var chatModel = openai.AddModel("chat", "gpt-4o-mini"); - -var api = builder.AddProject("api") - .WithReference(chatModel); - -builder.Build().Run(); -``` - -**Local development scenario:** - -```csharp -// Use with local OpenAI-compatible services -var localOpenAI = builder.AddOpenAI("local-openai") - .WithApiKey(builder.AddParameter("local-api-key")) - .WithEndpoint("http://localhost:11434"); // Ollama or similar - -var localModel = localOpenAI.AddModel("local-chat", "llama3.2"); -``` - -### GitHub Models typed catalog - -Version 9.5 introduces a strongly-typed catalog for GitHub-hosted models, providing IntelliSense support and refactoring safety when working with AI models (#10986). - -**Benefits over string-based approach:** -- **Type safety**: Compile-time validation of model names -- **IntelliSense support**: Discover available models and providers -- **Refactoring safety**: Rename and find references work correctly -- **Up-to-date catalog**: Daily automation ensures new models are available (#11040) - -```csharp -// Before: String-based approach (error-prone) -var model = github.AddModel("chat", "gpt-4o-mini"); // Typos not caught - -// After: Typed catalog approach -var chatModel = github.AddModel("chat", GitHubModel.OpenAI.Gpt4oMini); -var claudeModel = github.AddModel("claude", GitHubModel.Anthropic.Claude3_5Sonnet); -var llamaModel = github.AddModel("llama", GitHubModel.Meta.Llama3_1_405B_Instruct); - -// IntelliSense shows all available models grouped by provider -var embeddingModel = github.AddModel("embeddings", GitHubModel.OpenAI.TextEmbedding3Large); -``` - -**Complete GitHub Models integration:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Configure GitHub Models with token -var githubToken = builder.AddParameter("github-token", secret: true); - -var github = builder.AddGitHubModels("github-models") - .WithToken(githubToken); - -// Add multiple model types with strong typing -var chatModel = github.AddModel("gpt4o", GitHubModel.OpenAI.Gpt4o); -var fastModel = github.AddModel("gpt4o-mini", GitHubModel.OpenAI.Gpt4oMini); -var claudeModel = github.AddModel("claude", GitHubModel.Anthropic.Claude3_5Sonnet); - -// Use in your applications -var aiService = builder.AddProject("ai-service") - .WithReference(chatModel) - .WithReference(fastModel) - .WithReference(claudeModel); - -builder.Build().Run(); -``` - -The typed catalog automatically updates daily, so newly published models on GitHub become available without waiting for an Aspire release. - -### Dev Tunnels hosting integration - -Aspire 9.5 introduces first-class support for Azure Dev Tunnels, enabling seamless integration of secure public tunnels for your applications during development and testing scenarios. - -**Features:** -- **Secure public tunnels**: Create public HTTPS endpoints for applications running locally -- **Automatic tunnel management**: Tunnels are created, configured, and cleaned up automatically -- **Private and anonymous tunnels**: Support for both authenticated private tunnels and public anonymous access -- **Development workflow integration**: Perfect for webhook testing, mobile app development, and external service integration - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Add a basic Dev Tunnel resource (default: private access) -var tunnel = builder.AddDevTunnel("dev-tunnel"); - -// Add your web application -var webApp = builder.AddProject("webapp"); - -// Connect the tunnel to the web application endpoint -tunnel.WithReference(webApp.GetEndpoint("http")); - -builder.Build().Run(); -``` - -**Advanced tunnel configuration:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var api = builder.AddProject("api"); - -// Create a tunnel with custom options; choose anonymous OR keep private -var tunnel = builder.AddDevTunnel("api-tunnel", options: new DevTunnelOptions -{ - Description = "API development tunnel", - Labels = ["development", "api"] -}); - -// Uncomment to allow anonymous (public) access instead of private authenticated access -// tunnel.WithAnonymousAccess(); - -// Connect the tunnel to the API endpoint -tunnel.WithReference(api.GetEndpoint("https")); - -// Reference the tunnel from other resources -var webhookProcessor = builder.AddProject("webhook-processor") - .WithReference(api, tunnel); // Gets tunneled endpoint information - -builder.Build().Run(); -``` - -**Use cases:** - -**Webhook Development**: Test webhooks from external services (GitHub, Stripe, etc.) against your locally running API: - -```csharp -// Webhook API with public tunnel (anonymous access for external service callbacks) -var webhookApi = builder.AddProject("webhook-api"); - -var publicTunnel = builder.AddDevTunnel("webhook-tunnel") - .WithAnonymousAccess() - .WithReference(webhookApi.GetEndpoint("http")); -``` - -**Mobile App Testing**: Enable mobile devices to connect to your local development server: - -```csharp -// Mobile backend with private tunnel (authenticated access only) -var mobileBackend = builder.AddProject("mobile-backend"); - -var mobileTunnel = builder.AddDevTunnel("mobile-tunnel") - .WithReference(mobileBackend.GetEndpoint("http")); -``` - -The Dev Tunnels integration automatically handles Azure authentication, tunnel lifecycle management, and provides public or private URLs (depending on configuration) to connected resources, making it easy to expose local development services securely to external consumers. - -### YARP static files support - -Aspire 9.5 adds comprehensive static file serving capabilities to the YARP integration, enabling you to serve static assets directly from YARP alongside reverse proxy functionality. This is perfect for single-page applications, frontend assets, and hybrid scenarios where you need both static content and API proxying. - -**Features:** -- **Direct static file serving**: Serve HTML, CSS, JS, and other static assets from YARP -- **Flexible source options**: Bind mount local directories or use Docker multi-stage builds -- **Automatic configuration**: Simple API enables static files with minimal setup -- **Production ready**: Works in both development and publish scenarios - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Enable static file serving (serves from wwwroot folder) -var yarp = builder.AddYarp("gateway") - .WithStaticFiles(); - -builder.Build().Run(); -``` - -**Bind mount local directory:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Serve static files from local directory -var yarp = builder.AddYarp("static-gateway") - .WithStaticFiles("./static-content") - .WithConfiguration(gateway => - { - // Add API routes alongside static files - gateway.AddRoute("/api/{**catch-all}", backendService) - .WithTransformPathRemovePrefix("/api"); - }); - -builder.Build().Run(); -``` - -**Docker multi-stage build scenario:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Use Dockerfile to build and copy static assets -var frontend = builder.AddYarp("frontend") - .WithStaticFiles() - .WithDockerFile("../react-app"); - -builder.Build().Run(); -``` - -**Example Dockerfile for React app:** - -```dockerfile -# Stage 1: Build React app -FROM node:20 AS builder -WORKDIR /app -COPY . . -RUN npm install -RUN npm run build - -# Stage 2: Copy static files to YARP container -FROM mcr.microsoft.com/dotnet/nightly/yarp:2.3.0-preview.4 AS yarp -WORKDIR /app -COPY --from=builder /app/dist ./wwwroot -``` - -**Hybrid static + API gateway:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var backendApi = builder.AddProject("api"); -var authService = builder.AddProject("auth"); - -// YARP serves static files AND proxies API requests -var gateway = builder.AddYarp("app-gateway") - .WithStaticFiles("./frontend/dist") - .WithConfiguration(yarp => - { - // API routes - yarp.AddRoute("/api/{**catch-all}", backendApi) - .WithTransformPathRemovePrefix("/api"); - - // Auth routes - yarp.AddRoute("/auth/{**catch-all}", authService) - .WithTransformPathRemovePrefix("/auth"); - - // Static files are served for all other routes - }); - -builder.Build().Run(); -``` - -This feature enables modern web application architectures where YARP acts as both a reverse proxy for backend services and a static file server for frontend assets, providing a unified entry point for your distributed application. - -### Redis and RabbitMQ auto activation - -Redis and RabbitMQ connections now support auto activation to prevent startup deadlocks and improve application reliability. - -**Features:** -- **Eliminates blocking threads**: Connections are established proactively at startup rather than on first use -- **Prevents startup deadlocks**: Avoids synchronous connection establishment in dependency injection scenarios -- **Improves reliability**: Reduces first-request latency by pre-establishing connections -- **Configurable behavior**: Can be enabled or disabled per connection as needed - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Auto activation enabled by default for Redis -var redis = builder.AddRedis("cache"); - -// Use in applications - connection is already established -var api = builder.AddProject("api") - .WithReference(redis); - -builder.Build().Run(); -``` - -#### RabbitMQ auto activation configuration - -```csharp -// Application (not AppHost) code -var builder = Host.CreateApplicationBuilder(args); - -// Default: auto activation ENABLED (no extra configuration required) -builder.AddRabbitMQClient("messaging"); - -// --- OR --- Opt out of auto activation (connection will be created lazily) -// builder.AddRabbitMQClient("messaging", settings => -// { -// settings.DisableAutoActivation = true; // disable auto activation -// }); - -var app = builder.Build(); -app.Run(); -``` - -### Redis client builder pattern - -Aspire 9.5 introduces a new Redis client builder pattern that provides a fluent, type-safe approach to configuring Redis clients with integrated support for distributed caching, output caching, and Azure authentication. - -**Features:** - -- **Fluent configuration**: Chain multiple Redis features like distributed caching, output caching, and Azure authentication -- **Type-safe builders**: `AspireRedisClientBuilder` provides compile-time safety and IntelliSense -- **Integrated Azure authentication**: Seamless Azure AD/Entra ID authentication with `WithAzureAuthentication` -- **Service composition**: Build complex Redis configurations with multiple features in a single call chain - -#### Basic Redis client builder usage - -```csharp -var builder = Host.CreateApplicationBuilder(args); - -builder.AddRedisClientBuilder("cache") - .WithDistributedCache() - .WithOutputCache(); - -var app = builder.Build(); -app.Run(); -``` - -**Azure authentication integration:** - -#### Azure authentication integration - -```csharp -// Azure authentication integration (application code) -var builder = Host.CreateApplicationBuilder(args); - -builder.AddRedisClientBuilder("azure-redis") - .WithAzureAuthentication() // Uses default Azure credentials - .WithDistributedCache(options => - { - options.InstanceName = "MyApp"; - }); - -// Or with custom credentials -var credential = new DefaultAzureCredential(); -builder.AddRedisClientBuilder("azure-redis") - .WithAzureAuthentication(credential) - .WithOutputCache(); - -var app = builder.Build(); -app.Run(); -``` - -**Advanced Redis builder patterns:** - -#### Advanced Redis builder patterns - -```csharp -// Multiple Redis instances with different configurations (application code) -var builder = Host.CreateApplicationBuilder(args); - -// Cache-focused Redis instance -builder.AddRedisClientBuilder("cache") - .WithDistributedCache(options => - { - options.InstanceName = "MainCache"; - options.DefaultSlidingExpiration = TimeSpan.FromMinutes(30); - }); - -// Output cache Redis instance with Azure authentication -builder.AddKeyedRedisClientBuilder("output-cache") - .WithAzureAuthentication() - .WithOutputCache(); - -// Session Redis instance -builder.AddKeyedRedisClientBuilder("sessions") - .WithDistributedCache(options => - { - options.InstanceName = "Sessions"; - }); - -var app = builder.Build(); -app.Run(); -``` - -### Azure AI Foundry enhancements - -9.5 adds a generated, strongly-typed model catalog (`AIFoundryModel`) for IntelliSense + ref safety when creating deployments (PR #10986) and a daily automation that refreshes the catalog as new models appear in Azure AI Foundry (PR #11040). Sample apps and end-to-end tests now use these constants (PR #11039) instead of raw strings. The original Foundry hosting integration and local runtime support were introduced earlier (issue #9568); this release focuses on developer ergonomics and keeping model metadata current. - -Strongly-typed model catalog with IntelliSense support: - -```csharp -var aiFoundry = builder.AddAzureAIFoundry("ai-foundry"); - -// Strongly-typed model references -var gpt4 = aiFoundry.AddDeployment("gpt-4", AIFoundryModel.OpenAI.Gpt4); -var mistral = aiFoundry.AddDeployment("mistral", AIFoundryModel.MistralAi.MistralLarge2411); - -// Local on-device mode -var localFoundry = builder.AddAzureAIFoundry("local-ai") - .RunAsFoundryLocal(); -``` - -### Azure App Configuration emulator APIs - -Run emulators locally with full configuration support: - -```csharp -var appConfig = builder.AddAzureAppConfiguration("config") - .RunAsEmulator(emulator => emulator - .WithDataVolume("config-data") - .WithHostPort(8080)); -``` - -### Azure storage emulator improvements - -Updated Azurite to version 3.35.0, resolving health check issues that previously returned HTTP 400 responses (#10972). This improves the reliability of Azure Storage emulator health checks during development. - -### Broader Azure resource capability surfacing - -Several Azure hosting resource types now implement `IResourceWithEndpoints` enabling uniform endpoint discovery and waiting semantics: - -- `AzureAIFoundryResource` -- `AzureAppConfigurationResource` -- `AzureKeyVaultResource` -- `AzurePostgresFlexibleServerResource` -- `AzureRedisCacheResource` - -### Azure Redis Enterprise support - -Aspire 9.5 introduces first-class support for Azure Redis Enterprise, providing a high-performance, fully managed Redis service with enterprise-grade features. - -The new `AddAzureRedisEnterprise` extension method enables Redis Enterprise resource modeling: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Add Azure Redis Enterprise resource -var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise"); - -// Use in your applications -var api = builder.AddProject("api") - .WithReference(redisEnterprise); - -builder.Build().Run(); -``` - -**Local development with container emulation:** - -```csharp -var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") - .RunAsContainer(container => container - .WithHostPort(6379)); -``` - -**Authentication options:** - -```csharp -// With access key authentication (default) -var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") - .WithAccessKeyAuthentication(); - -// With Key Vault integration for access keys -var keyVault = builder.AddAzureKeyVault("keyvault"); -var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") - .WithAccessKeyAuthentication(keyVault); -``` - -Azure Redis Enterprise provides advanced caching capabilities with clustering, high availability, and enterprise security features while maintaining compatibility with the standard Redis APIs. - -### Azure resource reference properties - -New reference properties have been added to Azure PostgreSQL and Redis resources for custom connection string composition and individual component access (#11051, #11070). - -**AzurePostgresFlexibleServerResource enhancements:** - -Three new reference properties enable custom connection string composition: - -- **`HostName`** (`ReferenceExpression`): Returns PostgreSQL server hostname with port -- **`UserName`** (`ReferenceExpression?`): Returns username for password authentication (null for Entra ID) -- **`Password`** (`ReferenceExpression?`): Returns password for password authentication (null for Entra ID) - -```csharp -var postgres = builder.AddAzurePostgresFlexibleServer("database") - .WithPasswordAuthentication() - .RunAsContainer(); - -var db = postgres.AddDatabase("appdb"); - -// Custom JDBC connection string -var jdbc = ReferenceExpression.Create($"jdbc:postgresql://{postgres.Resource.HostName}/{db.Resource.DatabaseName}"); - -// Custom PostgreSQL connection string -var connectionString = ReferenceExpression.Create( - $"Host={postgres.Resource.HostName};Username={postgres.Resource.UserName};Password={postgres.Resource.Password};Database={db.Resource.DatabaseName}"); -``` - -**AzureRedisCacheResource enhancements:** - -Two new reference properties enable custom Redis connection scenarios: - -- **`HostName`** (`ReferenceExpression`): Returns Redis server hostname with port -- **`Password`** (`ReferenceExpression?`): Returns password when running as container (null in Azure mode) - -```csharp -var redis = builder.AddAzureRedis("cache") - .RunAsContainer(); - -// Custom Redis connection string -var customConnectionString = ReferenceExpression.Create($"{redis.Resource.HostName},password={redis.Resource.Password}"); - -// Access individual components -var hostName = redis.Resource.HostName; // e.g., "localhost:6379" -var password = redis.Resource.Password; // Available in container mode -``` - -### OTLP telemetry protocol selection - -Enhanced OpenTelemetry Protocol (OTLP) support with protocol selection capabilities, allowing you to choose between gRPC and HTTP protobuf transports for telemetry data. - -```csharp -// Available protocol types -public enum OtlpProtocol -{ - Grpc = 0, // Default: High performance, binary protocol - HttpProtobuf = 1 // Alternative: HTTP-based transport -} -``` - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Configure OTLP telemetry with specific protocol -var api = builder.AddProject("api") - .WithOtlpExporter(OtlpProtocol.HttpProtobuf); - -// Use default gRPC protocol (recommended for performance) -var worker = builder.AddProject("worker") - .WithOtlpExporter(); - -// Configure multiple services with different protocols -var frontend = builder.AddProject("frontend") - .WithOtlpExporter(OtlpProtocol.Grpc); - -builder.Build().Run(); -``` - -**When to use each protocol:** - -- **gRPC (default)**: Best performance, smaller payload size, ideal for production -- **HTTP Protobuf**: Better firewall compatibility, easier debugging, good for development - -### MySQL password improvements - -Enhanced and standardized password handling for MySQL resources: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Secure password parameter -var password = builder.AddParameter("mysql-password", secret: true); - -var mysql = builder.AddMySql("mysql") - .WithPassword(password); - -// Password can be updated during configuration -mysql.Resource.PasswordParameter = builder.AddParameter("new-mysql-password", secret: true); - -// Environment-specific passwords -var devPassword = builder.Configuration["ConnectionStrings:MySQL:Password"]; -if (!string.IsNullOrEmpty(devPassword)) -{ - mysql.WithPassword(devPassword); -} - -builder.Build().Run(); -``` - -## App model enhancements - -### Resource lifecycle events - -Aspire 9.5 introduces new resource lifecycle event APIs that allow you to register callbacks for when resources stop, providing better control over cleanup and coordination during application shutdown. - -The new `OnResourceStopped` extension method allows you to register callbacks that execute when a resource enters the stopped state: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var database = builder.AddPostgres("postgres", "mypostgres") - .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => - { - // Perform cleanup when the database stops - Console.WriteLine($"Database {resource.Name} has stopped"); - - // Log final metrics, backup data, etc. - await LogFinalMetrics(resource.Name); - }); - -var api = builder.AddProject("api") - .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => - { - // Graceful API shutdown handling - Console.WriteLine($"API service {resource.Name} is shutting down"); - await FlushPendingRequests(); - }) - .WithReference(database); - -builder.Build().Run(); -``` - -**Resource stopped event details:** - -The `ResourceStoppedEvent` provides information about the stopping event: - -```csharp -// Register detailed stopped event handler -var redis = builder.AddRedis("cache") - .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => - { - // Access event details - Console.WriteLine($"Resource: {resource.Name}"); - Console.WriteLine($"Event timestamp: {stoppedEvent.Timestamp}"); - Console.WriteLine($"Stopping reason: {stoppedEvent.Reason}"); - - // Perform async cleanup with cancellation support - await CleanupCacheConnections(cancellationToken); - }); -``` - -**Coordination with lifecycle management:** - -Resource stopped events work seamlessly with existing lifecycle features: - -```csharp -var database = builder.AddPostgres("postgres") - .OnResourceStopped(async (db, evt, ct) => - { - await BackupDatabase(db.Name, ct); - }); - -var worker = builder.AddProject("worker") - .WaitFor(database) // Wait for startup - .OnResourceStopped(async (svc, evt, ct) => - { - await CompleteInFlightJobs(ct); - }) - .WithReference(database); -``` - -New `ResourceStoppedEvent` provides lifecycle insight when resources shut down or fail ([#11103](https://github.com/dotnet/aspire/pull/11103)): - -```csharp -builder.AddProject("api") - .OnResourceStopped(async (resource, evt, ct) => - { - // Handle resource stopped event - log cleanup, notify other services, etc. - Console.WriteLine($"Resource {resource.Name} stopped with event: {evt.ResourceEvent}"); - await NotifyDependentServices(resource.Name, ct); - }); -``` - -### Context-based endpoint resolution - -**Breaking change**: Endpoint resolution in `WithEnvironment` callbacks now correctly resolves container hostnames instead of always using "localhost" (#8574). - -```csharp -var redis = builder.AddRedis("redis"); - -// Another container getting endpoint info from Redis container -var rabbitmq = builder.AddContainer("myapp", "mycontainerapp") - .WithEnvironment(context => - { - var endpoint = redis.GetEndpoint("tcp"); - var redisHost = endpoint.Property(EndpointProperty.Host); - var redisPort = endpoint.Property(EndpointProperty.Port); - - // Previously: redisHost would always resolve to "localhost" - // Now: redisHost correctly resolves to "redis" (container name) - context.EnvironmentVariables["REDIS_HOST"] = redisHost; - context.EnvironmentVariables["REDIS_PORT"] = redisPort; - }) - .WithReference(redis); -``` - -**What you need to review:** - -- **Container deployments**: Your apps will now receive correct container hostnames -- **Local development**: Localhost behavior preserved for non-containerized scenarios -- **Connection strings**: Automatic connection strings continue to work as expected -- **Manual environment**: Review custom `WithEnvironment` calls that assume localhost - -### HTTP health probes for resources - -Aspire 9.5 introduces comprehensive HTTP health probe support that allows you to configure startup, readiness, and liveness probes for your resources, providing better health monitoring and deployment coordination. - -**Features:** - -- **Multiple probe types**: Configure startup, readiness, and liveness probes independently -- **Flexible endpoint targeting**: Probe any HTTP endpoint with custom paths and configurations -- **Configurable timing**: Control probe intervals, timeouts, and failure thresholds -- **Kubernetes alignment**: Probe semantics align with Kubernetes health check concepts - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Add readiness probe to ensure service is ready before routing traffic -var api = builder.AddProject("api") - .WithHttpProbe(ProbeType.Readiness, "/health/ready"); - -// Add liveness probe to detect if service needs restart -var worker = builder.AddProject("worker") - .WithHttpProbe(ProbeType.Liveness, "/health/live"); - -builder.Build().Run(); -``` - -**Advanced probe configuration:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Comprehensive probe setup with custom timing -var api = builder.AddProject("api") - .WithHttpProbe( - type: ProbeType.Startup, - path: "/health/startup", - initialDelaySeconds: 30, // Wait 30s before first probe - periodSeconds: 10, // Probe every 10 seconds - timeoutSeconds: 5, // 5 second timeout per probe - failureThreshold: 5, // Consider failed after 5 failures - successThreshold: 1 // Consider healthy after 1 success - ); - -builder.Build().Run(); -``` - -**Multiple probe types for comprehensive monitoring:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var database = builder.AddPostgres("postgres"); - -// Service with complete probe coverage -var api = builder.AddProject("api") - // Startup probe: Ensures service starts successfully - .WithHttpProbe(ProbeType.Startup, "/health/startup", - initialDelaySeconds: 15, failureThreshold: 10) - - // Readiness probe: Determines when ready to receive traffic - .WithHttpProbe(ProbeType.Readiness, "/health/ready", - periodSeconds: 5, timeoutSeconds: 3) - - // Liveness probe: Detects if service is still functioning - .WithHttpProbe(ProbeType.Liveness, "/health/live", - periodSeconds: 30, failureThreshold: 3) - - .WithReference(database); - -builder.Build().Run(); -``` - -**Custom endpoint targeting:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Probe specific endpoint by name -var api = builder.AddProject("api") - .WithHttpEndpoint(8080, name: "management") - .WithHttpProbe(ProbeType.Readiness, "/actuator/health", - endpointName: "management"); - -// Probe with endpoint selector function -var service = builder.AddProject("service") - .WithHttpProbe(ProbeType.Liveness, "/status", - endpointSelector: () => service.GetEndpoint("https")); - -builder.Build().Run(); -``` - -**Integration with resource dependencies:** - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var database = builder.AddPostgres("postgres"); -var cache = builder.AddRedis("redis"); - -// API with probes that check dependencies -var api = builder.AddProject("api") - .WithHttpProbe(ProbeType.Readiness, "/health/ready") // Checks DB & Redis connectivity - .WaitFor(database) // Wait for database startup - .WaitFor(cache) // Wait for cache startup - .WithReference(database) - .WithReference(cache); - -// Frontend waits for API to be ready (not just started) -var frontend = builder.AddProject("frontend") - .WaitFor(api) // Waits for API readiness probe to pass - .WithReference(api); - -builder.Build().Run(); -``` - -This feature enhances deployment reliability by providing fine-grained health monitoring that integrates seamlessly with Aspire's resource orchestration and dependency management. - -### Enhanced resource waiting patterns - -New `WaitForStart` method provides granular control over startup ordering, complementing existing `WaitFor` semantics (#10948). It also pairs with improved `ExternalService` health honoring (#10827) which ensures dependents truly wait for external resources to be healthy. - -**Understanding wait behaviors:** - -- **`WaitFor`**: Waits for dependency to be Running AND pass all health checks. -- **`WaitForStart`**: Waits only for dependency to reach Running (ignores health checks). - -```csharp -var postgres = builder.AddPostgres("postgres"); -var redis = builder.AddRedis("redis"); - -var api = builder.AddProject("api") - .WaitForStart(postgres) // New: startup only - .WaitFor(redis) // Healthy state - .WithReference(postgres) - .WithReference(redis); -``` - -**Migration scenario (database initialization):** - -```csharp -var database = builder.AddPostgres("postgres"); - -var migrator = builder.AddProject("migrator") - .WaitForStart(database) // Start as soon as container is running - .WithReference(database); - -var api = builder.AddProject("api") - .WaitFor(database) // Healthy database - .WaitFor(migrator) // Migration completed - .WithReference(database); -``` - -**ExternalService health integration:** - -`WaitFor` now honors `ExternalService` health checks (#10827). Previously a dependent could start even if the external target failed its readiness probe. - -```csharp -var externalApi = builder.AddExternalService("backend-api", "http://api.company.com") - .WithHttpHealthCheck("/health/ready"); - -var frontend = builder.AddProject("frontend") - .WaitFor(externalApi) // Now waits for healthy external API - .WithReference(externalApi); -``` - -If you need the old (lenient) behavior: - -```csharp -// Do not wait for health -var frontend = builder.AddProject("frontend") - .WithReference(externalApi); - -// Or only wait for startup -var frontend2 = builder.AddProject("frontend2") - .WaitForStart(externalApi) - .WithReference(externalApi); -``` - -### Enhanced resource lifetime support - -**Breaking change**: Resources like `ParameterResource`, `ConnectionStringResource`, and GitHub Model resources now participate in lifecycle operations and support `WaitFor` (#10851, #10842). This section merges prior duplicate "Resource lifetime behavior" content. - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var connectionString = builder.AddConnectionString("database"); -var apiKey = builder.AddParameter("api-key", secret: true); - -var api = builder.AddProject("api") - .WaitFor(connectionString) - .WaitFor(apiKey) - .WithEnvironment("DB_CONNECTION", connectionString) - .WithEnvironment("API_KEY", apiKey); - -var github = builder.AddGitHubModels("github"); -var model = github.AddModel("gpt4", GitHubModel.OpenAI.Gpt4o); - -var aiService = builder.AddProject("ai-service") - .WaitFor(model) - .WithReference(model); - -builder.Build().Run(); -``` - -These resources no longer implement `IResourceWithoutLifetime`; they surface as Running and can be waited on just like services. - -### Resource lifecycle event APIs - -Aspire 9.5 introduces new resource lifecycle event APIs that allow you to hook into resource state transitions for custom logic execution. - -The new `OnResourceStopped` extension method enables you to register callbacks that execute when a resource transitions to the stopped state: - -```csharp -var database = builder.AddSqlServer("sqlserver") - .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => - { - // Cleanup logic when database stops - logger.LogInformation("Database {ResourceName} stopped", resource.Name); - await PerformCleanupAsync(cancellationToken); - }); -``` - -**Complete lifecycle event coverage:** - -Combined with existing lifecycle events, you now have full coverage of resource state transitions: - -```csharp -var api = builder.AddProject("api") - .OnResourceReady(async (resource, readyEvent, cancellationToken) => - { - // Resource is running and healthy - await RegisterWithServiceDiscoveryAsync(resource, cancellationToken); - }) - .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => - { - // Resource has stopped - await UnregisterFromServiceDiscoveryAsync(resource, cancellationToken); - }); -``` - -This provides symmetrical lifecycle management for scenarios like service registration/deregistration, resource cleanup, logging, and custom monitoring integration. - -## Publishing and deployment - -### Parameter prompting during deploy - -Aspire 9.5 enhances the deployment experience by automatically prompting for unresolved parameters during `aspire deploy` operations, eliminating the need to manually specify all parameter values upfront. - -#### Interactive parameter resolution - -When deploying your Aspire application, any parameters without values are now automatically detected and prompted for interactively: - -```bash -# Deploy command detects missing parameters and prompts automatically -aspire deploy - -🔧 Resolving deployment parameters... - -Enter value for 'database-password' (secret): ******** -Enter value for 'api-key' (secret): ********************** -Enter value for 'environment-name': production - -✅ All parameters resolved, proceeding with deployment... -``` - -#### Benefits of interactive parameter prompting - -- **Secure credential entry**: Sensitive parameters are masked during input -- **Deployment-time flexibility**: No need to pre-configure all parameter values -- **Error prevention**: Missing parameters are caught before deployment begins -- **Better developer experience**: Clear prompts with parameter descriptions - -#### Parameter types supported - -- **Secret parameters**: Automatically masked input for sensitive values -- **Standard parameters**: Regular text input with validation -- **Optional parameters**: Skipped if no value is provided - -This feature builds on the existing parameter infrastructure and makes deployment workflows more intuitive, especially when working with multiple environments or sharing deployment scripts across team members. - -### Azure Container App Jobs support - -Aspire 9.5 introduces comprehensive support for Azure Container App Jobs, allowing you to deploy both project and container resources as background job workloads that can run on schedules, in response to events, or be triggered manually. - -Container App Jobs complement the existing Container Apps functionality by providing a dedicated way to run finite workloads like data processing, ETL operations, batch jobs, and scheduled maintenance tasks. - -#### Publishing resources as Container App Jobs - -Use the new `PublishAsAzureContainerAppJob` extension method to publish resources as jobs: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Publish a project as a Container App Job -var dataProcessor = builder.AddProject("data-processor") - .PublishAsAzureContainerAppJob((infrastructure, job) => { - // Configure job-specific settings using Azure Provisioning APIs - job.Configuration.TriggerType = TriggerType.Schedule; - // Run daily at 2 AM - job.Configuration.ScheduleTriggerConfig.CronExpression = "0 0 2 * * *"; - }); - -// Publish a container as a Container App Job -var batchJob = builder.AddContainer("batch-job", "my-batch-image") - .PublishAsAzureContainerAppJob((infrastructure, job) => { - // Configure manual trigger job - job.Configuration.TriggerType = TriggerType.Manual; - job.Configuration.ReplicaRetryLimit = 3; - job.Configuration.ReplicaTimeout = 1800; // 30 minutes - }); - -builder.Build().Run(); -``` - -#### Job customization and configuration - -The new `AzureContainerAppJobCustomizationAnnotation` enables fine-grained control over job behavior: - -```csharp -var scheduledJob = builder.AddProject("scheduled-worker") - .PublishAsAzureContainerAppJob((infrastructure, job) => { - // Event-driven job configuration - job.Configuration.TriggerType = TriggerType.Event; - job.Configuration.EventTriggerConfig = new EventTriggerConfiguration - { - Scale = new JobScale - { - MinExecutions = 0, - MaxExecutions = 10, - PollingInterval = 30 // seconds - } - }; - job.Configuration.ReplicaRetryLimit = 3; - job.Configuration.ReplicaTimeout = 1800; // 30 minutes - }); -``` - -This feature addresses issue #4366 and provides a unified development and deployment experience for both long-running services (Container Apps) and finite workloads (Container App Jobs) within your Aspire applications. - -#### Simplified job configuration overloads - -For common scenarios, Aspire 9.5 provides simplified overloads that reduce boilerplate code: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Scheduled job with cron expression -var scheduledJob = builder.AddProject("daily-processor") - .PublishAsAzureContainerAppJob("0 0 2 * * *"); // Run daily at 2 AM - -// Manual job (default trigger type) -var manualJob = builder.AddContainer("batch-processor", "my-batch-image") - .PublishAsAzureContainerAppJob(); // Manual trigger, ready for on-demand execution - -builder.Build().Run(); -``` - -These overloads provide convenient APIs for the most common job types while maintaining access to the full configuration API when advanced customization is needed. - -### Azure provisioning & deployer - -9.5 delivers the first iteration of the Azure provisioning & deployment pipeline that unifies interactive prompting, Bicep compilation, and mode-specific behavior (run vs publish) across Azure resources: - -- New provisioning contexts separate run-mode and publish-mode flows ([#11094](https://github.com/dotnet/aspire/pull/11094)). -- Graph-based dependency planning (`ResourceDeploymentGraph`) ensures correct ordering of resource provisioning. -- Improved error handling and idempotency for `AddAsExistingResource` across all Azure resources ([#10562](https://github.com/dotnet/aspire/issues/10562)). -- Support for deploying compute images and resources (custom images referenced in your environment) ([#11030](https://github.com/dotnet/aspire/pull/11030)). -- Deploy individual Bicep modules instead of a monolithic `main.bicep` for clearer failure isolation and faster iteration ([#11098](https://github.com/dotnet/aspire/pull/11098)). -- Localized interaction + notification strings across all provisioning prompts (multiple OneLocBuild PRs). - -Provisioning automatically prompts for required values only once per run, caches results, and reuses them in publish-mode without re-prompting. This reduces friction when iterating locally while maintaining reproducibility for production publish. - -### Azure deployer interactive command handling - -The AppHost now wires Azure provisioning prompts into the standard interaction system (initial work in [#10038](https://github.com/dotnet/aspire/pull/10038), extended in [#10792](https://github.com/dotnet/aspire/pull/10792) and [#10845](https://github.com/dotnet/aspire/pull/10845)). This enables: - -- Consistent UX for parameter entry (names, descriptions, validation) -- Localized prompt text -- Support for non-interactive scenarios via pre-supplied parameters - -### Azure resource idempotency & existing resources - -Calling `AddAsExistingResource` is now idempotent across Azure hosting resource builders; repeated calls no longer cause duplicate annotations or inconsistent behavior ([#10562](https://github.com/dotnet/aspire/issues/10562)). This improves reliability when composing reusable extension methods. - -### Compute image deployment - -You can now reference and deploy custom compute images as part of Azure environment provisioning ([#11030](https://github.com/dotnet/aspire/pull/11030)). This lays groundwork for richer VM/container hybrid topologies. - -### Module-scoped Bicep deployment - -Instead of generating a single aggregated template, 9.5 deploys individual Bicep modules ([#11098](https://github.com/dotnet/aspire/pull/11098)). Failures surface with more precise context and partial successes require less rework. - -### Publishing progress & activity reporting - -`IPublishingActivityProgressReporter` was renamed to `IPublishingActivityReporter` and output formatting was reworked to provide clearer, structured progress (multiple commits culminating in improved messages). Expect more concise status lines and actionable error sections when using `aspire publish`. - -### Parameter & interaction API updates - -- `ParameterResource.Value` is now obsolete: switch to `await parameter.GetValueAsync()` or inject parameter resources directly ([#10363](https://github.com/dotnet/aspire/pull/10363)). This change improves async value acquisition and avoids accidental blocking. -- Interaction inputs enforce server-side validation and required `Name` property (breaking, [#10835](https://github.com/dotnet/aspire/pull/10835)). -- New notification terminology (renamed from MessageBar, [#10449](https://github.com/dotnet/aspire/pull/10449)). -- `ExecuteCommandResult` now includes a `Canceled` property to track whether command execution was canceled by the user or system. -- Server-side validation of interaction inputs ([#10527](https://github.com/dotnet/aspire/pull/10527)). - -Migration example: - -```csharp -// Before (deprecated) -var value = myParam.Value; - -// After -var value = await myParam.GetValueAsync(); -``` - -### InteractionInput API improvements - -**Breaking change**: `InteractionInput` now requires `Name`; `Label` is optional (#10835). - -#### Migration example - -```csharp -// Before (9.4 and earlier) -var input = new InteractionInput -{ - Label = "Database Password", - InputType = InputType.SecretText, - Required = true -}; - -// After (9.5+) -var input = new InteractionInput -{ - Name = "database_password", // Required field identifier - Label = "Database Password", // Optional (defaults to Name) - InputType = InputType.SecretText, - Required = true -}; -``` - -This enables better form serialization and integration with interactive parameter processing. - -### Executable resource configuration APIs - -Enhanced APIs for configuring executable resources with command and working directory specifications. - -#### WithCommand and WithWorkingDirectory APIs - -New extension methods allow precise control over executable resource execution: - -```csharp -// Configure executable with custom command and working directory -var processor = builder.AddExecutable("data-processor", "python") - .WithCommand("main.py --batch-size 100") - .WithWorkingDirectory("/app/data-processing") - .WithArgs("--config", "production.json"); - -// Executable with specific working directory for relative paths -var buildTool = builder.AddExecutable("build-tool", "npm") - .WithCommand("run build:production") - .WithWorkingDirectory("./frontend"); -``` - -#### Enhanced CommandLineArgsCallbackContext - -The `CommandLineArgsCallbackContext` now includes resource information for context-aware argument building: - -```csharp -var worker = builder.AddExecutable("worker", "dotnet") - .WithArgs(context => - { - // Access to the resource instance for dynamic configuration - var resourceName = context.Resource.Name; - var environment = context.ExecutionContext.IsRunMode ? "Development" : "Production"; - - context.Args.Add("--resource-name"); - context.Args.Add(resourceName); - context.Args.Add("--environment"); - context.Args.Add(environment); - }); -``` - -These APIs provide fine-grained control over executable resource configuration, enabling complex deployment scenarios and dynamic argument construction based on execution context. - -### Interactive parameter processing APIs - -Aspire 9.5 introduces the `ParameterProcessor` API for programmatic parameter resolution with interactive prompting capabilities. - -#### ParameterProcessor API - -The new experimental `ParameterProcessor` class enables applications to handle parameter resolution during runtime: - -```csharp -// In your application startup or configuration -services.AddSingleton(); - -// Use parameter processor to initialize parameters -public async Task ConfigureAsync(ParameterProcessor processor) -{ - var parameters = new[] - { - builder.AddParameter("database-password", secret: true), - builder.AddParameter("api-key", secret: true), - builder.AddParameter("environment-name") - }; - - // Initialize parameters with interactive prompting - await processor.InitializeParametersAsync(parameters, waitForResolution: true); -} -``` - -#### InteractionInputCollection enhancements - -Enhanced parameter input handling with the new `InteractionInputCollection` type: - -```csharp -// Enhanced interaction service with typed input collection -public async Task> ProcessParametersAsync() -{ - var inputs = new List - { - new() { Name = "username", Label = "Username", InputType = InputType.Text }, - new() { Name = "password", Label = "Password", InputType = InputType.Password }, - new() { Name = "environment", Label = "Environment", InputType = InputType.Select, - Options = new[] { ("dev", "Development"), ("prod", "Production") } } - }; - - var result = await interactionService.PromptInputsAsync( - "Configure Parameters", - "Enter application configuration:", - inputs); - - if (result.Success) - { - // Access inputs by name with type safety - var username = result.Value["username"].Value; - var password = result.Value["password"].Value; - var environment = result.Value["environment"].Value; - } - - return result; -} -``` - -The `InteractionInputCollection` provides indexed access by name and improved type safety for parameter processing workflows. - -### Docker Compose Aspire Dashboard forwarding headers - -`AddDockerComposeEnvironment(...).WithDashboard()` gained `WithForwardedHeaders()` to enable forwarded `Host` and `Proto` handling for dashboard scenarios behind reverse proxies or compose networks ([#11080](https://github.com/dotnet/aspire/pull/11080)). This mirrors the standalone dashboard forwarded header support and fixes auth redirect edge cases. - -```csharp -builder.AddDockerComposeEnvironment("env") - .WithComposeFile("docker-compose.yml") - .WithDashboard(d => d.WithForwardedHeaders()); -``` - -### Container build customization - -`ContainerBuildOptions` support (commit [#10074](https://github.com/dotnet/aspire/pull/10074)) enables customizing the underlying `dotnet publish` invocation when Aspire builds project-sourced container images (for example to change configuration, trimming, or pass additional MSBuild properties). Use the new options hook on the project container image configuration to set MSBuild properties instead of maintaining a custom Dockerfile. (Exact API surface is intentionally summarized here to avoid drift; see API docs for `ContainerBuildOptions` in the hosting namespace for usage.) - -### Deployment image tag callbacks - -Aspire 9.5 introduces powerful deployment image tag callback APIs that allow dynamic generation of container image tags at deployment time, supporting both synchronous and asynchronous scenarios. - -#### Deployment tag callback features - -- **Dynamic tag generation**: Calculate image tags based on deployment context, git commits, build numbers, or timestamps -- **Async callback support**: Perform asynchronous operations like API calls or file system access during tag generation -- **Deployment context access**: Access to deployment environment, resource information, and configuration -- **Flexible callback types**: Support for simple lambdas, context-aware callbacks, and async operations - -#### Basic deployment tag examples - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -// Simple static tag callback -var api = builder.AddProject("api") - .WithDeploymentImageTag(() => "v1.2.3-stable"); - -// Dynamic tag with timestamp -var worker = builder.AddProject("worker") - .WithDeploymentImageTag(() => $"build-{DateTime.UtcNow:yyyyMMdd-HHmm}"); - -builder.Build().Run(); -``` - -#### Context-aware deployment tags - -```csharp -// Access deployment context for dynamic tag generation -var api = builder.AddProject("api") - .WithDeploymentImageTag(context => - { - // Access resource information - var resourceName = context.Resource.Name; - var environment = context.Environment; - - return $"{resourceName}-{environment}-{GetBuildNumber()}"; - }); - -// Git-based tagging -var frontend = builder.AddProject("frontend") - .WithDeploymentImageTag(context => - { - var gitCommit = GetGitCommitHash(); - var branch = GetCurrentBranch(); - return $"{branch}-{gitCommit[..8]}"; - }); -``` - -#### Async deployment tag callbacks - -```csharp -// Async callback for complex tag generation -var database = builder.AddProject("database") - .WithDeploymentImageTag(async context => - { - // Perform async operations during deployment - var buildInfo = await GetBuildInfoFromApi(); - var version = await ReadVersionFromFile(); - - return $"db-{version}-build{buildInfo.Number}"; - }); - -// API-based version lookup -var api = builder.AddProject("api") - .WithDeploymentImageTag(async context => - { - using var client = new HttpClient(); - var latestTag = await client.GetStringAsync("https://api.company.com/latest-tag"); - return $"api-{latestTag.Trim()}"; - }); -``` - -#### Advanced deployment scenarios - -```csharp -// Environment-specific tagging -var service = builder.AddProject("service") - .WithDeploymentImageTag(context => - { - return context.Environment switch - { - "Production" => $"prod-{GetReleaseVersion()}", - "Staging" => $"staging-{GetBuildNumber()}", - "Development" => $"dev-{DateTime.UtcNow:yyyyMMdd}", - _ => "latest" - }; - }); - -// Multi-resource coordination -var sharedVersion = await GetSharedVersionAsync(); - -var frontend = builder.AddProject("frontend") - .WithDeploymentImageTag(() => $"frontend-{sharedVersion}"); - -var backend = builder.AddProject("backend") - .WithDeploymentImageTag(() => $"backend-{sharedVersion}"); -``` diff --git a/src/frontend/src/data/integration-docs.json b/src/frontend/src/data/integration-docs.json index 8ce77abb7..4e898dc7b 100644 --- a/src/frontend/src/data/integration-docs.json +++ b/src/frontend/src/data/integration-docs.json @@ -1,10 +1,10 @@ [ { "match": "rabbitmq", - "href": "/integrations/rabbitmq/" + "href": "/integrations/messaging/rabbitmq/" }, { "match": "postgres", - "href": "/integrations/postgres/" + "href": "/integrations/databases/postgres/" } ] \ No newline at end of file From d428489ba7e0019bbf64e8c206167c085dc2a884 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 3 Nov 2025 14:36:06 -0600 Subject: [PATCH 02/18] feat: Enhance IntegrationCard with tooltip for title and update integration-docs with new matches --- .../src/components/IntegrationCard.astro | 29 +- src/frontend/src/data/integration-docs.json | 444 ++++++++++++++++++ 2 files changed, 461 insertions(+), 12 deletions(-) diff --git a/src/frontend/src/components/IntegrationCard.astro b/src/frontend/src/components/IntegrationCard.astro index 141097781..0c67ed0a3 100644 --- a/src/frontend/src/components/IntegrationCard.astro +++ b/src/frontend/src/components/IntegrationCard.astro @@ -49,7 +49,12 @@ const { pkg } = Astro.props as Props; /> ) } - +
{pkg.description}
@@ -89,17 +94,17 @@ const { pkg } = Astro.props as Props; return ( filteredTags.length > 0 && (
- {visibleTags.map((tag: string) => ( - - ))} - {hasOverflow && remaining > 0 && ( - - )} + {visibleTags.map((tag: string) => ( + + ))} + {hasOverflow && remaining > 0 && ( + + )}
) ); diff --git a/src/frontend/src/data/integration-docs.json b/src/frontend/src/data/integration-docs.json index 4e898dc7b..1a53a4eff 100644 --- a/src/frontend/src/data/integration-docs.json +++ b/src/frontend/src/data/integration-docs.json @@ -1,10 +1,454 @@ [ + { + "match": "Aspire.Confluent.Kafka", + "href": "/integrations/messaging/apache-kafka/" + }, + { + "match": "Aspire.Hosting.Kafka", + "href": "/integrations/messaging/apache-kafka/" + }, + { + "match": "apache-kafka", + "href": "/integrations/messaging/apache-kafka/" + }, + { + "match": "kafka", + "href": "/integrations/messaging/apache-kafka/" + }, + { + "match": "Aspire.NATS.Net", + "href": "/integrations/messaging/nats/" + }, + { + "match": "Aspire.Hosting.Nats", + "href": "/integrations/messaging/nats/" + }, + { + "match": "nats", + "href": "/integrations/messaging/nats/" + }, + { + "match": "Aspire.RabbitMQ.Client", + "href": "/integrations/messaging/rabbitmq/" + }, + { + "match": "Aspire.RabbitMQ.Client.v7", + "href": "/integrations/messaging/rabbitmq/" + }, + { + "match": "Aspire.Hosting.RabbitMQ", + "href": "/integrations/messaging/rabbitmq/" + }, + { + "match": "CommunityToolkit.Aspire.MassTransit.RabbitMQ", + "href": "/integrations/messaging/rabbitmq/" + }, { "match": "rabbitmq", "href": "/integrations/messaging/rabbitmq/" }, + { + "match": "Aspire.Elastic.Clients.Elasticsearch", + "href": "/integrations/databases/elasticsearch/" + }, + { + "match": "Aspire.Hosting.Elasticsearch", + "href": "/integrations/databases/elasticsearch/" + }, + { + "match": "elasticsearch", + "href": "/integrations/databases/elasticsearch/" + }, + { + "match": "CommunityToolkit.Aspire.EventStore", + "href": "/integrations/databases/eventstore/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.EventStore", + "href": "/integrations/databases/eventstore/" + }, + { + "match": "eventstore", + "href": "/integrations/databases/eventstore/" + }, + { + "match": "CommunityToolkit.Aspire.Meilisearch", + "href": "/integrations/databases/meilisearch/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Meilisearch", + "href": "/integrations/databases/meilisearch/" + }, + { + "match": "meilisearch", + "href": "/integrations/databases/meilisearch/" + }, + { + "match": "Aspire.Milvus.Client", + "href": "/integrations/databases/milvus/" + }, + { + "match": "Aspire.Hosting.Milvus", + "href": "/integrations/databases/milvus/" + }, + { + "match": "milvus", + "href": "/integrations/databases/milvus/" + }, + { + "match": "Aspire.MongoDB.Driver", + "href": "/integrations/databases/mongodb/" + }, + { + "match": "Aspire.MongoDB.Driver.v3", + "href": "/integrations/databases/mongodb/" + }, + { + "match": "Aspire.Hosting.MongoDB", + "href": "/integrations/databases/mongodb/" + }, + { + "match": "mongodb", + "href": "/integrations/databases/mongodb/" + }, + { + "match": "Aspire.MySqlConnector", + "href": "/integrations/databases/mysql/" + }, + { + "match": "Aspire.Pomelo.EntityFrameworkCore.MySql", + "href": "/integrations/databases/mysql/" + }, + { + "match": "Aspire.Hosting.MySql", + "href": "/integrations/databases/mysql/" + }, + { + "match": "mysql", + "href": "/integrations/databases/mysql/" + }, + { + "match": "Aspire.Oracle.EntityFrameworkCore", + "href": "/integrations/databases/oracle/" + }, + { + "match": "Aspire.Hosting.Oracle", + "href": "/integrations/databases/oracle/" + }, + { + "match": "oracle", + "href": "/integrations/databases/oracle/" + }, + { + "match": "Aspire.Npgsql", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Npgsql.EntityFrameworkCore.PostgreSQL", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Azure.Npgsql", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Hosting.PostgreSQL", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Hosting.Azure.PostgreSQL", + "href": "/integrations/databases/postgres/" + }, { "match": "postgres", "href": "/integrations/databases/postgres/" + }, + { + "match": "postgresql", + "href": "/integrations/databases/postgres/" + }, + { + "match": "Aspire.Qdrant.Client", + "href": "/integrations/databases/qdrant/" + }, + { + "match": "Aspire.Hosting.Qdrant", + "href": "/integrations/databases/qdrant/" + }, + { + "match": "qdrant", + "href": "/integrations/databases/qdrant/" + }, + { + "match": "CommunityToolkit.Aspire.RavenDB.Client", + "href": "/integrations/databases/ravendb/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.RavenDB", + "href": "/integrations/databases/ravendb/" + }, + { + "match": "ravendb", + "href": "/integrations/databases/ravendb/" + }, + { + "match": "Aspire.Microsoft.Data.SqlClient", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "Aspire.Microsoft.EntityFrameworkCore.SqlServer", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "Aspire.Hosting.SqlServer", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "Aspire.Hosting.Azure.Sql", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "sql-server", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "sqlserver", + "href": "/integrations/databases/sql-server/" + }, + { + "match": "CommunityToolkit.Aspire.Microsoft.Data.Sqlite", + "href": "/integrations/databases/sqlite/" + }, + { + "match": "CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite", + "href": "/integrations/databases/sqlite/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Sqlite", + "href": "/integrations/databases/sqlite/" + }, + { + "match": "sqlite", + "href": "/integrations/databases/sqlite/" + }, + { + "match": "Aspire.Hosting.Garnet", + "href": "/integrations/caching/garnet/" + }, + { + "match": "garnet", + "href": "/integrations/caching/garnet/" + }, + { + "match": "Aspire.StackExchange.Redis.DistributedCaching", + "href": "/integrations/caching/redis-distributed/" + }, + { + "match": "redis-distributed", + "href": "/integrations/caching/redis-distributed/" + }, + { + "match": "Aspire.StackExchange.Redis.OutputCaching", + "href": "/integrations/caching/redis-output/" + }, + { + "match": "redis-output", + "href": "/integrations/caching/redis-output/" + }, + { + "match": "Aspire.StackExchange.Redis", + "href": "/integrations/caching/redis/" + }, + { + "match": "Aspire.Hosting.Redis", + "href": "/integrations/caching/redis/" + }, + { + "match": "Aspire.Hosting.Azure.Redis", + "href": "/integrations/caching/redis/" + }, + { + "match": "Aspire.Microsoft.Azure.StackExchangeRedis", + "href": "/integrations/caching/redis/" + }, + { + "match": "redis", + "href": "/integrations/caching/redis/" + }, + { + "match": "Aspire.Hosting.Valkey", + "href": "/integrations/caching/valkey/" + }, + { + "match": "valkey", + "href": "/integrations/caching/valkey/" + }, + { + "match": "Aspire.Hosting.GitHub.Models", + "href": "/integrations/ai/github-models/" + }, + { + "match": "github-models", + "href": "/integrations/ai/github-models/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Ollama", + "href": "/integrations/ai/ollama/" + }, + { + "match": "CommunityToolkit.Aspire.OllamaSharp", + "href": "/integrations/ai/ollama/" + }, + { + "match": "ollama", + "href": "/integrations/ai/ollama/" + }, + { + "match": "Aspire.OpenAI", + "href": "/integrations/ai/openai/" + }, + { + "match": "Aspire.Azure.AI.OpenAI", + "href": "/integrations/ai/openai/" + }, + { + "match": "Aspire.Hosting.OpenAI", + "href": "/integrations/ai/openai/" + }, + { + "match": "openai", + "href": "/integrations/ai/openai/" + }, + { + "match": "Aspire.Seq", + "href": "/integrations/observability/seq/" + }, + { + "match": "Aspire.Hosting.Seq", + "href": "/integrations/observability/seq/" + }, + { + "match": "seq", + "href": "/integrations/observability/seq/" + }, + { + "match": "Aspire.Keycloak.Authentication", + "href": "/integrations/security/keycloak/" + }, + { + "match": "Aspire.Hosting.Keycloak", + "href": "/integrations/security/keycloak/" + }, + { + "match": "keycloak", + "href": "/integrations/security/keycloak/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder", + "href": "/integrations/devtools/dab/" + }, + { + "match": "dab", + "href": "/integrations/devtools/dab/" + }, + { + "match": "dataapibuilder", + "href": "/integrations/devtools/dab/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects", + "href": "/integrations/devtools/sql-projects/" + }, + { + "match": "sql-projects", + "href": "/integrations/devtools/sql-projects/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Bun", + "href": "/integrations/frameworks/bun-apps/" + }, + { + "match": "bun-apps", + "href": "/integrations/frameworks/bun-apps/" + }, + { + "match": "bun", + "href": "/integrations/frameworks/bun-apps/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Dapr", + "href": "/integrations/frameworks/dapr/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Azure.Dapr", + "href": "/integrations/frameworks/dapr/" + }, + { + "match": "dapr", + "href": "/integrations/frameworks/dapr/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Deno", + "href": "/integrations/frameworks/deno-apps/" + }, + { + "match": "deno-apps", + "href": "/integrations/frameworks/deno-apps/" + }, + { + "match": "deno", + "href": "/integrations/frameworks/deno-apps/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Golang", + "href": "/integrations/frameworks/go-apps/" + }, + { + "match": "go-apps", + "href": "/integrations/frameworks/go-apps/" + }, + { + "match": "go", + "href": "/integrations/frameworks/go-apps/" + }, + { + "match": "golang", + "href": "/integrations/frameworks/go-apps/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Java", + "href": "/integrations/frameworks/java/" + }, + { + "match": "java", + "href": "/integrations/frameworks/java/" + }, + { + "match": "Aspire.Hosting.Python", + "href": "/integrations/frameworks/python/" + }, + { + "match": "python", + "href": "/integrations/frameworks/python/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.Rust", + "href": "/integrations/frameworks/rust/" + }, + { + "match": "rust", + "href": "/integrations/frameworks/rust/" + }, + { + "match": "Aspire.Hosting.Yarp", + "href": "/integrations/reverse-proxies/yarp/" + }, + { + "match": "yarp", + "href": "/integrations/reverse-proxies/yarp/" } ] \ No newline at end of file From b634084120bea8095f05d2b618ab83b5de19385e Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 3 Nov 2025 14:43:33 -0600 Subject: [PATCH 03/18] feat: Add translations for sidebar topics in multiple languages --- src/frontend/sidebar.topics.ts | 120 +++++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 6 deletions(-) diff --git a/src/frontend/sidebar.topics.ts b/src/frontend/sidebar.topics.ts index 59182475d..e6e9ca4b7 100644 --- a/src/frontend/sidebar.topics.ts +++ b/src/frontend/sidebar.topics.ts @@ -540,7 +540,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Artificial Intelligence (AI)", collapsed: true, - translations: { }, + translations: { + da: 'Kunstig intelligens (AI)', + de: 'Künstliche Intelligenz (KI)', + en: 'Artificial Intelligence (AI)', + es: 'Inteligencia Artificial (IA)', + fr: 'Intelligence Artificielle (IA)', + hi: 'कृत्रिम बुद्धिमत्ता (एआई)', + id: 'Kecerdasan Buatan (AI)', + it: 'Intelligenza Artificiale (IA)', + ja: '人工知能 (AI)', + ko: '인공지능 (AI)', + pt: 'Inteligência Artificial (IA)', + 'pt-BR': 'Inteligência Artificial (IA)', + 'pt-PT': 'Inteligência Artificial (IA)', + ru: 'Искусственный интеллект (ИИ)', + tr: 'Yapay Zeka (YZ)', + uk: 'Штучний інтелект (ШІ)', + 'zh-CN': '人工智能 (AI)', + }, items: [ { label: "GitHub Models", slug: "integrations/ai/github-models" }, { label: "Ollama", slug: "integrations/ai/ollama" }, @@ -576,7 +594,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Caching & state", collapsed: true, - translations: { }, + translations: { + da: 'Caching og tilstand', + de: 'Caching & Zustand', + en: 'Caching & state', + es: 'Caché y estado', + fr: 'Mise en cache et état', + hi: 'कैशिंग और स्थिति', + id: 'Caching & State', + it: 'Caching e stato', + ja: 'キャッシングと状態', + ko: '캐싱 및 상태', + pt: 'Cache e Estado', + 'pt-BR': 'Cache e Estado', + 'pt-PT': 'Cache e Estado', + ru: 'Кэширование и состояние', + tr: 'Önbellekleme ve Durum', + uk: 'Кешування та стан', + 'zh-CN': '缓存与状态', + }, items: [ { label: "Redis", slug: "integrations/caching/redis" }, { label: "Redis Distributed Cache", slug: "integrations/caching/redis-distributed" }, @@ -684,7 +720,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Security & identity", collapsed: true, - translations: { }, + translations: { + da: 'Sikkerhed og identitet', + de: 'Sicherheit & Identität', + en: 'Security & identity', + es: 'Seguridad e identidad', + fr: 'Sécurité et identité', + hi: 'सुरक्षा और पहचान', + id: 'Keamanan & Identitas', + it: 'Sicurezza e identità', + ja: 'セキュリティとアイデンティティ', + ko: '보안 및 ID', + pt: 'Segurança e Identidade', + 'pt-BR': 'Segurança e Identidade', + 'pt-PT': 'Segurança e Identidade', + ru: 'Безопасность и идентификация', + tr: 'Güvenlik ve Kimlik', + uk: 'Безпека та ідентичність', + 'zh-CN': '安全与身份', + }, items: [ { label: "Keycloak", slug: "integrations/security/keycloak" } ] @@ -692,7 +746,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Observability & logging", collapsed: true, - translations: { }, + translations: { + da: 'Observerbarhed og logning', + de: 'Beobachtbarkeit & Protokollierung', + en: 'Observability & logging', + es: 'Observabilidad y registro', + fr: 'Observabilité et journalisation', + hi: 'पर्यवेक्षण और लॉगिंग', + id: 'Observabilitas & Logging', + it: 'Osservabilità e registrazione', + ja: '可観測性とログ記録', + ko: '관측 가능성 및 로깅', + pt: 'Observabilidade e Registro', + 'pt-BR': 'Observabilidade e Registro', + 'pt-PT': 'Observabilidade e Registo', + ru: 'Наблюдаемость и ведение журналов', + tr: 'Gözlemlenebilirlik ve Günlük Kaydı', + uk: 'Спостережуваність та ведення журналів', + 'zh-CN': '可观察性与日志记录', + }, items: [ { label: 'Seq', slug: 'integrations/observability/seq' }, ] @@ -700,7 +772,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Reverse proxies & APIs", collapsed: true, - translations: { }, + translations: { + da: 'Reverse proxies & API\'er', + de: 'Reverse Proxies & APIs', + en: 'Reverse proxies & APIs', + es: 'Reverse proxies y APIs', + fr: 'Reverse proxies et APIs', + hi: 'रिवर्स प्रॉक्सी और एपीआई', + id: 'Reverse Proxies & API', + it: 'Reverse proxy e API', + ja: 'リバースプロキシとAPI', + ko: '리버스 프록시 및 API', + pt: 'Reverse Proxies e APIs', + 'pt-BR': 'Reverse Proxies e APIs', + 'pt-PT': 'Reverse Proxies e APIs', + ru: 'Обратные прокси и API', + tr: 'Ters Proxyler ve API\'ler', + uk: 'Зворотні проксі та API', + 'zh-CN': '反向代理和API', + }, items: [ { label: 'YARP (Yet Another Reverse Proxy)', slug: 'integrations/reverse-proxies/yarp' }, ] @@ -708,7 +798,25 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Dev tools & extensions", collapsed: true, - translations: { }, + translations: { + da: 'Dev-værktøjer og udvidelser', + de: 'Dev-Tools & Erweiterungen', + en: 'Dev tools & extensions', + es: 'Herramientas de desarrollo y extensiones', + fr: 'Outils de développement et extensions', + hi: 'डेव टूल्स और एक्सटेंशन', + id: 'Alat & Ekstensi Dev', + it: 'Strumenti di sviluppo ed estensioni', + ja: '開発ツールと拡張機能', + ko: '개발 도구 및 확장 프로그램', + pt: 'Ferramentas e Extensões de Desenvolvimento', + 'pt-BR': 'Ferramentas e Extensões de Desenvolvimento', + 'pt-PT': 'Ferramentas e Extensões de Desenvolvimento', + ru: 'Инструменты разработчика и расширения', + tr: 'Geliştirici Araçları ve Uzantılar', + uk: 'Інструменти розробника та розширення', + 'zh-CN': '开发工具和扩展', + }, items: [ { label: "Data API Builder", slug: "integrations/devtools/dab" }, { label: "SQL Database Projects", slug: "integrations/devtools/sql-projects" }, From 8f47e04db6d75d8b93f0a425bea092181f83121b Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 3 Nov 2025 14:46:28 -0600 Subject: [PATCH 04/18] feat: Add placeholder component for Azure integration documentation --- .../content/docs/integrations/cloud/azure/overview.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx index 804b93b41..70428220c 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx @@ -2,3 +2,11 @@ title: Azure integrations overview --- +import Placeholder from "@components/Placeholder.astro"; + + From 953c833369251aba3893551f3f3d7cb299040088 Mon Sep 17 00:00:00 2001 From: David Pine Date: Mon, 3 Nov 2025 23:08:28 -0600 Subject: [PATCH 05/18] fix: Correct documentation descriptions for Go and Python integrations --- src/frontend/src/components/Integrations.astro | 2 +- .../src/content/docs/integrations/frameworks/go-apps.mdx | 2 +- .../src/content/docs/integrations/frameworks/python.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/components/Integrations.astro b/src/frontend/src/components/Integrations.astro index 36748aead..655a660af 100644 --- a/src/frontend/src/components/Integrations.astro +++ b/src/frontend/src/components/Integrations.astro @@ -37,7 +37,7 @@ const sortedIntegrations = integrations.sort((a, b) => { }); --- -
+
Date: Tue, 4 Nov 2025 10:52:02 -0600 Subject: [PATCH 06/18] Refactor Placeholder component usage across documentation - Updated Placeholder component in various integration documentation files to use LinkButton instead of anchor tags for improved UX. - Revised titles and descriptions to reflect ongoing documentation migration from Microsoft Learn to aspire.dev. - Standardized link texts for better consistency across integration pages. --- src/frontend/src/components/Placeholder.astro | 17 +++++++++++++---- .../docs/integrations/ai/github-models.mdx | 6 +++--- .../src/content/docs/integrations/ai/ollama.mdx | 6 +++--- .../src/content/docs/integrations/ai/openai.mdx | 6 +++--- .../docs/integrations/caching/garnet.mdx | 8 ++++---- .../integrations/caching/redis-distributed.mdx | 8 ++++---- .../docs/integrations/caching/redis-output.mdx | 8 ++++---- .../content/docs/integrations/caching/redis.mdx | 8 ++++---- .../docs/integrations/caching/valkey.mdx | 8 ++++---- .../docs/integrations/cloud/azure/overview.mdx | 6 +++--- .../integrations/databases/elasticsearch.mdx | 6 +++--- .../docs/integrations/databases/eventstore.mdx | 8 ++++---- .../docs/integrations/databases/meilisearch.mdx | 6 +++--- .../docs/integrations/databases/milvus.mdx | 6 +++--- .../docs/integrations/databases/mongodb.mdx | 6 +++--- .../docs/integrations/databases/mysql.mdx | 6 +++--- .../docs/integrations/databases/oracle.mdx | 6 +++--- .../docs/integrations/databases/qdrant.mdx | 6 +++--- .../docs/integrations/databases/ravendb.mdx | 8 ++++---- .../docs/integrations/databases/sqlite.mdx | 6 +++--- .../content/docs/integrations/devtools/dab.mdx | 6 +++--- .../docs/integrations/devtools/sql-projects.mdx | 6 +++--- .../docs/integrations/frameworks/bun-apps.mdx | 8 ++++---- .../docs/integrations/frameworks/dapr.mdx | 6 +++--- .../docs/integrations/frameworks/deno-apps.mdx | 6 +++--- .../docs/integrations/frameworks/go-apps.mdx | 6 +++--- .../docs/integrations/frameworks/java.mdx | 6 +++--- .../docs/integrations/frameworks/python.mdx | 6 +++--- .../docs/integrations/frameworks/rust.mdx | 6 +++--- .../integrations/messaging/apache-kafka.mdx | 6 +++--- .../docs/integrations/messaging/nats.mdx | 6 +++--- .../docs/integrations/observability/seq.mdx | 6 +++--- .../docs/integrations/reverse-proxies/yarp.mdx | 6 +++--- .../docs/integrations/security/keycloak.mdx | 6 +++--- 34 files changed, 120 insertions(+), 111 deletions(-) diff --git a/src/frontend/src/components/Placeholder.astro b/src/frontend/src/components/Placeholder.astro index f8dd3a332..889eeb022 100644 --- a/src/frontend/src/components/Placeholder.astro +++ b/src/frontend/src/components/Placeholder.astro @@ -23,13 +23,22 @@ try { // Invalid URL; leave link unchanged. } -import { Card } from "@astrojs/starlight/components"; +import { LinkButton, Card } from "@astrojs/starlight/components"; ---

{description}

- - {linkText || "Learn more"} - + + { + linkText + ? `Microsoft Learn: ${linkText} docs` + : "Explore more on Microsoft Learn" + } +
diff --git a/src/frontend/src/content/docs/integrations/ai/github-models.mdx b/src/frontend/src/content/docs/integrations/ai/github-models.mdx index 2e17b84bd..466c64c92 100644 --- a/src/frontend/src/content/docs/integrations/ai/github-models.mdx +++ b/src/frontend/src/content/docs/integrations/ai/github-models.mdx @@ -5,9 +5,9 @@ title: GitHub Models integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/ai/ollama.mdx b/src/frontend/src/content/docs/integrations/ai/ollama.mdx index 24759c064..4ffbecaee 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama.mdx @@ -5,8 +5,8 @@ title: Ollama integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/ai/openai.mdx b/src/frontend/src/content/docs/integrations/ai/openai.mdx index a74e89041..d9348ec60 100644 --- a/src/frontend/src/content/docs/integrations/ai/openai.mdx +++ b/src/frontend/src/content/docs/integrations/ai/openai.mdx @@ -5,8 +5,8 @@ title: OpenAI integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/garnet.mdx b/src/frontend/src/content/docs/integrations/caching/garnet.mdx index b33aff47a..66e5c7784 100644 --- a/src/frontend/src/content/docs/integrations/caching/garnet.mdx +++ b/src/frontend/src/content/docs/integrations/caching/garnet.mdx @@ -5,8 +5,8 @@ title: Garnet integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx index 9c21173fe..31c966b0a 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx @@ -5,8 +5,8 @@ title: Redis Distributed Cache integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/redis-output.mdx b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx index 47e0e2f9f..32c3f1748 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis-output.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx @@ -5,8 +5,8 @@ title: Redis Output Cache integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/redis.mdx b/src/frontend/src/content/docs/integrations/caching/redis.mdx index cb26cc6cf..acd98d6b5 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis.mdx @@ -5,8 +5,8 @@ title: Redis integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/valkey.mdx b/src/frontend/src/content/docs/integrations/caching/valkey.mdx index 9fad94025..8eafc47c6 100644 --- a/src/frontend/src/content/docs/integrations/caching/valkey.mdx +++ b/src/frontend/src/content/docs/integrations/caching/valkey.mdx @@ -5,8 +5,8 @@ title: Valkey integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx index 70428220c..49ccea5e7 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx @@ -5,8 +5,8 @@ title: Azure integrations overview import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx index a84045ac4..8bfe1f658 100644 --- a/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx +++ b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx @@ -5,8 +5,8 @@ title: Elasticsearch integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/eventstore.mdx b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx index c164e9f57..4c66ca663 100644 --- a/src/frontend/src/content/docs/integrations/databases/eventstore.mdx +++ b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx @@ -5,8 +5,8 @@ title: EventStore integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx index f8af61133..86b5f9544 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx @@ -5,8 +5,8 @@ title: Meilisearch integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/milvus.mdx b/src/frontend/src/content/docs/integrations/databases/milvus.mdx index 2734fb249..a9173637d 100644 --- a/src/frontend/src/content/docs/integrations/databases/milvus.mdx +++ b/src/frontend/src/content/docs/integrations/databases/milvus.mdx @@ -5,8 +5,8 @@ title: Milvus integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/mongodb.mdx b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx index e07883dc5..3d25f3e1b 100644 --- a/src/frontend/src/content/docs/integrations/databases/mongodb.mdx +++ b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx @@ -5,8 +5,8 @@ title: MongoDB integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/mysql.mdx b/src/frontend/src/content/docs/integrations/databases/mysql.mdx index e53f14bf4..ab866146c 100644 --- a/src/frontend/src/content/docs/integrations/databases/mysql.mdx +++ b/src/frontend/src/content/docs/integrations/databases/mysql.mdx @@ -5,8 +5,8 @@ title: MySQL integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/oracle.mdx b/src/frontend/src/content/docs/integrations/databases/oracle.mdx index de5bcdb97..668cc4bd9 100644 --- a/src/frontend/src/content/docs/integrations/databases/oracle.mdx +++ b/src/frontend/src/content/docs/integrations/databases/oracle.mdx @@ -5,8 +5,8 @@ title: Oracle integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/qdrant.mdx b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx index 5f70fe1ec..f06a2cddb 100644 --- a/src/frontend/src/content/docs/integrations/databases/qdrant.mdx +++ b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx @@ -5,8 +5,8 @@ title: Qdrant integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx index 3362ae1a4..674887cd9 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx @@ -5,8 +5,8 @@ title: RavenDB integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx index db6de1fe7..16dc6f20c 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx @@ -5,8 +5,8 @@ title: SQLite integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/devtools/dab.mdx b/src/frontend/src/content/docs/integrations/devtools/dab.mdx index 162023330..1e4388b82 100644 --- a/src/frontend/src/content/docs/integrations/devtools/dab.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/dab.mdx @@ -5,8 +5,8 @@ title: Data API Builder integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx index a40749236..239a71256 100644 --- a/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx @@ -5,8 +5,8 @@ title: SQL Database Projects integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx index 1ba9d60ea..cd75969b0 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx @@ -5,9 +5,9 @@ title: Bun integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx index d3c59ba30..b82a60932 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx @@ -5,8 +5,8 @@ title: Dapr integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx index fc75798c1..ca8997c4e 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx @@ -5,9 +5,9 @@ title: Deno integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx index 1546b3d8e..59647d9f5 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx @@ -5,9 +5,9 @@ title: Go integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/java.mdx b/src/frontend/src/content/docs/integrations/frameworks/java.mdx index 69c23770a..42866b12a 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/java.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/java.mdx @@ -5,9 +5,9 @@ title: Java integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/python.mdx b/src/frontend/src/content/docs/integrations/frameworks/python.mdx index 90b8c6895..410dbdbfa 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/python.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/python.mdx @@ -5,9 +5,9 @@ title: Python integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/rust.mdx b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx index 7b37a37fb..f3862cca4 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/rust.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx @@ -5,9 +5,9 @@ title: Rust integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx index 29a2ce838..71482d53d 100644 --- a/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx +++ b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx @@ -5,8 +5,8 @@ title: Apache Kafka integration import Placeholder from "@components/Placeholder.astro"; \ No newline at end of file diff --git a/src/frontend/src/content/docs/integrations/messaging/nats.mdx b/src/frontend/src/content/docs/integrations/messaging/nats.mdx index 271881f3d..d7a517694 100644 --- a/src/frontend/src/content/docs/integrations/messaging/nats.mdx +++ b/src/frontend/src/content/docs/integrations/messaging/nats.mdx @@ -5,8 +5,8 @@ title: NATS integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/observability/seq.mdx b/src/frontend/src/content/docs/integrations/observability/seq.mdx index 0e15376cd..a125bf63b 100644 --- a/src/frontend/src/content/docs/integrations/observability/seq.mdx +++ b/src/frontend/src/content/docs/integrations/observability/seq.mdx @@ -5,8 +5,8 @@ title: Seq integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx index 89935a21c..7ac3aacf4 100644 --- a/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx +++ b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx @@ -5,8 +5,8 @@ title: YARP (Yet Another Reverse Proxy) integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/security/keycloak.mdx b/src/frontend/src/content/docs/integrations/security/keycloak.mdx index 01ec97d1e..ebc85f974 100644 --- a/src/frontend/src/content/docs/integrations/security/keycloak.mdx +++ b/src/frontend/src/content/docs/integrations/security/keycloak.mdx @@ -5,8 +5,8 @@ title: Keycloak integration import Placeholder from "@components/Placeholder.astro"; From 0ff947a99f9055e086a1855c56ba77d08c1e8e46 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 11:10:56 -0600 Subject: [PATCH 07/18] Refactor Placeholder component usage in integration docs - Updated the Placeholder component to use 'name' and 'link' props instead of 'title', 'description', and 'linkText'. - Modified integration documentation files to reflect the new Placeholder structure, ensuring consistency across all integration pages. - Removed lengthy descriptions in favor of concise messaging about ongoing documentation migration. --- src/frontend/src/components/Placeholder.astro | 31 ++++++++++++------- .../docs/integrations/ai/github-models.mdx | 6 ++-- .../content/docs/integrations/ai/ollama.mdx | 6 ++-- .../content/docs/integrations/ai/openai.mdx | 6 ++-- .../docs/integrations/caching/garnet.mdx | 6 ++-- .../caching/redis-distributed.mdx | 6 ++-- .../integrations/caching/redis-output.mdx | 8 ++--- .../docs/integrations/caching/redis.mdx | 6 ++-- .../docs/integrations/caching/valkey.mdx | 6 ++-- .../integrations/cloud/azure/overview.mdx | 6 ++-- .../integrations/databases/elasticsearch.mdx | 6 ++-- .../integrations/databases/eventstore.mdx | 6 ++-- .../integrations/databases/meilisearch.mdx | 6 ++-- .../docs/integrations/databases/milvus.mdx | 6 ++-- .../docs/integrations/databases/mongodb.mdx | 6 ++-- .../docs/integrations/databases/mysql.mdx | 6 ++-- .../docs/integrations/databases/oracle.mdx | 6 ++-- .../docs/integrations/databases/qdrant.mdx | 6 ++-- .../docs/integrations/databases/ravendb.mdx | 6 ++-- .../docs/integrations/databases/sqlite.mdx | 6 ++-- .../docs/integrations/devtools/dab.mdx | 6 ++-- .../integrations/devtools/sql-projects.mdx | 6 ++-- .../docs/integrations/frameworks/bun-apps.mdx | 6 ++-- .../docs/integrations/frameworks/dapr.mdx | 6 ++-- .../integrations/frameworks/deno-apps.mdx | 6 ++-- .../docs/integrations/frameworks/go-apps.mdx | 6 ++-- .../docs/integrations/frameworks/java.mdx | 6 ++-- .../docs/integrations/frameworks/python.mdx | 6 ++-- .../docs/integrations/frameworks/rust.mdx | 6 ++-- .../src/content/docs/integrations/gallery.mdx | 4 +-- .../integrations/messaging/apache-kafka.mdx | 6 ++-- .../docs/integrations/messaging/nats.mdx | 6 ++-- .../docs/integrations/observability/seq.mdx | 6 ++-- .../integrations/reverse-proxies/yarp.mdx | 6 ++-- .../docs/integrations/security/keycloak.mdx | 6 ++-- 35 files changed, 88 insertions(+), 147 deletions(-) diff --git a/src/frontend/src/components/Placeholder.astro b/src/frontend/src/components/Placeholder.astro index 889eeb022..eb1f1fe58 100644 --- a/src/frontend/src/components/Placeholder.astro +++ b/src/frontend/src/components/Placeholder.astro @@ -2,14 +2,12 @@ import type { StarlightIcon } from "@astrojs/starlight/types"; export interface Props { - title: string; - description: string; + name: string; link: string; - linkText?: string; icon?: StarlightIcon; } -let { title, description, link, icon, linkText } = Astro.props as Props; +let { name, link, icon } = Astro.props as Props; try { const url = new URL(link); @@ -26,19 +24,28 @@ try { import { LinkButton, Card } from "@astrojs/starlight/components"; --- - -

{description}

+ +

Sorry...you caught us in the middle of a docs migration. 😬

+

+ We're working to move content off of Microsoft Learn and into + aspire.dev—the new home for everything Aspire. We appreciate your + patience while we're unpacking. +

+

+ In the meantime, here's a handy link to the {name} content you're after! + We promise we're moving as fast as we can. Check back soon! 🚀 +

- { - linkText - ? `Microsoft Learn: ${linkText} docs` - : "Explore more on Microsoft Learn" - } + {`Microsoft Learn: ${name} docs`}
diff --git a/src/frontend/src/content/docs/integrations/ai/github-models.mdx b/src/frontend/src/content/docs/integrations/ai/github-models.mdx index 466c64c92..37184b9e8 100644 --- a/src/frontend/src/content/docs/integrations/ai/github-models.mdx +++ b/src/frontend/src/content/docs/integrations/ai/github-models.mdx @@ -5,9 +5,7 @@ title: GitHub Models integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/ai/ollama.mdx b/src/frontend/src/content/docs/integrations/ai/ollama.mdx index 4ffbecaee..568c77b1a 100644 --- a/src/frontend/src/content/docs/integrations/ai/ollama.mdx +++ b/src/frontend/src/content/docs/integrations/ai/ollama.mdx @@ -5,8 +5,6 @@ title: Ollama integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/ai/openai.mdx b/src/frontend/src/content/docs/integrations/ai/openai.mdx index d9348ec60..cf7fcc65b 100644 --- a/src/frontend/src/content/docs/integrations/ai/openai.mdx +++ b/src/frontend/src/content/docs/integrations/ai/openai.mdx @@ -5,8 +5,6 @@ title: OpenAI integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/garnet.mdx b/src/frontend/src/content/docs/integrations/caching/garnet.mdx index 66e5c7784..297c9ad95 100644 --- a/src/frontend/src/content/docs/integrations/caching/garnet.mdx +++ b/src/frontend/src/content/docs/integrations/caching/garnet.mdx @@ -5,8 +5,6 @@ title: Garnet integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx index 31c966b0a..5860b333d 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis-distributed.mdx @@ -5,8 +5,6 @@ title: Redis Distributed Cache integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/redis-output.mdx b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx index 32c3f1748..13f53e5fc 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis-output.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis-output.mdx @@ -4,9 +4,7 @@ title: Redis Output Cache integration import Placeholder from "@components/Placeholder.astro"; - diff --git a/src/frontend/src/content/docs/integrations/caching/redis.mdx b/src/frontend/src/content/docs/integrations/caching/redis.mdx index acd98d6b5..59038c52e 100644 --- a/src/frontend/src/content/docs/integrations/caching/redis.mdx +++ b/src/frontend/src/content/docs/integrations/caching/redis.mdx @@ -5,8 +5,6 @@ title: Redis integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/caching/valkey.mdx b/src/frontend/src/content/docs/integrations/caching/valkey.mdx index 8eafc47c6..89f9352eb 100644 --- a/src/frontend/src/content/docs/integrations/caching/valkey.mdx +++ b/src/frontend/src/content/docs/integrations/caching/valkey.mdx @@ -5,8 +5,6 @@ title: Valkey integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx index 49ccea5e7..3e33aa184 100644 --- a/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx +++ b/src/frontend/src/content/docs/integrations/cloud/azure/overview.mdx @@ -5,8 +5,6 @@ title: Azure integrations overview import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx index 8bfe1f658..4b5059c3e 100644 --- a/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx +++ b/src/frontend/src/content/docs/integrations/databases/elasticsearch.mdx @@ -5,8 +5,6 @@ title: Elasticsearch integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/eventstore.mdx b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx index 4c66ca663..833816e6e 100644 --- a/src/frontend/src/content/docs/integrations/databases/eventstore.mdx +++ b/src/frontend/src/content/docs/integrations/databases/eventstore.mdx @@ -5,8 +5,6 @@ title: EventStore integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx index 86b5f9544..721325464 100644 --- a/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx +++ b/src/frontend/src/content/docs/integrations/databases/meilisearch.mdx @@ -5,8 +5,6 @@ title: Meilisearch integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/milvus.mdx b/src/frontend/src/content/docs/integrations/databases/milvus.mdx index a9173637d..f0e886d3a 100644 --- a/src/frontend/src/content/docs/integrations/databases/milvus.mdx +++ b/src/frontend/src/content/docs/integrations/databases/milvus.mdx @@ -5,8 +5,6 @@ title: Milvus integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/mongodb.mdx b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx index 3d25f3e1b..2cb60b2fe 100644 --- a/src/frontend/src/content/docs/integrations/databases/mongodb.mdx +++ b/src/frontend/src/content/docs/integrations/databases/mongodb.mdx @@ -5,8 +5,6 @@ title: MongoDB integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/mysql.mdx b/src/frontend/src/content/docs/integrations/databases/mysql.mdx index ab866146c..a3bc4d471 100644 --- a/src/frontend/src/content/docs/integrations/databases/mysql.mdx +++ b/src/frontend/src/content/docs/integrations/databases/mysql.mdx @@ -5,8 +5,6 @@ title: MySQL integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/oracle.mdx b/src/frontend/src/content/docs/integrations/databases/oracle.mdx index 668cc4bd9..d13047c1d 100644 --- a/src/frontend/src/content/docs/integrations/databases/oracle.mdx +++ b/src/frontend/src/content/docs/integrations/databases/oracle.mdx @@ -5,8 +5,6 @@ title: Oracle integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/qdrant.mdx b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx index f06a2cddb..8afff920f 100644 --- a/src/frontend/src/content/docs/integrations/databases/qdrant.mdx +++ b/src/frontend/src/content/docs/integrations/databases/qdrant.mdx @@ -5,8 +5,6 @@ title: Qdrant integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/ravendb.mdx b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx index 674887cd9..e9e3ba869 100644 --- a/src/frontend/src/content/docs/integrations/databases/ravendb.mdx +++ b/src/frontend/src/content/docs/integrations/databases/ravendb.mdx @@ -5,8 +5,6 @@ title: RavenDB integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/databases/sqlite.mdx b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx index 16dc6f20c..8b8c5d41c 100644 --- a/src/frontend/src/content/docs/integrations/databases/sqlite.mdx +++ b/src/frontend/src/content/docs/integrations/databases/sqlite.mdx @@ -5,8 +5,6 @@ title: SQLite integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/devtools/dab.mdx b/src/frontend/src/content/docs/integrations/devtools/dab.mdx index 1e4388b82..e36f8363a 100644 --- a/src/frontend/src/content/docs/integrations/devtools/dab.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/dab.mdx @@ -5,8 +5,6 @@ title: Data API Builder integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx index 239a71256..5ff6e1c69 100644 --- a/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx +++ b/src/frontend/src/content/docs/integrations/devtools/sql-projects.mdx @@ -5,8 +5,6 @@ title: SQL Database Projects integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx index cd75969b0..91783239c 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx @@ -5,9 +5,7 @@ title: Bun integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx index b82a60932..787fec51a 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/dapr.mdx @@ -5,8 +5,6 @@ title: Dapr integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx index ca8997c4e..fd399e19f 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/deno-apps.mdx @@ -5,9 +5,7 @@ title: Deno integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx index 59647d9f5..94bc051f7 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/go-apps.mdx @@ -5,9 +5,7 @@ title: Go integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/java.mdx b/src/frontend/src/content/docs/integrations/frameworks/java.mdx index 42866b12a..6c56acace 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/java.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/java.mdx @@ -5,9 +5,7 @@ title: Java integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/python.mdx b/src/frontend/src/content/docs/integrations/frameworks/python.mdx index 410dbdbfa..ced463981 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/python.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/python.mdx @@ -5,9 +5,7 @@ title: Python integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/frameworks/rust.mdx b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx index f3862cca4..2cc940c44 100644 --- a/src/frontend/src/content/docs/integrations/frameworks/rust.mdx +++ b/src/frontend/src/content/docs/integrations/frameworks/rust.mdx @@ -5,9 +5,7 @@ title: Rust integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/gallery.mdx b/src/frontend/src/content/docs/integrations/gallery.mdx index 6c51d48ed..92ba204e6 100644 --- a/src/frontend/src/content/docs/integrations/gallery.mdx +++ b/src/frontend/src/content/docs/integrations/gallery.mdx @@ -1,6 +1,6 @@ --- -title: Integrations Gallery -description: Explore the Aspire Gallery of integrations and extensions to enhance your Aspire solution. +title: Integrations gallery +description: Explore the Aspire gallery of integrations and extensions to enhance your Aspire solution. tableOfContents: false lastUpdated: false editUrl: false diff --git a/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx index 71482d53d..11feb7e68 100644 --- a/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx +++ b/src/frontend/src/content/docs/integrations/messaging/apache-kafka.mdx @@ -5,8 +5,6 @@ title: Apache Kafka integration import Placeholder from "@components/Placeholder.astro"; \ No newline at end of file diff --git a/src/frontend/src/content/docs/integrations/messaging/nats.mdx b/src/frontend/src/content/docs/integrations/messaging/nats.mdx index d7a517694..91404f155 100644 --- a/src/frontend/src/content/docs/integrations/messaging/nats.mdx +++ b/src/frontend/src/content/docs/integrations/messaging/nats.mdx @@ -5,8 +5,6 @@ title: NATS integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/observability/seq.mdx b/src/frontend/src/content/docs/integrations/observability/seq.mdx index a125bf63b..8f6eef2b7 100644 --- a/src/frontend/src/content/docs/integrations/observability/seq.mdx +++ b/src/frontend/src/content/docs/integrations/observability/seq.mdx @@ -5,8 +5,6 @@ title: Seq integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx index 7ac3aacf4..f994bcc4e 100644 --- a/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx +++ b/src/frontend/src/content/docs/integrations/reverse-proxies/yarp.mdx @@ -5,8 +5,6 @@ title: YARP (Yet Another Reverse Proxy) integration import Placeholder from "@components/Placeholder.astro"; diff --git a/src/frontend/src/content/docs/integrations/security/keycloak.mdx b/src/frontend/src/content/docs/integrations/security/keycloak.mdx index ebc85f974..6b162d43e 100644 --- a/src/frontend/src/content/docs/integrations/security/keycloak.mdx +++ b/src/frontend/src/content/docs/integrations/security/keycloak.mdx @@ -5,8 +5,6 @@ title: Keycloak integration import Placeholder from "@components/Placeholder.astro"; From 8fd2169be2b83ec211ca6ebf3b7f146d473520ee Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 11:40:59 -0600 Subject: [PATCH 08/18] fix: Add emoji to enhance user experience in Placeholder component --- src/frontend/src/components/Placeholder.astro | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/components/Placeholder.astro b/src/frontend/src/components/Placeholder.astro index eb1f1fe58..81204b5b4 100644 --- a/src/frontend/src/components/Placeholder.astro +++ b/src/frontend/src/components/Placeholder.astro @@ -33,7 +33,7 @@ import { LinkButton, Card } from "@astrojs/starlight/components";

We're working to move content off of Microsoft Learn and into aspire.dev—the new home for everything Aspire. We appreciate your - patience while we're unpacking. + patience while we're unpacking. 🙏

In the meantime, here's a handy link to the {name} content you're after! @@ -49,3 +49,9 @@ import { LinkButton, Card } from "@astrojs/starlight/components"; {`Microsoft Learn: ${name} docs`} + + From 9e03d3e06f3a80495724f2b101576fb5425c23ea Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 11:44:19 -0600 Subject: [PATCH 09/18] fix: Remove variant attribute from LinkButton in Placeholder component --- src/frontend/src/components/Placeholder.astro | 1 - 1 file changed, 1 deletion(-) diff --git a/src/frontend/src/components/Placeholder.astro b/src/frontend/src/components/Placeholder.astro index 81204b5b4..e31da4f26 100644 --- a/src/frontend/src/components/Placeholder.astro +++ b/src/frontend/src/components/Placeholder.astro @@ -42,7 +42,6 @@ import { LinkButton, Card } from "@astrojs/starlight/components"; From 359bd6388bfb8396b95c2f44e47e818d7431b714 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 13:06:33 -0600 Subject: [PATCH 10/18] feat: Add Docker, Kubernetes, Dev Tunnels, MailPit, and LavinMQ integrations with localized titles and links --- src/frontend/sidebar.topics.ts | 32 ++++++++++++++++++- .../docs/integrations/compute/docker.mdx | 10 ++++++ .../docs/integrations/compute/kubernetes.mdx | 10 ++++++ .../integrations/devtools/dev-tunnels.mdx | 10 ++++++ .../docs/integrations/devtools/mailpit.mdx | 10 ++++++ .../docs/integrations/messaging/lavinmq.mdx | 10 ++++++ src/frontend/src/data/integration-docs.json | 24 ++++++++++++++ 7 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/frontend/src/content/docs/integrations/compute/docker.mdx create mode 100644 src/frontend/src/content/docs/integrations/compute/kubernetes.mdx create mode 100644 src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx create mode 100644 src/frontend/src/content/docs/integrations/devtools/mailpit.mdx create mode 100644 src/frontend/src/content/docs/integrations/messaging/lavinmq.mdx diff --git a/src/frontend/sidebar.topics.ts b/src/frontend/sidebar.topics.ts index e6e9ca4b7..5c428093f 100644 --- a/src/frontend/sidebar.topics.ts +++ b/src/frontend/sidebar.topics.ts @@ -621,6 +621,33 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "Garnet", slug: "integrations/caching/garnet" } ] }, + { + label: "Compute & Hosting", + collapsed: true, + translations: { + da: 'Compute og hosting', + de: 'Compute & Hosting', + en: 'Compute & Hosting', + es: 'Computación y alojamiento', + fr: 'Calcul et hébergement', + hi: 'कंप्यूट और होस्टिंग', + id: 'Komputasi & Hosting', + it: 'Calcolo e hosting', + ja: 'コンピューティングとホスティング', + ko: '컴퓨팅 및 호스팅', + pt: 'Computação e Hospedagem', + 'pt-BR': 'Computação e Hospedagem', + 'pt-PT': 'Computação e Alojamento', + ru: 'Вычисления и хостинг', + tr: 'Hesaplama ve Barındırma', + uk: 'Обчислення та хостинг', + 'zh-CN': '计算与托管', + }, + items: [ + { label: "Docker", slug: "integrations/compute/docker" }, + { label: "Kubernetes", slug: "integrations/compute/kubernetes" } + ] + }, { label: 'Data & databases', collapsed: true, @@ -713,8 +740,9 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ }, items: [ { label: 'Apache Kafka', slug: 'integrations/messaging/apache-kafka' }, - { label: 'RabbitMQ', slug: 'integrations/messaging/rabbitmq' }, + { label: 'LavinMQ', slug: 'integrations/messaging/lavinmq' }, { label: 'NATS', slug: 'integrations/messaging/nats' }, + { label: 'RabbitMQ', slug: 'integrations/messaging/rabbitmq' }, ] }, { @@ -819,6 +847,8 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ }, items: [ { label: "Data API Builder", slug: "integrations/devtools/dab" }, + { label: "Dev Tunnels", slug: "integrations/devtools/dev-tunnels" }, + { label: "MailPit", slug: "integrations/devtools/mailpit" }, { label: "SQL Database Projects", slug: "integrations/devtools/sql-projects" }, ] } diff --git a/src/frontend/src/content/docs/integrations/compute/docker.mdx b/src/frontend/src/content/docs/integrations/compute/docker.mdx new file mode 100644 index 000000000..9a5b62682 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/compute/docker.mdx @@ -0,0 +1,10 @@ +--- +title: Docker integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/compute/kubernetes.mdx b/src/frontend/src/content/docs/integrations/compute/kubernetes.mdx new file mode 100644 index 000000000..157366496 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/compute/kubernetes.mdx @@ -0,0 +1,10 @@ +--- +title: Docker integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx new file mode 100644 index 000000000..c8f3468a1 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/devtools/dev-tunnels.mdx @@ -0,0 +1,10 @@ +--- +title: Dev Tunnels integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + \ No newline at end of file diff --git a/src/frontend/src/content/docs/integrations/devtools/mailpit.mdx b/src/frontend/src/content/docs/integrations/devtools/mailpit.mdx new file mode 100644 index 000000000..0965f5f41 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/devtools/mailpit.mdx @@ -0,0 +1,10 @@ +--- +title: MailPit integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + diff --git a/src/frontend/src/content/docs/integrations/messaging/lavinmq.mdx b/src/frontend/src/content/docs/integrations/messaging/lavinmq.mdx new file mode 100644 index 000000000..491417516 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/messaging/lavinmq.mdx @@ -0,0 +1,10 @@ +--- +title: LavinMQ integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + \ No newline at end of file diff --git a/src/frontend/src/data/integration-docs.json b/src/frontend/src/data/integration-docs.json index 1a53a4eff..16596cd89 100644 --- a/src/frontend/src/data/integration-docs.json +++ b/src/frontend/src/data/integration-docs.json @@ -450,5 +450,29 @@ { "match": "yarp", "href": "/integrations/reverse-proxies/yarp/" + }, + { + "match": "Aspire.Hosting.Docker", + "href": "/integrations/compute/docker/" + }, + { + "match": "docker", + "href": "/integrations/compute/docker/" + }, + { + "match": "Aspire.Hosting.Kubernetes", + "href": "/integrations/compute/kubernetes/" + }, + { + "match": "kubernetes", + "href": "/integrations/compute/kubernetes/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.MailPit", + "href": "/integrations/compute/kubernetes/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.LavinMQ", + "href": "/integrations/messaging/lavinmq/" } ] \ No newline at end of file From a9506f1425698d9e8f36aa53a875a6c30573f6a4 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 13:33:19 -0600 Subject: [PATCH 11/18] Add KurrentDB and Orleans integration documentation - Created KurrentDB integration documentation at src/frontend/src/content/docs/integrations/databases/kurrentdb.mdx - Created Orleans integration documentation at src/frontend/src/content/docs/integrations/frameworks/orleans.mdx --- src/frontend/scripts/update-integrations.js | 1 + src/frontend/sidebar.topics.ts | 4 +- .../src/assets/icons/kurrent-icon.png | Bin 0 -> 44444 bytes .../src/assets/icons/kurrent-light-icon.png | Bin 0 -> 42429 bytes .../src/components/IntegrationGrid.astro | 8 + .../docs/integrations/databases/kurrentdb.mdx | 10 + .../docs/integrations/frameworks/orleans.mdx | 10 + src/frontend/src/data/integration-docs.json | 186 ++---------------- 8 files changed, 45 insertions(+), 174 deletions(-) create mode 100644 src/frontend/src/assets/icons/kurrent-icon.png create mode 100644 src/frontend/src/assets/icons/kurrent-light-icon.png create mode 100644 src/frontend/src/content/docs/integrations/databases/kurrentdb.mdx create mode 100644 src/frontend/src/content/docs/integrations/frameworks/orleans.mdx diff --git a/src/frontend/scripts/update-integrations.js b/src/frontend/scripts/update-integrations.js index 8a74dc8ed..b1fc89a9f 100644 --- a/src/frontend/scripts/update-integrations.js +++ b/src/frontend/scripts/update-integrations.js @@ -10,6 +10,7 @@ const API_QUERIES = [ const EXCLUDED_PACKAGES = [ 'Aspire.Hosting', 'Aspire.Hosting.Azure', + 'Aspire.Hosting.IncrementalMigration' ]; const OUTPUT_PATH = './src/data/aspire-integrations.json'; diff --git a/src/frontend/sidebar.topics.ts b/src/frontend/sidebar.topics.ts index 5c428093f..22eedfdbf 100644 --- a/src/frontend/sidebar.topics.ts +++ b/src/frontend/sidebar.topics.ts @@ -672,6 +672,7 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ }, items: [ { label: "Elasticsearch", slug: "integrations/databases/elasticsearch" }, { label: "EventStore", slug: "integrations/databases/eventstore" }, + { label: "KurrentDB", slug: "integrations/databases/kurrentdb" }, { label: "Meilisearch", slug: "integrations/databases/meilisearch" }, { label: "Milvus", slug: "integrations/databases/milvus" }, { label: "MongoDB", slug: "integrations/databases/mongodb" }, @@ -680,8 +681,8 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: "PostgreSQL", slug: "integrations/databases/postgres" }, { label: "Qdrant", slug: "integrations/databases/qdrant" }, { label: "RavenDB", slug: "integrations/databases/ravendb" }, + { label: "SQL Server", slug: "integrations/databases/sql-server" }, { label: "SQLite", slug: "integrations/databases/sqlite" }, - { label: "SQL Server", slug: "integrations/databases/sql-server" } ] }, { @@ -712,6 +713,7 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ { label: 'Deno apps', slug: 'integrations/frameworks/deno-apps' }, { label: 'Go apps', slug: 'integrations/frameworks/go-apps' }, { label: 'Java', slug: 'integrations/frameworks/java' }, + { label: 'Orleans', slug: 'integrations/frameworks/orleans' }, { label: 'Python', slug: 'integrations/frameworks/python' }, { label: 'Rust', slug: 'integrations/frameworks/rust' }, ] diff --git a/src/frontend/src/assets/icons/kurrent-icon.png b/src/frontend/src/assets/icons/kurrent-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e49bfb08f8b5c334a10aeb6821abac4f3b31e736 GIT binary patch literal 44444 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 GpZPB|NHH-0 literal 0 HcmV?d00001 diff --git a/src/frontend/src/assets/icons/kurrent-light-icon.png b/src/frontend/src/assets/icons/kurrent-light-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff9694f9533db75dffb9f4d9c23c94003aaaa56 GIT binary patch literal 42429 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�)iaKc2nlzIkaP2cO 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 literal 0 HcmV?d00001 diff --git a/src/frontend/src/components/IntegrationGrid.astro b/src/frontend/src/components/IntegrationGrid.astro index 5fc5ae972..7b8c49b13 100644 --- a/src/frontend/src/components/IntegrationGrid.astro +++ b/src/frontend/src/components/IntegrationGrid.astro @@ -47,6 +47,8 @@ import gitHubLightIcon from "@assets/icons/github-light-icon.png"; import javaIcon from "@assets/icons/java-icon.png"; import k6Icon from "@assets/icons/k6-icon.png"; import kubernetesIcon from "@assets/icons/kubernetes.svg"; +import kurrentDbIcon from "@assets/icons/kurrent-icon.png"; +import kurrentDbLightIcon from "@assets/icons/kurrent-light-icon.png"; import lavinMqIcon from "@assets/icons/lavinmq-icon.png"; import mailpitIcon from "@assets/icons/mailpit-icon.svg"; import mailpitLightIcon from "@assets/icons/mailpit-light-icon.svg"; @@ -168,6 +170,12 @@ const icons = [ { meta: javaIcon, alt: "Java", search: "java" }, { meta: k6Icon, alt: "k6", search: "k6" }, { meta: kubernetesIcon, alt: "Kubernetes", search: "kubernetes" }, + { + meta: kurrentDbIcon, + alt: "KurrentDB", + search: "kurrentdb", + light: kurrentDbLightIcon, + }, { meta: lavinMqIcon, alt: "LavinMQ", search: "lavinmq" }, { meta: mailpitIcon, diff --git a/src/frontend/src/content/docs/integrations/databases/kurrentdb.mdx b/src/frontend/src/content/docs/integrations/databases/kurrentdb.mdx new file mode 100644 index 000000000..815e0b462 --- /dev/null +++ b/src/frontend/src/content/docs/integrations/databases/kurrentdb.mdx @@ -0,0 +1,10 @@ +--- +title: KurrentDB integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + \ No newline at end of file diff --git a/src/frontend/src/content/docs/integrations/frameworks/orleans.mdx b/src/frontend/src/content/docs/integrations/frameworks/orleans.mdx new file mode 100644 index 000000000..5da9ae31b --- /dev/null +++ b/src/frontend/src/content/docs/integrations/frameworks/orleans.mdx @@ -0,0 +1,10 @@ +--- +title: Orleans integration +--- + +import Placeholder from "@components/Placeholder.astro"; + + \ No newline at end of file diff --git a/src/frontend/src/data/integration-docs.json b/src/frontend/src/data/integration-docs.json index 16596cd89..12e691281 100644 --- a/src/frontend/src/data/integration-docs.json +++ b/src/frontend/src/data/integration-docs.json @@ -7,14 +7,6 @@ "match": "Aspire.Hosting.Kafka", "href": "/integrations/messaging/apache-kafka/" }, - { - "match": "apache-kafka", - "href": "/integrations/messaging/apache-kafka/" - }, - { - "match": "kafka", - "href": "/integrations/messaging/apache-kafka/" - }, { "match": "Aspire.NATS.Net", "href": "/integrations/messaging/nats/" @@ -23,10 +15,6 @@ "match": "Aspire.Hosting.Nats", "href": "/integrations/messaging/nats/" }, - { - "match": "nats", - "href": "/integrations/messaging/nats/" - }, { "match": "Aspire.RabbitMQ.Client", "href": "/integrations/messaging/rabbitmq/" @@ -43,10 +31,6 @@ "match": "CommunityToolkit.Aspire.MassTransit.RabbitMQ", "href": "/integrations/messaging/rabbitmq/" }, - { - "match": "rabbitmq", - "href": "/integrations/messaging/rabbitmq/" - }, { "match": "Aspire.Elastic.Clients.Elasticsearch", "href": "/integrations/databases/elasticsearch/" @@ -55,10 +39,6 @@ "match": "Aspire.Hosting.Elasticsearch", "href": "/integrations/databases/elasticsearch/" }, - { - "match": "elasticsearch", - "href": "/integrations/databases/elasticsearch/" - }, { "match": "CommunityToolkit.Aspire.EventStore", "href": "/integrations/databases/eventstore/" @@ -67,10 +47,6 @@ "match": "CommunityToolkit.Aspire.Hosting.EventStore", "href": "/integrations/databases/eventstore/" }, - { - "match": "eventstore", - "href": "/integrations/databases/eventstore/" - }, { "match": "CommunityToolkit.Aspire.Meilisearch", "href": "/integrations/databases/meilisearch/" @@ -79,10 +55,6 @@ "match": "CommunityToolkit.Aspire.Hosting.Meilisearch", "href": "/integrations/databases/meilisearch/" }, - { - "match": "meilisearch", - "href": "/integrations/databases/meilisearch/" - }, { "match": "Aspire.Milvus.Client", "href": "/integrations/databases/milvus/" @@ -91,10 +63,6 @@ "match": "Aspire.Hosting.Milvus", "href": "/integrations/databases/milvus/" }, - { - "match": "milvus", - "href": "/integrations/databases/milvus/" - }, { "match": "Aspire.MongoDB.Driver", "href": "/integrations/databases/mongodb/" @@ -107,10 +75,6 @@ "match": "Aspire.Hosting.MongoDB", "href": "/integrations/databases/mongodb/" }, - { - "match": "mongodb", - "href": "/integrations/databases/mongodb/" - }, { "match": "Aspire.MySqlConnector", "href": "/integrations/databases/mysql/" @@ -123,10 +87,6 @@ "match": "Aspire.Hosting.MySql", "href": "/integrations/databases/mysql/" }, - { - "match": "mysql", - "href": "/integrations/databases/mysql/" - }, { "match": "Aspire.Oracle.EntityFrameworkCore", "href": "/integrations/databases/oracle/" @@ -135,10 +95,6 @@ "match": "Aspire.Hosting.Oracle", "href": "/integrations/databases/oracle/" }, - { - "match": "oracle", - "href": "/integrations/databases/oracle/" - }, { "match": "Aspire.Npgsql", "href": "/integrations/databases/postgres/" @@ -163,14 +119,6 @@ "match": "Aspire.Hosting.Azure.PostgreSQL", "href": "/integrations/databases/postgres/" }, - { - "match": "postgres", - "href": "/integrations/databases/postgres/" - }, - { - "match": "postgresql", - "href": "/integrations/databases/postgres/" - }, { "match": "Aspire.Qdrant.Client", "href": "/integrations/databases/qdrant/" @@ -179,10 +127,6 @@ "match": "Aspire.Hosting.Qdrant", "href": "/integrations/databases/qdrant/" }, - { - "match": "qdrant", - "href": "/integrations/databases/qdrant/" - }, { "match": "CommunityToolkit.Aspire.RavenDB.Client", "href": "/integrations/databases/ravendb/" @@ -191,10 +135,6 @@ "match": "CommunityToolkit.Aspire.Hosting.RavenDB", "href": "/integrations/databases/ravendb/" }, - { - "match": "ravendb", - "href": "/integrations/databases/ravendb/" - }, { "match": "Aspire.Microsoft.Data.SqlClient", "href": "/integrations/databases/sql-server/" @@ -211,14 +151,6 @@ "match": "Aspire.Hosting.Azure.Sql", "href": "/integrations/databases/sql-server/" }, - { - "match": "sql-server", - "href": "/integrations/databases/sql-server/" - }, - { - "match": "sqlserver", - "href": "/integrations/databases/sql-server/" - }, { "match": "CommunityToolkit.Aspire.Microsoft.Data.Sqlite", "href": "/integrations/databases/sqlite/" @@ -231,34 +163,18 @@ "match": "CommunityToolkit.Aspire.Hosting.Sqlite", "href": "/integrations/databases/sqlite/" }, - { - "match": "sqlite", - "href": "/integrations/databases/sqlite/" - }, { "match": "Aspire.Hosting.Garnet", "href": "/integrations/caching/garnet/" }, - { - "match": "garnet", - "href": "/integrations/caching/garnet/" - }, { "match": "Aspire.StackExchange.Redis.DistributedCaching", "href": "/integrations/caching/redis-distributed/" }, - { - "match": "redis-distributed", - "href": "/integrations/caching/redis-distributed/" - }, { "match": "Aspire.StackExchange.Redis.OutputCaching", "href": "/integrations/caching/redis-output/" }, - { - "match": "redis-output", - "href": "/integrations/caching/redis-output/" - }, { "match": "Aspire.StackExchange.Redis", "href": "/integrations/caching/redis/" @@ -275,26 +191,14 @@ "match": "Aspire.Microsoft.Azure.StackExchangeRedis", "href": "/integrations/caching/redis/" }, - { - "match": "redis", - "href": "/integrations/caching/redis/" - }, { "match": "Aspire.Hosting.Valkey", "href": "/integrations/caching/valkey/" }, - { - "match": "valkey", - "href": "/integrations/caching/valkey/" - }, { "match": "Aspire.Hosting.GitHub.Models", "href": "/integrations/ai/github-models/" }, - { - "match": "github-models", - "href": "/integrations/ai/github-models/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Ollama", "href": "/integrations/ai/ollama/" @@ -303,10 +207,6 @@ "match": "CommunityToolkit.Aspire.OllamaSharp", "href": "/integrations/ai/ollama/" }, - { - "match": "ollama", - "href": "/integrations/ai/ollama/" - }, { "match": "Aspire.OpenAI", "href": "/integrations/ai/openai/" @@ -319,10 +219,6 @@ "match": "Aspire.Hosting.OpenAI", "href": "/integrations/ai/openai/" }, - { - "match": "openai", - "href": "/integrations/ai/openai/" - }, { "match": "Aspire.Seq", "href": "/integrations/observability/seq/" @@ -331,10 +227,6 @@ "match": "Aspire.Hosting.Seq", "href": "/integrations/observability/seq/" }, - { - "match": "seq", - "href": "/integrations/observability/seq/" - }, { "match": "Aspire.Keycloak.Authentication", "href": "/integrations/security/keycloak/" @@ -343,42 +235,18 @@ "match": "Aspire.Hosting.Keycloak", "href": "/integrations/security/keycloak/" }, - { - "match": "keycloak", - "href": "/integrations/security/keycloak/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder", "href": "/integrations/devtools/dab/" }, - { - "match": "dab", - "href": "/integrations/devtools/dab/" - }, - { - "match": "dataapibuilder", - "href": "/integrations/devtools/dab/" - }, { "match": "CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects", "href": "/integrations/devtools/sql-projects/" }, - { - "match": "sql-projects", - "href": "/integrations/devtools/sql-projects/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Bun", "href": "/integrations/frameworks/bun-apps/" }, - { - "match": "bun-apps", - "href": "/integrations/frameworks/bun-apps/" - }, - { - "match": "bun", - "href": "/integrations/frameworks/bun-apps/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Dapr", "href": "/integrations/frameworks/dapr/" @@ -387,32 +255,16 @@ "match": "CommunityToolkit.Aspire.Hosting.Azure.Dapr", "href": "/integrations/frameworks/dapr/" }, - { - "match": "dapr", - "href": "/integrations/frameworks/dapr/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Deno", "href": "/integrations/frameworks/deno-apps/" }, - { - "match": "deno-apps", - "href": "/integrations/frameworks/deno-apps/" - }, - { - "match": "deno", - "href": "/integrations/frameworks/deno-apps/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Golang", "href": "/integrations/frameworks/go-apps/" }, { - "match": "go-apps", - "href": "/integrations/frameworks/go-apps/" - }, - { - "match": "go", + "match": "gofeature", "href": "/integrations/frameworks/go-apps/" }, { @@ -423,50 +275,26 @@ "match": "CommunityToolkit.Aspire.Hosting.Java", "href": "/integrations/frameworks/java/" }, - { - "match": "java", - "href": "/integrations/frameworks/java/" - }, { "match": "Aspire.Hosting.Python", "href": "/integrations/frameworks/python/" }, - { - "match": "python", - "href": "/integrations/frameworks/python/" - }, { "match": "CommunityToolkit.Aspire.Hosting.Rust", "href": "/integrations/frameworks/rust/" }, - { - "match": "rust", - "href": "/integrations/frameworks/rust/" - }, { "match": "Aspire.Hosting.Yarp", "href": "/integrations/reverse-proxies/yarp/" }, - { - "match": "yarp", - "href": "/integrations/reverse-proxies/yarp/" - }, { "match": "Aspire.Hosting.Docker", "href": "/integrations/compute/docker/" }, - { - "match": "docker", - "href": "/integrations/compute/docker/" - }, { "match": "Aspire.Hosting.Kubernetes", "href": "/integrations/compute/kubernetes/" }, - { - "match": "kubernetes", - "href": "/integrations/compute/kubernetes/" - }, { "match": "CommunityToolkit.Aspire.Hosting.MailPit", "href": "/integrations/compute/kubernetes/" @@ -474,5 +302,17 @@ { "match": "CommunityToolkit.Aspire.Hosting.LavinMQ", "href": "/integrations/messaging/lavinmq/" + }, + { + "match": "Aspire.Hosting.Orleans", + "href": "/integrations/frameworks/orleans/" + }, + { + "match": "CommunityToolkit.Aspire.KurrentDB", + "href": "/integrations/database/kurrentdb/" + }, + { + "match": "CommunityToolkit.Aspire.Hosting.KurrentDB", + "href": "/integrations/database/kurrentdb/" } ] \ No newline at end of file From 605fc8211cfcb066bb15f7c8f569658ae2e2b58f Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:18:34 -0600 Subject: [PATCH 12/18] fix: Exclude 'Aspire.Cli' from integration packages --- src/frontend/scripts/update-integrations.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/scripts/update-integrations.js b/src/frontend/scripts/update-integrations.js index b1fc89a9f..06b61260a 100644 --- a/src/frontend/scripts/update-integrations.js +++ b/src/frontend/scripts/update-integrations.js @@ -8,6 +8,7 @@ const API_QUERIES = [ 'CommunityToolkit.Aspire', ]; const EXCLUDED_PACKAGES = [ + 'Aspire.Cli', 'Aspire.Hosting', 'Aspire.Hosting.Azure', 'Aspire.Hosting.IncrementalMigration' From 63dc2648621395874e195d1326fc5b79f7a91c8a Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:25:23 -0600 Subject: [PATCH 13/18] Update GitHub stats: Increment star counts for existing repos and add CommunityToolkit/Aspire --- src/frontend/scripts/update-github-stats.js | 3 +- .../content/docs/community/contributors.mdx | 7 + .../src/data/aspire-integrations.json | 523 ++++++++---------- src/frontend/src/data/github-stats.json | 12 +- 4 files changed, 254 insertions(+), 291 deletions(-) diff --git a/src/frontend/scripts/update-github-stats.js b/src/frontend/scripts/update-github-stats.js index 139998e7f..6e9de641c 100644 --- a/src/frontend/scripts/update-github-stats.js +++ b/src/frontend/scripts/update-github-stats.js @@ -3,7 +3,8 @@ import fetch from 'node-fetch'; const REPOS = [ 'dotnet/aspire', - 'dotnet/aspire-samples' + 'dotnet/aspire-samples', + 'CommunityToolkit/Aspire' ]; const OUTPUT_PATH = './src/data/github-stats.json'; diff --git a/src/frontend/src/content/docs/community/contributors.mdx b/src/frontend/src/content/docs/community/contributors.mdx index 42253dae3..e073701b8 100644 --- a/src/frontend/src/content/docs/community/contributors.mdx +++ b/src/frontend/src/content/docs/community/contributors.mdx @@ -44,6 +44,13 @@ Thank you to all the community members who have contributed to Aspire Samples! Y +## Aspire Community Toolkit contributors 🧰 + +For the community, by the community. The Aspire Community Toolkit grows through passionate contributors building extensions and enhancements for the ecosystem. Your contributions shape Aspire's future and empower developers worldwide. Join the journey and help craft a toolkit reflecting diverse needs and our shared innovative spirit. + + + + ## Aspire team 🤓

Made with 💜 at Microsoft...

diff --git a/src/frontend/src/data/aspire-integrations.json b/src/frontend/src/data/aspire-integrations.json index a735cb2bb..3bab21cfd 100644 --- a/src/frontend/src/data/aspire-integrations.json +++ b/src/frontend/src/data/aspire-integrations.json @@ -13,7 +13,7 @@ "azure", "ai" ], - "downloads": 3197, + "downloads": 3489, "version": "9.5.2-preview.1.25522.3" }, { @@ -31,7 +31,7 @@ "ai", "openai" ], - "downloads": 329366, + "downloads": 337169, "version": "9.5.2-preview.1.25522.3" }, { @@ -49,7 +49,7 @@ "tables", "table" ], - "downloads": 505944, + "downloads": 514871, "version": "9.5.2" }, { @@ -67,7 +67,7 @@ "eventhubs", "amqp" ], - "downloads": 170679, + "downloads": 179198, "version": "9.5.2" }, { @@ -85,7 +85,7 @@ "servicebus", "amqp" ], - "downloads": 460285, + "downloads": 474572, "version": "9.5.2" }, { @@ -104,7 +104,7 @@ "websocket", "pubsub" ], - "downloads": 21396, + "downloads": 21763, "version": "9.5.2" }, { @@ -124,7 +124,7 @@ "npgsql", "sql" ], - "downloads": 20688, + "downloads": 21725, "version": "9.5.2" }, { @@ -151,7 +151,7 @@ "npgsql", "sql" ], - "downloads": 43409, + "downloads": 46220, "version": "9.5.2" }, { @@ -168,7 +168,7 @@ "azure", "search" ], - "downloads": 128416, + "downloads": 132340, "version": "9.5.2" }, { @@ -186,7 +186,7 @@ "keyvault", "secrets" ], - "downloads": 436158, + "downloads": 450202, "version": "9.5.2" }, { @@ -205,7 +205,7 @@ "blobs", "blob" ], - "downloads": 1316162, + "downloads": 1353287, "version": "9.5.2" }, { @@ -224,19 +224,7 @@ "queue", "queues" ], - "downloads": 278666, - "version": "9.5.2" - }, - { - "title": "Aspire.Cli", - "description": "Command line tool for Aspire developers.", - "icon": "https://api.nuget.org/v3-flatcontainer/aspire.cli/9.5.2/icon", - "href": "https://www.nuget.org/packages/Aspire.Cli", - "tags": [ - "aspire", - "cli" - ], - "downloads": 61270, + "downloads": 287026, "version": "9.5.2" }, { @@ -252,7 +240,7 @@ "cloud", "kafka" ], - "downloads": 440434, + "downloads": 448968, "version": "9.5.2" }, { @@ -268,7 +256,7 @@ "cloud", "elasticsearch" ], - "downloads": 31170, + "downloads": 31673, "version": "9.5.0" }, { @@ -282,7 +270,7 @@ "hosting", "aws" ], - "downloads": 135508, + "downloads": 141310, "version": "9.3.0" }, { @@ -300,7 +288,7 @@ "aifoundry", "foundry" ], - "downloads": 3279, + "downloads": 3622, "version": "9.5.2-preview.1.25522.3" }, { @@ -314,7 +302,7 @@ "hosting", "azure" ], - "downloads": 104973, + "downloads": 108453, "version": "9.5.2" }, { @@ -328,7 +316,7 @@ "hosting", "azure" ], - "downloads": 183106, + "downloads": 191977, "version": "9.5.2" }, { @@ -342,7 +330,7 @@ "hosting", "azure" ], - "downloads": 278777, + "downloads": 286631, "version": "9.5.2" }, { @@ -357,7 +345,7 @@ "hosting", "azure" ], - "downloads": 5178, + "downloads": 5550, "version": "9.5.2-preview.1.25522.3" }, { @@ -376,7 +364,7 @@ "cognitive", "services" ], - "downloads": 322487, + "downloads": 330980, "version": "9.5.2" }, { @@ -392,7 +380,7 @@ "container", "registry" ], - "downloads": 7598, + "downloads": 8288, "version": "9.5.2-preview.1.25522.3" }, { @@ -406,7 +394,7 @@ "hosting", "azure" ], - "downloads": 316150, + "downloads": 327521, "version": "9.5.2" }, { @@ -421,7 +409,7 @@ "azure", "eventhubs" ], - "downloads": 88196, + "downloads": 92053, "version": "9.5.2" }, { @@ -436,7 +424,7 @@ "azure", "functions" ], - "downloads": 305050, + "downloads": 319997, "version": "9.5.2-preview.1.25522.3" }, { @@ -450,7 +438,7 @@ "hosting", "azure" ], - "downloads": 530001, + "downloads": 554345, "version": "9.5.2" }, { @@ -465,7 +453,7 @@ "azure", "kusto" ], - "downloads": 313, + "downloads": 329, "version": "9.5.2-preview.1.25522.3" }, { @@ -479,7 +467,7 @@ "hosting", "azure" ], - "downloads": 319421, + "downloads": 331919, "version": "9.5.2" }, { @@ -493,7 +481,7 @@ "hosting", "azure" ], - "downloads": 146889, + "downloads": 152404, "version": "9.5.2" }, { @@ -507,7 +495,7 @@ "hosting", "azure" ], - "downloads": 151046, + "downloads": 155814, "version": "9.5.2" }, { @@ -521,7 +509,7 @@ "hosting", "azure" ], - "downloads": 93935, + "downloads": 96454, "version": "9.5.2" }, { @@ -536,7 +524,7 @@ "azure", "servicebus" ], - "downloads": 333099, + "downloads": 349819, "version": "9.5.2" }, { @@ -550,7 +538,7 @@ "hosting", "azure" ], - "downloads": 58938, + "downloads": 60490, "version": "9.5.2" }, { @@ -564,7 +552,7 @@ "hosting", "azure" ], - "downloads": 211516, + "downloads": 218619, "version": "9.5.2" }, { @@ -578,7 +566,7 @@ "hosting", "azure" ], - "downloads": 1214153, + "downloads": 1261872, "version": "9.5.2" }, { @@ -595,7 +583,7 @@ "pubsub", "websocket" ], - "downloads": 14429, + "downloads": 14692, "version": "9.5.2" }, { @@ -608,7 +596,7 @@ "hosting", "devtunnels" ], - "downloads": 4266, + "downloads": 5484, "version": "9.5.2-preview.1.25522.3" }, { @@ -622,7 +610,7 @@ "docker", "docker-compose" ], - "downloads": 82355, + "downloads": 87352, "version": "9.5.2-preview.1.25522.3" }, { @@ -636,7 +624,7 @@ "hosting", "elasticsearch" ], - "downloads": 51183, + "downloads": 53556, "version": "9.5.0" }, { @@ -650,7 +638,7 @@ "hosting", "garnet" ], - "downloads": 31033, + "downloads": 31594, "version": "9.5.2" }, { @@ -666,18 +654,9 @@ "models", "ai" ], - "downloads": 1733, + "downloads": 1919, "version": "9.5.2-preview.1.25522.3" }, - { - "title": "Aspire.Hosting.IncrementalMigration", - "description": "Package Description", - "icon": "https://api.nuget.org/v3-flatcontainer/aspire.hosting.incrementalmigration/2.1.0-preview.1.25515.2/icon", - "href": "https://www.nuget.org/packages/Aspire.Hosting.IncrementalMigration", - "tags": [], - "downloads": 103, - "version": "2.1.0-preview.1.25515.2" - }, { "title": "Aspire.Hosting.Kafka", "description": "Kafka support for .NET Aspire.", @@ -689,7 +668,7 @@ "hosting", "kafka" ], - "downloads": 246329, + "downloads": 258459, "version": "9.5.2" }, { @@ -703,7 +682,7 @@ "hosting", "keycloak" ], - "downloads": 165410, + "downloads": 171763, "version": "9.5.2-preview.1.25522.3" }, { @@ -716,7 +695,7 @@ "hosting", "kubernetes" ], - "downloads": 14854, + "downloads": 15661, "version": "9.5.2-preview.1.25522.3" }, { @@ -733,7 +712,7 @@ "vector", "search" ], - "downloads": 4615, + "downloads": 4714, "version": "9.5.2" }, { @@ -747,7 +726,7 @@ "hosting", "mongodb" ], - "downloads": 222522, + "downloads": 229071, "version": "9.5.2" }, { @@ -761,7 +740,7 @@ "hosting", "mysql" ], - "downloads": 97188, + "downloads": 102333, "version": "9.5.2" }, { @@ -775,7 +754,7 @@ "hosting", "nats" ], - "downloads": 32318, + "downloads": 33885, "version": "9.5.2" }, { @@ -790,7 +769,7 @@ "node", "nodejs" ], - "downloads": 1408955, + "downloads": 1460936, "version": "9.5.2" }, { @@ -805,7 +784,7 @@ "openai", "ai" ], - "downloads": 1024, + "downloads": 1102, "version": "9.5.2-preview.1.25522.3" }, { @@ -820,7 +799,7 @@ "oracle", "sql" ], - "downloads": 18471, + "downloads": 19073, "version": "9.5.2" }, { @@ -834,7 +813,7 @@ "hosting", "orleans" ], - "downloads": 137633, + "downloads": 139903, "version": "9.5.2" }, { @@ -851,7 +830,7 @@ "npgsql", "sql" ], - "downloads": 1425406, + "downloads": 1478478, "version": "9.5.2" }, { @@ -865,7 +844,7 @@ "hosting", "python" ], - "downloads": 83547, + "downloads": 85544, "version": "9.5.2" }, { @@ -879,7 +858,7 @@ "hosting", "qdrant" ], - "downloads": 58826, + "downloads": 60194, "version": "9.5.2" }, { @@ -893,7 +872,7 @@ "hosting", "rabbitmq" ], - "downloads": 769368, + "downloads": 793581, "version": "9.5.2" }, { @@ -907,7 +886,7 @@ "hosting", "redis" ], - "downloads": 1606472, + "downloads": 1663750, "version": "9.5.2" }, { @@ -921,7 +900,7 @@ "hosting", "seq" ], - "downloads": 118156, + "downloads": 123714, "version": "9.5.2" }, { @@ -936,7 +915,7 @@ "sqlserver", "sql" ], - "downloads": 1669628, + "downloads": 1743271, "version": "9.5.2" }, { @@ -948,7 +927,7 @@ "aspire", "testing" ], - "downloads": 1770015, + "downloads": 1837402, "version": "9.5.2" }, { @@ -962,7 +941,7 @@ "hosting", "valkey" ], - "downloads": 94288, + "downloads": 97215, "version": "9.5.2" }, { @@ -977,7 +956,7 @@ "yarp", "reverse-proxy" ], - "downloads": 24462, + "downloads": 26601, "version": "9.5.2-preview.1.25522.3" }, { @@ -993,7 +972,7 @@ "cloud", "keycloak" ], - "downloads": 123909, + "downloads": 129310, "version": "9.5.2-preview.1.25522.3" }, { @@ -1002,7 +981,7 @@ "icon": "https://api.nuget.org/v3-flatcontainer/aspire.microsoft.aspnetcore.systemwebadapters/2.1.0-preview.1.25515.2/icon", "href": "https://www.nuget.org/packages/Aspire.Microsoft.AspNetCore.SystemWebAdapters", "tags": [], - "downloads": 104, + "downloads": 115, "version": "2.1.0-preview.1.25515.2" }, { @@ -1023,7 +1002,7 @@ "database", "db" ], - "downloads": 397178, + "downloads": 412583, "version": "9.5.2" }, { @@ -1041,7 +1020,7 @@ "redis", "cache" ], - "downloads": 1559, + "downloads": 2191, "version": "9.5.2-preview.1.25522.3" }, { @@ -1060,7 +1039,7 @@ "sqlserver", "sql" ], - "downloads": 360698, + "downloads": 373190, "version": "9.5.2" }, { @@ -1086,7 +1065,7 @@ "cosmos", "cosmosdb" ], - "downloads": 78433, + "downloads": 80481, "version": "9.5.2" }, { @@ -1111,7 +1090,7 @@ "sqlserver", "sql" ], - "downloads": 1769362, + "downloads": 1834379, "version": "9.5.2" }, { @@ -1129,7 +1108,7 @@ "configuration", "appconfiguration" ], - "downloads": 20133, + "downloads": 22412, "version": "9.5.2-preview.1.25522.3" }, { @@ -1148,7 +1127,7 @@ "vector", "search" ], - "downloads": 3149, + "downloads": 3189, "version": "9.5.2-preview.1.25522.3" }, { @@ -1166,7 +1145,7 @@ "database", "mongodb" ], - "downloads": 152139, + "downloads": 154369, "version": "9.5.2" }, { @@ -1184,7 +1163,7 @@ "database", "mongodb" ], - "downloads": 49731, + "downloads": 52925, "version": "9.5.2" }, { @@ -1204,7 +1183,7 @@ "mysql", "sql" ], - "downloads": 45398, + "downloads": 45999, "version": "9.5.2" }, { @@ -1221,7 +1200,7 @@ "nats", "messaging" ], - "downloads": 36697, + "downloads": 38273, "version": "9.5.2" }, { @@ -1242,7 +1221,7 @@ "npgsql", "sql" ], - "downloads": 611395, + "downloads": 626761, "version": "9.5.2" }, { @@ -1269,7 +1248,7 @@ "npgsql", "sql" ], - "downloads": 1983044, + "downloads": 2030276, "version": "9.5.2" }, { @@ -1286,7 +1265,7 @@ "ai", "openai" ], - "downloads": 231852, + "downloads": 239538, "version": "9.5.2-preview.1.25522.3" }, { @@ -1311,7 +1290,7 @@ "oracle", "sql" ], - "downloads": 72283, + "downloads": 73296, "version": "9.5.2" }, { @@ -1337,7 +1316,7 @@ "mysql", "sql" ], - "downloads": 153540, + "downloads": 157442, "version": "9.5.2" }, { @@ -1353,7 +1332,7 @@ "cloud", "qdrant" ], - "downloads": 39975, + "downloads": 41067, "version": "9.5.2" }, { @@ -1372,7 +1351,7 @@ "rabbitmq", "amqp" ], - "downloads": 426467, + "downloads": 435729, "version": "9.5.2" }, { @@ -1391,7 +1370,7 @@ "rabbitmq", "amqp" ], - "downloads": 154412, + "downloads": 163281, "version": "9.5.2" }, { @@ -1407,7 +1386,7 @@ "cloud", "seq" ], - "downloads": 217890, + "downloads": 223809, "version": "9.5.2" }, { @@ -1425,7 +1404,7 @@ "caching", "redis" ], - "downloads": 2108894, + "downloads": 2164498, "version": "9.5.2" }, { @@ -1445,7 +1424,7 @@ "distributedcache", "redis" ], - "downloads": 976973, + "downloads": 1007367, "version": "9.5.2" }, { @@ -1466,29 +1445,13 @@ "outputcache", "redis" ], - "downloads": 385993, + "downloads": 393953, "version": "9.5.2" }, - { - "title": "CommunityToolkit.Aspire.EventStore", - "description": "An EventStore client that integrates with Aspire, including health checks, logging, and telemetry.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.eventstore/9.8.1-beta.424/icon", - "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.EventStore", - "tags": [ - "aspire", - "integration", - "communitytoolkit", - "dotnetcommunitytoolkit", - "eventstore", - "client" - ], - "downloads": 34650, - "version": "9.8.0" - }, { "title": "CommunityToolkit.Aspire.GoFeatureFlag", "description": "A GO Feature Flag client that integrates with Aspire, including health checks, logging, and telemetry.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.gofeatureflag/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.gofeatureflag/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.GoFeatureFlag", "tags": [ "aspire", @@ -1498,13 +1461,13 @@ "gofeatureflag", "client" ], - "downloads": 27307, - "version": "9.8.0" + "downloads": 28103, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.ActiveMQ", "description": "A .NET Aspire hosting package for hosting ActiveMQ.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.activemq/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.activemq/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.ActiveMQ", "tags": [ "aspire", @@ -1514,13 +1477,13 @@ "hosting", "activemq" ], - "downloads": 35989, - "version": "9.8.0" + "downloads": 37168, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Adminer", "description": "A .NET Aspire integration for adminer hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.adminer/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.adminer/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Adminer", "tags": [ "aspire", @@ -1530,13 +1493,13 @@ "hosting", "adminer" ], - "downloads": 33661, - "version": "9.8.0" + "downloads": 35504, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Azure.Dapr", "description": "Azure Dapr support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dapr/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dapr/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Azure.Dapr", "tags": [ "aspire", @@ -1547,13 +1510,13 @@ "dapr", "azure" ], - "downloads": 27610, - "version": "9.8.0" + "downloads": 28504, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis", "description": "Package Description", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dapr.redis/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dapr.redis/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis", "tags": [ "aspire", @@ -1561,13 +1524,13 @@ "communitytoolkit", "dotnetcommunitytoolkit" ], - "downloads": 24119, - "version": "9.8.0" + "downloads": 25002, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder", "description": "An Aspire component leveraging the Data API Builder container.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dataapibuilder/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.azure.dataapibuilder/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder", "tags": [ "aspire", @@ -1578,8 +1541,8 @@ "dataapibuilder", "hosting" ], - "downloads": 38572, - "version": "9.8.0" + "downloads": 39611, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Azure.StaticWebApps", @@ -1595,13 +1558,13 @@ "staticwebapps", "hosting" ], - "downloads": 31538, + "downloads": 32235, "version": "9.4.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Bun", "description": "A .NET Aspire integration for hosting Bun apps.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.bun/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.bun/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Bun", "tags": [ "aspire", @@ -1612,13 +1575,13 @@ "bun", "javascript" ], - "downloads": 39799, - "version": "9.8.0" + "downloads": 41113, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Dapr", "description": "Dapr support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.dapr/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.dapr/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Dapr", "tags": [ "aspire", @@ -1628,8 +1591,8 @@ "hosting", "dapr" ], - "downloads": 169761, - "version": "9.8.0" + "downloads": 177883, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Dapr.AzureRedis", @@ -1642,13 +1605,13 @@ "communitytoolkit", "dotnetcommunitytoolkit" ], - "downloads": 2457, + "downloads": 2533, "version": "9.1.1-beta.197" }, { "title": "CommunityToolkit.Aspire.Hosting.DbGate", "description": "A .NET Aspire integration for dbgate hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.dbgate/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.dbgate/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.DbGate", "tags": [ "aspire", @@ -1658,13 +1621,13 @@ "hosting", "dbgate" ], - "downloads": 58591, - "version": "9.8.0" + "downloads": 60947, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Deno", "description": "A .NET Aspire for hosting Deno apps.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.deno/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.deno/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Deno", "tags": [ "aspire", @@ -1674,29 +1637,13 @@ "hosting", "deno" ], - "downloads": 38017, - "version": "9.8.0" - }, - { - "title": "CommunityToolkit.Aspire.Hosting.EventStore", - "description": "EventStore support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.eventstore/9.8.1-beta.424/icon", - "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.EventStore", - "tags": [ - "aspire", - "integration", - "communitytoolkit", - "dotnetcommunitytoolkit", - "hosting", - "eventstore" - ], - "downloads": 36454, - "version": "9.8.0" + "downloads": 39111, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Flagd", "description": "flagd is a feature flag evaluation engine. Think of it as a ready-made, open source, OpenFeature-compliant feature flag backend system.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.flagd/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.flagd/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Flagd", "tags": [ "aspire", @@ -1708,13 +1655,13 @@ "feature-flags", "openfeature" ], - "downloads": 0, - "version": "9.8.1-beta.424" + "downloads": 219, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.GoFeatureFlag", "description": "GO Feature Flag support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.gofeatureflag/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.gofeatureflag/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.GoFeatureFlag", "tags": [ "aspire", @@ -1724,13 +1671,13 @@ "hosting", "gofeatureflag" ], - "downloads": 26534, - "version": "9.8.0" + "downloads": 27282, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Golang", "description": "A .NET Aspire for hosting Golang apps.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.golang/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.golang/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Golang", "tags": [ "aspire", @@ -1740,13 +1687,13 @@ "hosting", "golang" ], - "downloads": 44648, - "version": "9.8.0" + "downloads": 46337, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Java", "description": "A .NET Aspire for hosting Java apps using either the Java executable or container image.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.java/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.java/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Java", "tags": [ "aspire", @@ -1756,13 +1703,13 @@ "hosting", "java" ], - "downloads": 40822, - "version": "9.8.0" + "downloads": 41993, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.k6", "description": "Granafa k6 support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.k6/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.k6/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.k6", "tags": [ "aspire", @@ -1772,13 +1719,13 @@ "hosting", "k6" ], - "downloads": 20497, - "version": "9.8.0" + "downloads": 21336, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Keycloak.Extensions", "description": ".NET Aspire hosting extensions for Keycloak (includes PostgreSQL integration).", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.keycloak.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.keycloak.extensions/9.9.0-preview.1.251103-2303/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions", "tags": [ "aspire", @@ -1790,13 +1737,13 @@ "hosting", "extensions" ], - "downloads": 0, - "version": "9.8.1-beta.424" + "downloads": 199, + "version": "9.9.0-preview.1.251103-2303" }, { "title": "CommunityToolkit.Aspire.Hosting.KurrentDB", "description": "KurrentDB support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.kurrentdb/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.kurrentdb/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.KurrentDB", "tags": [ "aspire", @@ -1806,13 +1753,13 @@ "hosting", "kurrentdb" ], - "downloads": 0, - "version": "9.8.1-beta.424" + "downloads": 190, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.LavinMQ", "description": "A .NET Aspire hosting package for hosting LavinMQ.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.lavinmq/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.lavinmq/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.LavinMQ", "tags": [ "aspire", @@ -1822,13 +1769,13 @@ "hosting", "lavinmq" ], - "downloads": 24857, - "version": "9.8.0" + "downloads": 25570, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.MailPit", "description": "An Aspire component leveraging the MailPit container.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mailpit/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mailpit/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.MailPit", "tags": [ "aspire", @@ -1839,13 +1786,13 @@ "smtp", "hosting" ], - "downloads": 49691, - "version": "9.8.0" + "downloads": 52778, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.McpInspector", "description": "An Aspire to run the MCP Inspector against a MCP server.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mcpinspector/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mcpinspector/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.McpInspector", "tags": [ "aspire", @@ -1857,13 +1804,13 @@ "debugging", "hosting" ], - "downloads": 11386, - "version": "9.8.0" + "downloads": 12314, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Meilisearch", "description": "Meilisearch support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.meilisearch/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.meilisearch/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Meilisearch", "tags": [ "aspire", @@ -1873,13 +1820,13 @@ "hosting", "meilisearch" ], - "downloads": 40201, - "version": "9.8.0" + "downloads": 41261, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Minio", "description": "A .NET Aspire hosting integration for MinIO", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.minio/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.minio/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Minio", "tags": [ "aspire", @@ -1891,13 +1838,13 @@ "cloud", "storage" ], - "downloads": 17451, - "version": "9.8.0" + "downloads": 19089, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.MongoDB.Extensions", "description": "A .NET Aspire integration for extending mongodb hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mongodb.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mongodb.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions", "tags": [ "aspire", @@ -1908,13 +1855,13 @@ "mongodb", "dbgate" ], - "downloads": 31430, - "version": "9.8.0" + "downloads": 32224, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.MySql.Extensions", "description": "A .NET Aspire integration for extending mysql hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mysql.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.mysql.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.MySql.Extensions", "tags": [ "aspire", @@ -1925,13 +1872,13 @@ "mysql", "dbgate" ], - "downloads": 12692, - "version": "9.8.0" + "downloads": 13326, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Ngrok", "description": "An Aspire integration for exposing hosted applications via secure, public URLs using ngrok.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ngrok/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ngrok/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Ngrok", "tags": [ "aspire", @@ -1942,13 +1889,13 @@ "ngrok", "tunnels" ], - "downloads": 37091, - "version": "9.8.0" + "downloads": 38268, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.NodeJS.Extensions", "description": "A .NET Aspire for hosting NodeJS apps using Vite, Yarn, PNPM, or NPM.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.nodejs.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.nodejs.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions", "tags": [ "aspire", @@ -1962,13 +1909,13 @@ "pnpm", "npm" ], - "downloads": 217829, - "version": "9.8.0" + "downloads": 230271, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Ollama", "description": "An Aspire integration leveraging the Ollama container with support for downloading a model on startup.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ollama/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ollama/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Ollama", "tags": [ "aspire", @@ -1979,13 +1926,13 @@ "ollama", "ai" ], - "downloads": 135850, - "version": "9.8.0" + "downloads": 140307, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector", "description": "An Aspire component to add an OpenTelemetry Collector into the OTLP pipeline", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.opentelemetrycollector/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.opentelemetrycollector/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector", "tags": [ "aspire", @@ -1995,13 +1942,13 @@ "opentelemetry", "observability" ], - "downloads": 3786, - "version": "9.8.0" + "downloads": 4367, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.PapercutSmtp", "description": "An Aspire component leveraging Papercut SMTP container.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.papercutsmtp/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.papercutsmtp/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.PapercutSmtp", "tags": [ "aspire", @@ -2012,13 +1959,13 @@ "smtp", "hosting" ], - "downloads": 28907, - "version": "9.8.0" + "downloads": 29765, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions", "description": "A .NET Aspire integration for extending postgres hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.postgresql.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.postgresql.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions", "tags": [ "aspire", @@ -2029,13 +1976,13 @@ "postgres", "dbgate" ], - "downloads": 36195, - "version": "9.8.0" + "downloads": 37423, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.PowerShell", "description": "Run powershell scripts in-process with your Aspire AppHost, injecting aspire resources and/or object instances as variables, using the command lines tools of your choice like azure cli, azd, or any other terminal tools.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.powershell/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.powershell/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.PowerShell", "tags": [ "aspire", @@ -2048,13 +1995,13 @@ "script", "hosting" ], - "downloads": 10588, - "version": "9.8.0" + "downloads": 11539, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Python.Extensions", "description": "A .NET Aspire integration for hosting Uvicorn apps.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.python.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.python.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Python.Extensions", "tags": [ "aspire", @@ -2065,13 +2012,13 @@ "uvicorn", "python" ], - "downloads": 38783, - "version": "9.8.0" + "downloads": 39781, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.RavenDB", "description": "An Aspire integration leveraging the RavenDB container.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ravendb/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.ravendb/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.RavenDB", "tags": [ "aspire", @@ -2081,13 +2028,13 @@ "hosting", "ravendb" ], - "downloads": 33241, - "version": "9.8.0" + "downloads": 34216, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Redis.Extensions", "description": "A .NET Aspire integration for extending redis hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.redis.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.redis.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Redis.Extensions", "tags": [ "aspire", @@ -2098,13 +2045,13 @@ "redis", "dbgate" ], - "downloads": 32627, - "version": "9.8.0" + "downloads": 33728, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Rust", "description": "A .NET Aspire integration for hosting Rust apps.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.rust/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.rust/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Rust", "tags": [ "aspire", @@ -2114,13 +2061,13 @@ "hosting", "rust" ], - "downloads": 35426, - "version": "9.8.0" + "downloads": 36481, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Solr", "description": "A .NET Aspire hosting integration for Apache Solr.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.solr/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.solr/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Solr", "tags": [ "aspire", @@ -2128,13 +2075,13 @@ "communitytoolkit", "dotnetcommunitytoolkit" ], - "downloads": 3188, - "version": "9.8.0" + "downloads": 3728, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects", "description": "An Aspire hosting integration capable of deploying SQL Server Database Projects as part of your AppHost.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqldatabaseprojects/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqldatabaseprojects/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects", "tags": [ "aspire", @@ -2145,13 +2092,13 @@ "sql", "sqlproj" ], - "downloads": 75447, - "version": "9.8.0" + "downloads": 78859, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.Sqlite", "description": "An Aspire hosting integration for providing a Sqlite database connection.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqlite/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqlite/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.Sqlite", "tags": [ "aspire", @@ -2162,13 +2109,13 @@ "sql", "sqlite" ], - "downloads": 37914, - "version": "9.8.0" + "downloads": 39187, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions", "description": "A .NET Aspire integration for extending sqlserver hosting.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqlserver.extensions/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.sqlserver.extensions/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions", "tags": [ "aspire", @@ -2179,13 +2126,13 @@ "sqlserver", "dbgate" ], - "downloads": 40521, - "version": "9.8.0" + "downloads": 42383, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Hosting.SurrealDb", "description": "SurrealDB support for .NET Aspire.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.surrealdb/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.hosting.surrealdb/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Hosting.SurrealDb", "tags": [ "aspire", @@ -2195,13 +2142,13 @@ "hosting", "surrealdb" ], - "downloads": 7820, - "version": "9.8.0" + "downloads": 8377, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.KurrentDB", "description": "A KurrentDB client that integrates with Aspire, including health checks, logging, and telemetry.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.kurrentdb/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.kurrentdb/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.KurrentDB", "tags": [ "aspire", @@ -2211,13 +2158,13 @@ "kurrentdb", "client" ], - "downloads": 0, - "version": "9.8.1-beta.424" + "downloads": 200, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.MassTransit.RabbitMQ", "description": "A .NET Aspire client integration for MassTransit RabbitMQ.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.masstransit.rabbitmq/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.masstransit.rabbitmq/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.MassTransit.RabbitMQ", "tags": [ "aspire", @@ -2228,13 +2175,13 @@ "masstransit", "rabbitmq" ], - "downloads": 39873, - "version": "9.8.0" + "downloads": 41120, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Meilisearch", "description": "A Meilisearch client that integrates with Aspire, including health checks, logging, and telemetry.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.meilisearch/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.meilisearch/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Meilisearch", "tags": [ "aspire", @@ -2244,13 +2191,13 @@ "meilisearch", "client" ], - "downloads": 44425, - "version": "9.8.0" + "downloads": 45497, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Microsoft.Data.Sqlite", "description": "An Aspire client integration for the Microsoft.Data.Sqlite.Core package.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.microsoft.data.sqlite/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.microsoft.data.sqlite/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Microsoft.Data.Sqlite", "tags": [ "aspire", @@ -2262,13 +2209,13 @@ "data", "ado.net" ], - "downloads": 30378, - "version": "9.8.0" + "downloads": 31217, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite", "description": "An Aspire client integration for the Microsoft.EntityFrameworkCore.Sqlite package.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.microsoft.entityframeworkcore.sqlite/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.microsoft.entityframeworkcore.sqlite/9.9.0-preview.1.251103-2303/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite", "tags": [ "aspire", @@ -2283,13 +2230,13 @@ "ef", "orm" ], - "downloads": 36828, + "downloads": 37907, "version": "9.7.2" }, { "title": "CommunityToolkit.Aspire.Minio.Client", "description": "A .NET Aspire client integration for MinIO", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.minio.client/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.minio.client/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.Minio.Client", "tags": [ "aspire", @@ -2301,13 +2248,13 @@ "cloud", "storage" ], - "downloads": 10672, - "version": "9.8.0" + "downloads": 11679, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.OllamaSharp", "description": "A .NET Aspire client integration for the OllamaSharp library.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.ollamasharp/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.ollamasharp/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.OllamaSharp", "tags": [ "aspire", @@ -2319,13 +2266,13 @@ "ollamasharp", "client" ], - "downloads": 150673, - "version": "9.8.0" + "downloads": 157416, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.RavenDB.Client", "description": "A .NET Aspire client integration for the RavenDB.Client library.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.ravendb.client/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.ravendb.client/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client", "tags": [ "aspire", @@ -2335,13 +2282,13 @@ "client", "ravendb" ], - "downloads": 35261, - "version": "9.8.0" + "downloads": 36390, + "version": "9.9.0" }, { "title": "CommunityToolkit.Aspire.SurrealDb", "description": "A SurrealDB client that integrates with Aspire, including health checks, logging, and telemetry.", - "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.surrealdb/9.8.1-beta.424/icon", + "icon": "https://api.nuget.org/v3-flatcontainer/communitytoolkit.aspire.surrealdb/9.9.0/icon", "href": "https://www.nuget.org/packages/CommunityToolkit.Aspire.SurrealDb", "tags": [ "aspire", @@ -2351,7 +2298,7 @@ "surrealdb", "client" ], - "downloads": 7791, - "version": "9.8.0" + "downloads": 8334, + "version": "9.9.0" } ] \ No newline at end of file diff --git a/src/frontend/src/data/github-stats.json b/src/frontend/src/data/github-stats.json index f12a44b72..a95ae8bbb 100644 --- a/src/frontend/src/data/github-stats.json +++ b/src/frontend/src/data/github-stats.json @@ -1,7 +1,7 @@ [ { "name": "dotnet/aspire", - "stars": 4963, + "stars": 4994, "description": "Aspire is the tool for code-first, extensible, observable dev and deploy.", "license": "https://github.com/dotnet/aspire/blob/main/LICENSE.TXT", "licenseName": "MIT License", @@ -9,10 +9,18 @@ }, { "name": "dotnet/aspire-samples", - "stars": 1036, + "stars": 1041, "description": null, "license": "https://github.com/dotnet/aspire-samples/blob/main/LICENSE", "licenseName": "MIT License", "repo": "https://github.com/dotnet/aspire-samples" + }, + { + "name": "CommunityToolkit/Aspire", + "stars": 503, + "description": "A community project with additional components and extensions for .NET Aspire", + "license": "https://github.com/CommunityToolkit/Aspire/blob/main/LICENSE", + "licenseName": "MIT License", + "repo": "https://github.com/CommunityToolkit/Aspire" } ] \ No newline at end of file From 010cd386d3e7b5b1a81a0345194a4c41cbc1e39e Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:39:09 -0600 Subject: [PATCH 14/18] fix: Update PivotSelector component class and clean up Contributors documentation --- src/frontend/src/components/PivotSelector.astro | 2 +- src/frontend/src/content/docs/community/contributors.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/components/PivotSelector.astro b/src/frontend/src/components/PivotSelector.astro index fb86942c4..43ec0e834 100644 --- a/src/frontend/src/components/PivotSelector.astro +++ b/src/frontend/src/components/PivotSelector.astro @@ -14,7 +14,7 @@ type Props = { const { options, key, title } = Astro.props; --- -
+
{title &&
{title}
}
{ diff --git a/src/frontend/src/content/docs/community/contributors.mdx b/src/frontend/src/content/docs/community/contributors.mdx index e073701b8..d808e4087 100644 --- a/src/frontend/src/content/docs/community/contributors.mdx +++ b/src/frontend/src/content/docs/community/contributors.mdx @@ -53,6 +53,6 @@ For the community, by the community. The Aspire Community Toolkit grows through ## Aspire team 🤓 -

Made with 💜 at Microsoft...

+Made with 💜 at Microsoft... \ No newline at end of file From ff443fd780356c8d44d29c146411b9c72d61eb2c Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:41:09 -0600 Subject: [PATCH 15/18] fix: Update pivot title color for dark and light themes --- src/frontend/src/components/PivotSelector.astro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/components/PivotSelector.astro b/src/frontend/src/components/PivotSelector.astro index 43ec0e834..b2bcad0da 100644 --- a/src/frontend/src/components/PivotSelector.astro +++ b/src/frontend/src/components/PivotSelector.astro @@ -41,7 +41,7 @@ const { options, key, title } = Astro.props; } .pivot-title { - color: var(--sl-color-text); + color: var(--aspire-color-secondary); font-size: var(--sl-text-lg); margin-bottom: 0.75rem; } @@ -103,6 +103,9 @@ const { options, key, title } = Astro.props; } :root[data-theme="light"] { + .pivot-title { + color: var(--sl-color-text); + } .pivot-selector button.active { background: var(--aspire-color-primary); } From a829277a37b883de49345fcc986fb67d9be1e034 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:49:22 -0600 Subject: [PATCH 16/18] Replace dbGate icon with SVG format and add light variant; remove old JPEG icon --- .../src/assets/icons/dbgate-icon.jpeg | Bin 19124 -> 0 bytes src/frontend/src/assets/icons/dbgate-icon.svg | 28 ++++++++++++++++++ .../src/assets/icons/dbgate-light-icon.svg | 28 ++++++++++++++++++ .../src/components/IntegrationGrid.astro | 9 ++++-- 4 files changed, 62 insertions(+), 3 deletions(-) delete mode 100644 src/frontend/src/assets/icons/dbgate-icon.jpeg create mode 100644 src/frontend/src/assets/icons/dbgate-icon.svg create mode 100644 src/frontend/src/assets/icons/dbgate-light-icon.svg diff --git a/src/frontend/src/assets/icons/dbgate-icon.jpeg b/src/frontend/src/assets/icons/dbgate-icon.jpeg deleted file mode 100644 index 820fb26382f86e0a828f5a6db9648ce25add890e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19124 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 LD-<%~QOEz;RT_H` diff --git a/src/frontend/src/assets/icons/dbgate-icon.svg b/src/frontend/src/assets/icons/dbgate-icon.svg new file mode 100644 index 000000000..5857fecdc --- /dev/null +++ b/src/frontend/src/assets/icons/dbgate-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/frontend/src/assets/icons/dbgate-light-icon.svg b/src/frontend/src/assets/icons/dbgate-light-icon.svg new file mode 100644 index 000000000..4bc61d2c8 --- /dev/null +++ b/src/frontend/src/assets/icons/dbgate-light-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/frontend/src/components/IntegrationGrid.astro b/src/frontend/src/components/IntegrationGrid.astro index 7b8c49b13..48fc3a7bb 100644 --- a/src/frontend/src/components/IntegrationGrid.astro +++ b/src/frontend/src/components/IntegrationGrid.astro @@ -33,7 +33,8 @@ import bunIcon from "@assets/icons/bun-icon.png"; import dataApiBuilderIcon from "@assets/icons/data-api-builder-icon.png"; import daprIcon from "@assets/icons/dapr-icon.png"; import daprLightIcon from "@assets/icons/dapr-light-icon.png"; -import dbGateIcon from "@assets/icons/dbgate-icon.jpeg"; +import dbGateIcon from "@assets/icons/dbgate-icon.svg"; +import dbGateLightIcon from "@assets/icons/dbgate-light-icon.svg"; import denoIcon from "@assets/icons/deno-icon.png"; import denoLightIcon from "@assets/icons/deno-light-icon.png"; import dockerIcon from "@assets/icons/docker.svg"; @@ -159,7 +160,7 @@ const icons = [ search: "dataapibuilder", }, { meta: daprIcon, alt: "Dapr", search: "dapr", light: daprLightIcon }, - { meta: dbGateIcon, alt: "DbGate", search: "dbgate" }, + { meta: dbGateIcon, alt: "DbGate", search: "dbgate", light: dbGateLightIcon }, { meta: denoIcon, alt: "Deno", search: "deno", light: denoLightIcon }, { meta: dockerIcon, alt: "Docker", search: "docker" }, { meta: elasticIcon, alt: "Elasticsearch", search: "elasticsearch" }, @@ -235,7 +236,9 @@ const icons = [ ]; // Shuffle icons and split into 3 rows -const shuffledIcons = [...icons].sort(() => Math.random() - 0.5); +import { shuffle } from "@utils/helpers.js"; + +const shuffledIcons = shuffle(icons); const iconsPerRow = Math.ceil(shuffledIcons.length / 3); const row1 = shuffledIcons.slice(0, iconsPerRow); const row2 = shuffledIcons.slice(iconsPerRow, iconsPerRow * 2); From 1f51b430838f5afe9bef08a5750ea5fb956116d0 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 14:54:15 -0600 Subject: [PATCH 17/18] fix: Remove outdated install script redirects from redirects.mjs --- src/frontend/redirects.mjs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/frontend/redirects.mjs b/src/frontend/redirects.mjs index 14eabf439..b29475b10 100644 --- a/src/frontend/redirects.mjs +++ b/src/frontend/redirects.mjs @@ -1,8 +1,4 @@ export const redirects = { - // Install scripts - '/install.sh': 'https://aka.ms/aspire/get/install.sh', - '/install.ps1': 'https://aka.ms/aspire/get/install.ps1', - // Docs redirects '/integrations/postgres': '/integrations/databases/postgres/', '/integrations/rabbitmq/': '/integrations/messaging/rabbitmq/', From c83c470f6f8e361c9a3ca34c4529ea0589cbe8f2 Mon Sep 17 00:00:00 2001 From: David Pine Date: Tue, 4 Nov 2025 15:19:04 -0600 Subject: [PATCH 18/18] Refactor code structure for improved readability and maintainability --- src/frontend/sidebar.topics.ts | 4 +- .../src/content/docs/whats-new/aspire-13.mdx | 24 +- .../src/content/docs/whats-new/aspire-9-5.mdx | 1705 +++++++++++++++++ .../src/data/aspire-integrations.json | 264 +-- 4 files changed, 1852 insertions(+), 145 deletions(-) create mode 100644 src/frontend/src/content/docs/whats-new/aspire-9-5.mdx diff --git a/src/frontend/sidebar.topics.ts b/src/frontend/sidebar.topics.ts index 22eedfdbf..747f7e1a0 100644 --- a/src/frontend/sidebar.topics.ts +++ b/src/frontend/sidebar.topics.ts @@ -44,9 +44,7 @@ export const sidebarTopics: StarlightSidebarTopicsUserConfig = [ }, slug: 'get-started/welcome' }, { - label: "What's new", collapsed: true, items: [ - { label: 'Aspire 13', slug: 'whats-new/aspire-13' } - ], + label: "What's new", collapsed: true, autogenerate: { directory: 'whats-new' }, translations: { da: 'Hvad er nyt', de: 'Was gibt es Neues', diff --git a/src/frontend/src/content/docs/whats-new/aspire-13.mdx b/src/frontend/src/content/docs/whats-new/aspire-13.mdx index e9a8d35c8..a1e235310 100644 --- a/src/frontend/src/content/docs/whats-new/aspire-13.mdx +++ b/src/frontend/src/content/docs/whats-new/aspire-13.mdx @@ -1,6 +1,10 @@ --- title: What's new in Aspire 13 description: Learn what's new in Aspire 13. +sidebar: + label: Aspire 13.0 + order: 1 +draft: true tableOfContents: minHeadingLevel: 2 maxHeadingLevel: 2 @@ -28,7 +32,7 @@ import { Icon } from '@astrojs/starlight/components'; If you have feedback, questions, or want to contribute to Aspire, collaborate with us on [ GitHub](https://github.com/dotnet/aspire) or join us on our new [ Discord](https://aka.ms/aspire-discord) to chat with the team and other community members. -## 🆙 Upgrade to Aspire 13.0 +## Upgrade to Aspire 13.0 > [!IMPORTANT] > Aspire 13.0 is a major version release with breaking changes. Please review the [Breaking changes](#-breaking-changes) section before upgrading. @@ -66,7 +70,7 @@ The easiest way to upgrade to Aspire 13.0 is using the `aspire update` command: > [!NOTE] > If you're upgrading from Aspire 8.x, follow [the upgrade guide](../get-started/upgrade-to-aspire-9.md) first to upgrade to 9.x, then upgrade to 13.0. -## 🌐 Aspire as a polyglot platform +## Aspire as a polyglot platform Aspire 13 marks a transformative shift from a .NET-centric orchestration tool to a truly **polyglot cloud-native application platform**. Python and JavaScript are now first-class citizens alongside .NET, with comprehensive support for development, debugging, and deployment workflows. @@ -380,7 +384,7 @@ var nodeApp = builder.AddJavaScriptApp("frontend", "./frontend") This feature makes Aspire's service discovery mechanism accessible to any programming language, not just .NET applications with service discovery libraries. -## 🛠️ CLI and tooling +## CLI and tooling ### aspire init command @@ -492,7 +496,7 @@ The automatic SDK installation feature provides: When enabled, this preview feature can improve the onboarding experience for new team members and CI/CD environments. -## 😲 Major new features +## Major new features ### Distributed Application Pipeline @@ -814,7 +818,7 @@ Certificate management features include: These features enable production-ready certificate handling in development, testing, and deployment scenarios. -## 📦 Integrations +## Integrations Aspire 13.0 introduces new integration packages that expand platform support. @@ -847,7 +851,7 @@ MAUI integration features: This enables a complete mobile + cloud development experience where you can run and debug your mobile app alongside your backend services in a single Aspire project. -## 📊 Dashboard enhancements +## Dashboard enhancements ### Model Context Protocol (MCP) server @@ -940,7 +944,7 @@ This enables richer documentation, better error messages, and improved AI assist - **Tooltip details**: Last run time in tooltips - **Unhealthy state display**: Clear visualization of unhealthy resources -## 🖥️ App model enhancements +## App model enhancements ### C# app support @@ -1177,7 +1181,7 @@ Event system features: - `TryCreateResourceBuilder` for safely attempting resource builder creation with failure handling - Returns false instead of throwing when resource builder creation fails -## 🚀 Deployment improvements +## Deployment improvements ### Deployment pipeline reimplementation @@ -1360,7 +1364,7 @@ This eliminates repetitive prompts and makes iterative deployments faster. Your The state is stored in your local user profile, making it seamless to work across multiple Aspire projects with different Azure configurations. -## ☁️ Azure +## Azure ### Azure tenant selection @@ -1434,7 +1438,7 @@ builder.AddAzureAppServiceEnvironment("env") This enables elastic scale on the App Service Plan, capping at 10 workers following Azure best practices. Without automatic scaling, each app service scales independently with per-site scaling. -## ⚠️ Breaking changes +## Breaking changes ### Removed APIs diff --git a/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx b/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx new file mode 100644 index 000000000..5c286f77b --- /dev/null +++ b/src/frontend/src/content/docs/whats-new/aspire-9-5.mdx @@ -0,0 +1,1705 @@ +--- +title: What's new in Aspire 9.5 +description: Learn what's new in Aspire 9.5. +sidebar: + label: Aspire 9.5 + order: 10 +tableOfContents: + minHeadingLevel: 2 + maxHeadingLevel: 2 +--- + +📢 Aspire 9.5 is the next minor version release of Aspire. It supports: + +- .NET 8.0 Long Term Support (LTS) +- .NET 9.0 Standard Term Support (STS) +- .NET 10.0 Preview 6 + +import { Icon } from '@astrojs/starlight/components'; + +If you have feedback, questions, or want to contribute to Aspire, collaborate with us on [ GitHub](https://github.com/dotnet/aspire) or join us on our new [ Discord](https://aka.ms/aspire-discord) to chat with the team and other community members. + +It's important to note that Aspire releases out-of-band from .NET releases. While major versions of Aspire align with major .NET versions, minor versions are released more frequently. For more information on .NET and Aspire version support, see: + +- [.NET support policy](https://dotnet.microsoft.com/platform/support/policy): Definitions for LTS and STS. +- [Aspire support policy](https://dotnet.microsoft.com/platform/support/policy/aspire): Important unique product lifecycle details. + +## Upgrade to Aspire 9.5 + +> [!NOTE] Try out the new update command! +> Aspire 9.5 brings a new preview CLI command - [aspire update](#new-aspire-update-command-preview) - that can update your AppHost and its packages for you. Get the latest CLI if you want to try and give us feedback about it on [GitHub](https://github.com/dotnet/aspire/issues)! + +Moving between minor releases of Aspire is simple: + +1. Get the latest release of the Aspire CLI: + + ```bash + # Bash + curl -sSL https://aspire.dev/install.sh | bash + + # PowerShell + iex "& { $(irm https://aspire.dev/install.ps1) }" + ``` + +1. In your AppHost project file (that is, _MyApp.AppHost.csproj_), update the [📦 Aspire.AppHost.Sdk](https://www.nuget.org/packages/Aspire.AppHost.Sdk) NuGet package to version `9.5.0`: + + ```xml + + ``` + + For more information, see [Aspire SDK](https://learn.microsoft.com/dotnet/aspire/fundamentals/dotnet-aspire-sdk). + +1. Check for any NuGet package updates, either using the NuGet Package Manager in Visual Studio or the **Update NuGet Package** command from C# Dev Kit in VS Code. + +1. Update to the latest [Aspire templates](https://learn.microsoft.com/dotnet/aspire/fundamentals/aspire-sdk-templates) by running the following .NET command line: + + ```bash + dotnet new install Aspire.ProjectTemplates + ``` + + > [!NOTE] + > The `dotnet new install` command will update existing Aspire templates to the latest version if they are already installed. + +If your AppHost project file doesn't have the `Aspire.AppHost.Sdk` reference, you might still be using Aspire 8. To upgrade to 9, follow [the upgrade guide](https://learn.microsoft.com/dotnet/aspire/get-started/upgrade-to-aspire-9). + +## CLI and tooling + +### Channel-aware `aspire add` & templating + +You can now pick packages from different channels or versions during `aspire add` (#10801, #10899). Additionally, friendly name generation is now more flexible for searching packages. + +### New `aspire update` command (preview) + +The new `aspire update` command helps you keep your Aspire projects current by automatically detecting and updating outdated packages and templates. + +```bash +# Analyze and update out-of-date Aspire packages & templates +aspire update +``` + +**Features:** +- **Automated package detection**: Finds outdated Aspire NuGet packages while respecting channel configurations +- **Diamond dependency resolution**: Intelligently handles complex dependency graphs without duplicate updates (#11145) +- **Enhanced reporting**: Colorized output with detailed summary of changes (#11148) +- **Channel awareness**: Respects your configured Aspire channel (preview, stable, etc.) +- **Safe updates**: Validates package compatibility before applying changes + +> [!IMPORTANT] +> 🧪 **Preview Feature**: The `aspire update` command is in preview and may change before general availability. + +### Enhanced markdown and styling support + +Extended markdown rendering support (#10815) with improved developer experience: + +- **Code fences** with syntax highlighting for better readability +- **Rich text formatting** including emphasis, bold, and inline code +- **Structured lists** with bullet points and numbering +- **Safe markup escaping** to prevent XSS and rendering issues (#10462) +- Purple styling for default values in prompts (#10474) + +### File-based AppHost support in preview + +Aspire 9.5 introduces infrastructure for .NET 10's new file-based apps feature, meaning you only need 1 file - and no project file! - for your Aspire apphost. The new capabilities are currently behind a feature flag that elevates the minimum .NET SDK requirement to prepare for upcoming file-based app execution scenarios. + +```bash +# Enable single-file AppHost support (requires .NET 10.0.100 RC1+) +aspire config set features.singlefileAppHostEnabled true +``` + +**SDK version requirements:** +- **Default (flag disabled)**: Requires .NET SDK 9.0.302 or later +- **Feature enabled**: Requires .NET SDK 10.0.100 RC1 or later +- **Override support**: Manual SDK version overrides continue to work with highest precedence + +### SSH Remote support for port forwarding + +Version 9.5 adds first-class support for SSH Remote development environments, extending automatic port forwarding configuration to VS Code SSH Remote scenarios alongside existing Devcontainer and Codespaces support. + +**Features:** +- **Automatic environment detection**: Detects SSH Remote scenarios via `VSCODE_IPC_HOOK_CLI` and `SSH_CONNECTION` environment variables +- **Seamless port forwarding**: Automatically configures VS Code settings for Aspire application endpoints +- **Consistent developer experience**: Matches existing behavior for Devcontainers and Codespaces +- **No configuration required**: Works out-of-the-box when using VS Code SSH Remote extension + +SSH Remote environments are automatically detected when both environment variables are present: + +```bash +# SSH Remote environment variables (automatically set) +export SSH_CONNECTION="192.168.1.1 12345 192.168.1.2 22" +export VSCODE_IPC_HOOK_CLI="/path/to/vscode/hook" + +# Aspire automatically detects and configures port forwarding +dotnet run --project MyApp.AppHost +``` + +Perfect for remote development scenarios: +- **Remote server development**: Working on a remote Linux server via SSH +- **Cloud development environments**: Using cloud-based development VMs +- **Team development servers**: Shared development environments accessed via SSH +- **Cross-platform development**: Developing on remote machines with different OS + +The SSH Remote support follows the exact same patterns as existing Devcontainer and Codespaces integration, ensuring a consistent experience across all VS Code remote development scenarios. Port forwarding settings are automatically written to `.vscode-server/data/Machine/settings.json` when SSH Remote environments are detected. + +### `aspire exec` command enhancements + +The `aspire exec` command allows you to execute commands within the context of your Aspire application environment, inheriting environment variables and configuration from your app model resources. + +Building on the 9.4 preview, version 9.5 adds several key improvements: + +- `--workdir` (`-w`) flag to run commands inside a specific working directory (#10912) +- Fail-fast argument validation with clearer error messages (#10606) +- Improved help and usage text for better developer experience (#10598) + +#### Basic usage examples + +```bash +# Execute database migrations with environment variables from your app model +aspire exec --resource my-api -- dotnet ef database update + +# Run commands in a specific working directory +aspire exec --resource worker --workdir /app/tools -- dotnet run + +# Wait for resource to start before executing command +aspire exec --start-resource my-worker -- npm run build +``` + +#### Command syntax + +- Use `--resource` to execute immediately when AppHost starts +- Use `--start-resource` to wait for the resource to be running first +- Use `--workdir` to specify the working directory for the command +- Use `--` to separate aspire options from the command to execute + +> [!IMPORTANT] +> 🧪 **Feature Flag**: The `aspire exec` command requires explicit enablement with: +> +> ```bash +> aspire config set features.execCommandEnabled true +> ``` + +### Other tweaks + +- Relative path included in AppHost status messages + TUI dashboard (#11132) +- Clean Spectre Console debug logging with reduced noise (#11125) +- Directory safety check for `aspire new` (#10496) and consistent template inputs (#10444, #10508) +- Refactored NuGet prefetch architecture (#11120) reducing UI lag during `aspire new` on macOS (#11069) and enabling command-aware caching. Temporary NuGet config improvements ensure wildcard mappings (#10894). +- Context-sensitive completion messages for publish/deploy (#10501) +- Markdown-to-Spectre converter foundation reuse (#10815) +- Interaction answer typing change (`object`) for future extensibility (#10480) +- Improved CTRL+C message and experience + +> The `aspire exec` and `aspire update` commands remain in preview behind feature flags; behavior may change in a subsequent release. + +## Dashboard enhancements + +### Deep-linked telemetry navigation + +The dashboard now provides seamless navigation between different telemetry views with interactive elements in property grids. Trace IDs, span IDs, resource names, and log levels become clickable buttons for one-click navigation (#10648). + +- **Trace IDs**: Click to view the complete distributed trace +- **Span IDs**: Navigate directly to specific trace spans +- **Resource names**: Jump to resource-specific telemetry views +- **Log levels**: Filter logs by severity level instantly + +This eliminates the need to manually copy/paste identifiers between different dashboard views, making debugging and monitoring much more efficient. + +### Multi-resource console logs + +A new "All" option in the console logs view streams logs from every running resource simultaneously (#10981). + +**Features:** +- **Unified log stream**: See logs from all resources in chronological order +- **Color-coded prefixes**: Each resource gets a deterministic color for easy identification +- **Configurable timestamps**: Separate timestamp preference to reduce noise +- **Real-time updates**: Live streaming of log events across your application + +**Example log output:** + +```text +[api INF] Application starting up +[postgres INF] Database system is ready to accept connections +[redis INF] Server initialized, ready to accept connections +[api INF] Connected to database successfully +``` + +### Custom resource icons + +Resources can specify custom icons using `WithIconName()` for better visual identification in dashboard views (#10760). + +```csharp +var postgres = builder.AddPostgres("database") + .WithIconName("database"); + +var redis = builder.AddRedis("cache") + .WithIconName("memory"); + +var api = builder.AddProject("api") + .WithIconName("web-app"); +``` + +**Icon variant options:** + +```csharp +// Available variants: Regular (outline) or Filled (solid, default) +var database = builder.AddPostgres("db") + .WithIconName("database", ApplicationModel.IconVariant.Regular); + +var api = builder.AddProject("api") + .WithIconName("web-app", ApplicationModel.IconVariant.Filled); +``` + +> [!NOTE] +> The default icon variant is `Filled` if not specified. + +This helps teams quickly identify different types of resources in complex applications with many services. Custom resource icons now also apply to project & container resources via unified annotation, providing consistent visual identification across all resource types. + +### Reverse proxy support + +The dashboard now properly handles reverse proxy scenarios with explicit forwarded header mapping when enabled. This fixes common issues with authentication redirects and URL generation behind proxies like YARP (#10388). + +```bash +# Enable forwarded headers processing +export ASPIRE_DASHBOARD_FORWARDEDHEADERS_ENABLED=true +``` + +**Supported scenarios:** +- **OpenID Connect authentication** works correctly behind reverse proxies +- **URL generation** respects the original client request scheme and host +- **Limited header processing** for security - only Host and X-Forwarded-Proto are processed +- **YARP integration** and other reverse proxy solutions + +This is particularly useful for deployment scenarios where the dashboard is accessed through a load balancer or reverse proxy. + +### Improved mobile experience + +The mobile and desktop experience has been redesigned with better responsive layouts and improved usability across all dashboard pages (#10407). + +- **Responsive toolbars**: Automatically adapt to screen size +- **Touch-friendly controls**: Larger targets for mobile interaction +- **Optimized layouts**: Better use of screen real estate on smaller devices +- **Consistent navigation**: Unified experience across desktop and mobile + +### Enhanced resource management + +Several improvements to resource management and debugging capabilities: + +**Resource organization:** +- **Sub-menu organization**: Resource action menus now use sub-menus to prevent overflow on complex applications (#10869) +- **Launch profile details**: Project resources now show their associated launch profile for easier debugging (#10906) +- **Improved navigation**: Better resource selection and navigation handling (#10848) +- **Launch profile localization**: Launch profile localization and model surfaced in dashboard resource details ([#10906](https://github.com/dotnet/aspire/pull/10906)) + +**Debugging enhancements:** +- **Direct launch profile access**: Quick access to the launch configuration used for each project +- **Resource state visibility**: Clearer indication of resource status and health +- **Action grouping**: Related resource actions are logically grouped for better discoverability + +### Container runtime notifications + +Smart notifications appear when Docker/Podman is installed but unhealthy, with automatic dismissal when runtime recovers (#11008). This provides immediate feedback when your container runtime needs attention, helping diagnose startup issues faster. + +### UI improvements + +- Error spans use consistent error styling (#10742) +- Better default icons for parameters and services (#10762) +- Improved navigation reliability (#10848) +- Enhanced port parsing (#10884) +- Message truncation for long log entries (#10882) +- Optional log line wrapping (#10271) +- Improved text visualizer dialog (#10964) + +### Trace performance & integration + +- Optimized trace detail page rendering (#10308) +- Embedded log entries within trace spans (#10281) +- Better span timing calculations (#10310) + +### Localization & deployment + +- Comprehensive dashboard localization with consolidated resource files +- Launch profile support with localized display names (#10906) +- Forwarded headers support for proxy/container scenarios (#10388) + +### GenAI insights + +New dialog and UI components make GenAI interactions easier to inspect and understand (#11227, #11286). + +### Richer markdown rendering + +Enhanced markdown rendering with syntax highlighting and better code block handling improves readability of generated or diagnostic content (#11286). + +### Trace filtering + +New span type filter lets you focus on specific kinds of spans for faster investigation (#11262). + +### Trace detail improvements + +Expand/collapse all, clearer exemplars, added resource column, preserved root span visibility, and more reliable span linking (#9474, #11089, #11085, #11078, #10747). + +### Logging usability + +Cleaner unified All view, removed redundant None option, clearer error log styling (#11087, #10725, #10481). + +### Navigation & accessibility + +Better toolbar/menu overflow handling, improved keyboard navigation, semantic headings, mobile navigation scroll fixes (#10740, #10708, #10729, #11317, #10893, #9827). + +### Resource menus + +Streamlined resource action menus and clearer command labeling (#10869, #11328). + +### Runtime visibility + +Always shows the .NET runtime version and improves framework detection (#11330, #11095). + +## Integration changes and additions + +### OpenAI hosting integration + +The new `AddOpenAI` integration provides first-class support for modeling OpenAI endpoints and their associated models within your Aspire application graph. + +**Features:** +- **Single OpenAI endpoint** resource with child model resources using `AddModel` +- **Parameter-based API key** provisioning with `ParameterResource` support +- **Endpoint override** for local gateways, proxies, or self-hosted solutions +- **Resource referencing** so other projects automatically receive connection information + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var apiKey = builder.AddParameter("openai-api-key", secret: true); + +var openai = builder.AddOpenAI("openai") + .WithApiKey(apiKey) + .WithEndpoint("https://api.openai.com"); + +var chatModel = openai.AddModel("chat", "gpt-4o-mini"); + +var api = builder.AddProject("api") + .WithReference(chatModel); + +builder.Build().Run(); +``` + +**Local development scenario:** + +```csharp +// Use with local OpenAI-compatible services +var localOpenAI = builder.AddOpenAI("local-openai") + .WithApiKey(builder.AddParameter("local-api-key")) + .WithEndpoint("http://localhost:11434"); // Ollama or similar + +var localModel = localOpenAI.AddModel("local-chat", "llama3.2"); +``` + +### GitHub Models typed catalog + +Version 9.5 introduces a strongly-typed catalog for GitHub-hosted models, providing IntelliSense support and refactoring safety when working with AI models (#10986). + +**Benefits over string-based approach:** +- **Type safety**: Compile-time validation of model names +- **IntelliSense support**: Discover available models and providers +- **Refactoring safety**: Rename and find references work correctly +- **Up-to-date catalog**: Daily automation ensures new models are available (#11040) + +```csharp +// Before: String-based approach (error-prone) +var model = github.AddModel("chat", "gpt-4o-mini"); // Typos not caught + +// After: Typed catalog approach +var chatModel = github.AddModel("chat", GitHubModel.OpenAI.Gpt4oMini); +var claudeModel = github.AddModel("claude", GitHubModel.Anthropic.Claude3_5Sonnet); +var llamaModel = github.AddModel("llama", GitHubModel.Meta.Llama3_1_405B_Instruct); + +// IntelliSense shows all available models grouped by provider +var embeddingModel = github.AddModel("embeddings", GitHubModel.OpenAI.TextEmbedding3Large); +``` + +**Complete GitHub Models integration:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Configure GitHub Models with token +var githubToken = builder.AddParameter("github-token", secret: true); + +var github = builder.AddGitHubModels("github-models") + .WithToken(githubToken); + +// Add multiple model types with strong typing +var chatModel = github.AddModel("gpt4o", GitHubModel.OpenAI.Gpt4o); +var fastModel = github.AddModel("gpt4o-mini", GitHubModel.OpenAI.Gpt4oMini); +var claudeModel = github.AddModel("claude", GitHubModel.Anthropic.Claude3_5Sonnet); + +// Use in your applications +var aiService = builder.AddProject("ai-service") + .WithReference(chatModel) + .WithReference(fastModel) + .WithReference(claudeModel); + +builder.Build().Run(); +``` + +The typed catalog automatically updates daily, so newly published models on GitHub become available without waiting for an Aspire release. + +### Dev Tunnels hosting integration + +Aspire 9.5 introduces first-class support for Azure Dev Tunnels, enabling seamless integration of secure public tunnels for your applications during development and testing scenarios. + +**Features:** +- **Secure public tunnels**: Create public HTTPS endpoints for applications running locally +- **Automatic tunnel management**: Tunnels are created, configured, and cleaned up automatically +- **Private and anonymous tunnels**: Support for both authenticated private tunnels and public anonymous access +- **Development workflow integration**: Perfect for webhook testing, mobile app development, and external service integration + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add a basic Dev Tunnel resource (default: private access) +var tunnel = builder.AddDevTunnel("dev-tunnel"); + +// Add your web application +var webApp = builder.AddProject("webapp"); + +// Connect the tunnel to the web application endpoint +tunnel.WithReference(webApp.GetEndpoint("http")); + +builder.Build().Run(); +``` + +**Advanced tunnel configuration:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var api = builder.AddProject("api"); + +// Create a tunnel with custom options; choose anonymous OR keep private +var tunnel = builder.AddDevTunnel("api-tunnel", options: new DevTunnelOptions +{ + Description = "API development tunnel", + Labels = ["development", "api"] +}); + +// Uncomment to allow anonymous (public) access instead of private authenticated access +// tunnel.WithAnonymousAccess(); + +// Connect the tunnel to the API endpoint +tunnel.WithReference(api.GetEndpoint("https")); + +// Reference the tunnel from other resources +var webhookProcessor = builder.AddProject("webhook-processor") + .WithReference(api, tunnel); // Gets tunneled endpoint information + +builder.Build().Run(); +``` + +**Use cases:** + +**Webhook Development**: Test webhooks from external services (GitHub, Stripe, etc.) against your locally running API: + +```csharp +// Webhook API with public tunnel (anonymous access for external service callbacks) +var webhookApi = builder.AddProject("webhook-api"); + +var publicTunnel = builder.AddDevTunnel("webhook-tunnel") + .WithAnonymousAccess() + .WithReference(webhookApi.GetEndpoint("http")); +``` + +**Mobile App Testing**: Enable mobile devices to connect to your local development server: + +```csharp +// Mobile backend with private tunnel (authenticated access only) +var mobileBackend = builder.AddProject("mobile-backend"); + +var mobileTunnel = builder.AddDevTunnel("mobile-tunnel") + .WithReference(mobileBackend.GetEndpoint("http")); +``` + +The Dev Tunnels integration automatically handles Azure authentication, tunnel lifecycle management, and provides public or private URLs (depending on configuration) to connected resources, making it easy to expose local development services securely to external consumers. + +### YARP static files support + +Aspire 9.5 adds comprehensive static file serving capabilities to the YARP integration, enabling you to serve static assets directly from YARP alongside reverse proxy functionality. This is perfect for single-page applications, frontend assets, and hybrid scenarios where you need both static content and API proxying. + +**Features:** +- **Direct static file serving**: Serve HTML, CSS, JS, and other static assets from YARP +- **Flexible source options**: Bind mount local directories or use Docker multi-stage builds +- **Automatic configuration**: Simple API enables static files with minimal setup +- **Production ready**: Works in both development and publish scenarios + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Enable static file serving (serves from wwwroot folder) +var yarp = builder.AddYarp("gateway") + .WithStaticFiles(); + +builder.Build().Run(); +``` + +**Bind mount local directory:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Serve static files from local directory +var yarp = builder.AddYarp("static-gateway") + .WithStaticFiles("./static-content") + .WithConfiguration(gateway => + { + // Add API routes alongside static files + gateway.AddRoute("/api/{**catch-all}", backendService) + .WithTransformPathRemovePrefix("/api"); + }); + +builder.Build().Run(); +``` + +**Docker multi-stage build scenario:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Use Dockerfile to build and copy static assets +var frontend = builder.AddYarp("frontend") + .WithStaticFiles() + .WithDockerFile("../react-app"); + +builder.Build().Run(); +``` + +**Example Dockerfile for React app:** + +```dockerfile +# Stage 1: Build React app +FROM node:20 AS builder +WORKDIR /app +COPY . . +RUN npm install +RUN npm run build + +# Stage 2: Copy static files to YARP container +FROM mcr.microsoft.com/dotnet/nightly/yarp:2.3.0-preview.4 AS yarp +WORKDIR /app +COPY --from=builder /app/dist ./wwwroot +``` + +**Hybrid static + API gateway:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var backendApi = builder.AddProject("api"); +var authService = builder.AddProject("auth"); + +// YARP serves static files AND proxies API requests +var gateway = builder.AddYarp("app-gateway") + .WithStaticFiles("./frontend/dist") + .WithConfiguration(yarp => + { + // API routes + yarp.AddRoute("/api/{**catch-all}", backendApi) + .WithTransformPathRemovePrefix("/api"); + + // Auth routes + yarp.AddRoute("/auth/{**catch-all}", authService) + .WithTransformPathRemovePrefix("/auth"); + + // Static files are served for all other routes + }); + +builder.Build().Run(); +``` + +This feature enables modern web application architectures where YARP acts as both a reverse proxy for backend services and a static file server for frontend assets, providing a unified entry point for your distributed application. + +### Redis and RabbitMQ auto activation + +Redis and RabbitMQ connections now support auto activation to prevent startup deadlocks and improve application reliability. + +**Features:** +- **Eliminates blocking threads**: Connections are established proactively at startup rather than on first use +- **Prevents startup deadlocks**: Avoids synchronous connection establishment in dependency injection scenarios +- **Improves reliability**: Reduces first-request latency by pre-establishing connections +- **Configurable behavior**: Can be enabled or disabled per connection as needed + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Auto activation enabled by default for Redis +var redis = builder.AddRedis("cache"); + +// Use in applications - connection is already established +var api = builder.AddProject("api") + .WithReference(redis); + +builder.Build().Run(); +``` + +#### RabbitMQ auto activation configuration + +```csharp +// Application (not AppHost) code +var builder = Host.CreateApplicationBuilder(args); + +// Default: auto activation ENABLED (no extra configuration required) +builder.AddRabbitMQClient("messaging"); + +// --- OR --- Opt out of auto activation (connection will be created lazily) +// builder.AddRabbitMQClient("messaging", settings => +// { +// settings.DisableAutoActivation = true; // disable auto activation +// }); + +var app = builder.Build(); +app.Run(); +``` + +### Redis client builder pattern + +Aspire 9.5 introduces a new Redis client builder pattern that provides a fluent, type-safe approach to configuring Redis clients with integrated support for distributed caching, output caching, and Azure authentication. + +**Features:** + +- **Fluent configuration**: Chain multiple Redis features like distributed caching, output caching, and Azure authentication +- **Type-safe builders**: `AspireRedisClientBuilder` provides compile-time safety and IntelliSense +- **Integrated Azure authentication**: Seamless Azure AD/Entra ID authentication with `WithAzureAuthentication` +- **Service composition**: Build complex Redis configurations with multiple features in a single call chain + +#### Basic Redis client builder usage + +```csharp +var builder = Host.CreateApplicationBuilder(args); + +builder.AddRedisClientBuilder("cache") + .WithDistributedCache() + .WithOutputCache(); + +var app = builder.Build(); +app.Run(); +``` + +**Azure authentication integration:** + +#### Azure authentication integration + +```csharp +// Azure authentication integration (application code) +var builder = Host.CreateApplicationBuilder(args); + +builder.AddRedisClientBuilder("azure-redis") + .WithAzureAuthentication() // Uses default Azure credentials + .WithDistributedCache(options => + { + options.InstanceName = "MyApp"; + }); + +// Or with custom credentials +var credential = new DefaultAzureCredential(); +builder.AddRedisClientBuilder("azure-redis") + .WithAzureAuthentication(credential) + .WithOutputCache(); + +var app = builder.Build(); +app.Run(); +``` + +**Advanced Redis builder patterns:** + +#### Advanced Redis builder patterns + +```csharp +// Multiple Redis instances with different configurations (application code) +var builder = Host.CreateApplicationBuilder(args); + +// Cache-focused Redis instance +builder.AddRedisClientBuilder("cache") + .WithDistributedCache(options => + { + options.InstanceName = "MainCache"; + options.DefaultSlidingExpiration = TimeSpan.FromMinutes(30); + }); + +// Output cache Redis instance with Azure authentication +builder.AddKeyedRedisClientBuilder("output-cache") + .WithAzureAuthentication() + .WithOutputCache(); + +// Session Redis instance +builder.AddKeyedRedisClientBuilder("sessions") + .WithDistributedCache(options => + { + options.InstanceName = "Sessions"; + }); + +var app = builder.Build(); +app.Run(); +``` + +### Azure AI Foundry enhancements + +9.5 adds a generated, strongly-typed model catalog (`AIFoundryModel`) for IntelliSense + ref safety when creating deployments (PR #10986) and a daily automation that refreshes the catalog as new models appear in Azure AI Foundry (PR #11040). Sample apps and end-to-end tests now use these constants (PR #11039) instead of raw strings. The original Foundry hosting integration and local runtime support were introduced earlier (issue #9568); this release focuses on developer ergonomics and keeping model metadata current. + +Strongly-typed model catalog with IntelliSense support: + +```csharp +var aiFoundry = builder.AddAzureAIFoundry("ai-foundry"); + +// Strongly-typed model references +var gpt4 = aiFoundry.AddDeployment("gpt-4", AIFoundryModel.OpenAI.Gpt4); +var mistral = aiFoundry.AddDeployment("mistral", AIFoundryModel.MistralAi.MistralLarge2411); + +// Local on-device mode +var localFoundry = builder.AddAzureAIFoundry("local-ai") + .RunAsFoundryLocal(); +``` + +### Azure App Configuration emulator APIs + +Run emulators locally with full configuration support: + +```csharp +var appConfig = builder.AddAzureAppConfiguration("config") + .RunAsEmulator(emulator => emulator + .WithDataVolume("config-data") + .WithHostPort(8080)); +``` + +### Azure storage emulator improvements + +Updated Azurite to version 3.35.0, resolving health check issues that previously returned HTTP 400 responses (#10972). This improves the reliability of Azure Storage emulator health checks during development. + +### Broader Azure resource capability surfacing + +Several Azure hosting resource types now implement `IResourceWithEndpoints` enabling uniform endpoint discovery and waiting semantics: + +- `AzureAIFoundryResource` +- `AzureAppConfigurationResource` +- `AzureKeyVaultResource` +- `AzurePostgresFlexibleServerResource` +- `AzureRedisCacheResource` + +### Azure Redis Enterprise support + +Aspire 9.5 introduces first-class support for Azure Redis Enterprise, providing a high-performance, fully managed Redis service with enterprise-grade features. + +The new `AddAzureRedisEnterprise` extension method enables Redis Enterprise resource modeling: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add Azure Redis Enterprise resource +var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise"); + +// Use in your applications +var api = builder.AddProject("api") + .WithReference(redisEnterprise); + +builder.Build().Run(); +``` + +**Local development with container emulation:** + +```csharp +var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") + .RunAsContainer(container => container + .WithHostPort(6379)); +``` + +**Authentication options:** + +```csharp +// With access key authentication (default) +var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") + .WithAccessKeyAuthentication(); + +// With Key Vault integration for access keys +var keyVault = builder.AddAzureKeyVault("keyvault"); +var redisEnterprise = builder.AddAzureRedisEnterprise("redis-enterprise") + .WithAccessKeyAuthentication(keyVault); +``` + +Azure Redis Enterprise provides advanced caching capabilities with clustering, high availability, and enterprise security features while maintaining compatibility with the standard Redis APIs. + +### Azure resource reference properties + +New reference properties have been added to Azure PostgreSQL and Redis resources for custom connection string composition and individual component access (#11051, #11070). + +**AzurePostgresFlexibleServerResource enhancements:** + +Three new reference properties enable custom connection string composition: + +- **`HostName`** (`ReferenceExpression`): Returns PostgreSQL server hostname with port +- **`UserName`** (`ReferenceExpression?`): Returns username for password authentication (null for Entra ID) +- **`Password`** (`ReferenceExpression?`): Returns password for password authentication (null for Entra ID) + +```csharp +var postgres = builder.AddAzurePostgresFlexibleServer("database") + .WithPasswordAuthentication() + .RunAsContainer(); + +var db = postgres.AddDatabase("appdb"); + +// Custom JDBC connection string +var jdbc = ReferenceExpression.Create($"jdbc:postgresql://{postgres.Resource.HostName}/{db.Resource.DatabaseName}"); + +// Custom PostgreSQL connection string +var connectionString = ReferenceExpression.Create( + $"Host={postgres.Resource.HostName};Username={postgres.Resource.UserName};Password={postgres.Resource.Password};Database={db.Resource.DatabaseName}"); +``` + +**AzureRedisCacheResource enhancements:** + +Two new reference properties enable custom Redis connection scenarios: + +- **`HostName`** (`ReferenceExpression`): Returns Redis server hostname with port +- **`Password`** (`ReferenceExpression?`): Returns password when running as container (null in Azure mode) + +```csharp +var redis = builder.AddAzureRedis("cache") + .RunAsContainer(); + +// Custom Redis connection string +var customConnectionString = ReferenceExpression.Create($"{redis.Resource.HostName},password={redis.Resource.Password}"); + +// Access individual components +var hostName = redis.Resource.HostName; // e.g., "localhost:6379" +var password = redis.Resource.Password; // Available in container mode +``` + +### OTLP telemetry protocol selection + +Enhanced OpenTelemetry Protocol (OTLP) support with protocol selection capabilities, allowing you to choose between gRPC and HTTP protobuf transports for telemetry data. + +```csharp +// Available protocol types +public enum OtlpProtocol +{ + Grpc = 0, // Default: High performance, binary protocol + HttpProtobuf = 1 // Alternative: HTTP-based transport +} +``` + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Configure OTLP telemetry with specific protocol +var api = builder.AddProject("api") + .WithOtlpExporter(OtlpProtocol.HttpProtobuf); + +// Use default gRPC protocol (recommended for performance) +var worker = builder.AddProject("worker") + .WithOtlpExporter(); + +// Configure multiple services with different protocols +var frontend = builder.AddProject("frontend") + .WithOtlpExporter(OtlpProtocol.Grpc); + +builder.Build().Run(); +``` + +**When to use each protocol:** + +- **gRPC (default)**: Best performance, smaller payload size, ideal for production +- **HTTP Protobuf**: Better firewall compatibility, easier debugging, good for development + +### MySQL password improvements + +Enhanced and standardized password handling for MySQL resources: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Secure password parameter +var password = builder.AddParameter("mysql-password", secret: true); + +var mysql = builder.AddMySql("mysql") + .WithPassword(password); + +// Password can be updated during configuration +mysql.Resource.PasswordParameter = builder.AddParameter("new-mysql-password", secret: true); + +// Environment-specific passwords +var devPassword = builder.Configuration["ConnectionStrings:MySQL:Password"]; +if (!string.IsNullOrEmpty(devPassword)) +{ + mysql.WithPassword(devPassword); +} + +builder.Build().Run(); +``` + +## App model enhancements + +### Resource lifecycle events + +Aspire 9.5 introduces new resource lifecycle event APIs that allow you to register callbacks for when resources stop, providing better control over cleanup and coordination during application shutdown. + +The new `OnResourceStopped` extension method allows you to register callbacks that execute when a resource enters the stopped state: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var database = builder.AddPostgres("postgres", "mypostgres") + .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => + { + // Perform cleanup when the database stops + Console.WriteLine($"Database {resource.Name} has stopped"); + + // Log final metrics, backup data, etc. + await LogFinalMetrics(resource.Name); + }); + +var api = builder.AddProject("api") + .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => + { + // Graceful API shutdown handling + Console.WriteLine($"API service {resource.Name} is shutting down"); + await FlushPendingRequests(); + }) + .WithReference(database); + +builder.Build().Run(); +``` + +**Resource stopped event details:** + +The `ResourceStoppedEvent` provides information about the stopping event: + +```csharp +// Register detailed stopped event handler +var redis = builder.AddRedis("cache") + .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => + { + // Access event details + Console.WriteLine($"Resource: {resource.Name}"); + Console.WriteLine($"Event timestamp: {stoppedEvent.Timestamp}"); + Console.WriteLine($"Stopping reason: {stoppedEvent.Reason}"); + + // Perform async cleanup with cancellation support + await CleanupCacheConnections(cancellationToken); + }); +``` + +**Coordination with lifecycle management:** + +Resource stopped events work seamlessly with existing lifecycle features: + +```csharp +var database = builder.AddPostgres("postgres") + .OnResourceStopped(async (db, evt, ct) => + { + await BackupDatabase(db.Name, ct); + }); + +var worker = builder.AddProject("worker") + .WaitFor(database) // Wait for startup + .OnResourceStopped(async (svc, evt, ct) => + { + await CompleteInFlightJobs(ct); + }) + .WithReference(database); +``` + +New `ResourceStoppedEvent` provides lifecycle insight when resources shut down or fail ([#11103](https://github.com/dotnet/aspire/pull/11103)): + +```csharp +builder.AddProject("api") + .OnResourceStopped(async (resource, evt, ct) => + { + // Handle resource stopped event - log cleanup, notify other services, etc. + Console.WriteLine($"Resource {resource.Name} stopped with event: {evt.ResourceEvent}"); + await NotifyDependentServices(resource.Name, ct); + }); +``` + +### Context-based endpoint resolution + +**Breaking change**: Endpoint resolution in `WithEnvironment` callbacks now correctly resolves container hostnames instead of always using "localhost" (#8574). + +```csharp +var redis = builder.AddRedis("redis"); + +// Another container getting endpoint info from Redis container +var rabbitmq = builder.AddContainer("myapp", "mycontainerapp") + .WithEnvironment(context => + { + var endpoint = redis.GetEndpoint("tcp"); + var redisHost = endpoint.Property(EndpointProperty.Host); + var redisPort = endpoint.Property(EndpointProperty.Port); + + // Previously: redisHost would always resolve to "localhost" + // Now: redisHost correctly resolves to "redis" (container name) + context.EnvironmentVariables["REDIS_HOST"] = redisHost; + context.EnvironmentVariables["REDIS_PORT"] = redisPort; + }) + .WithReference(redis); +``` + +**What you need to review:** + +- **Container deployments**: Your apps will now receive correct container hostnames +- **Local development**: Localhost behavior preserved for non-containerized scenarios +- **Connection strings**: Automatic connection strings continue to work as expected +- **Manual environment**: Review custom `WithEnvironment` calls that assume localhost + +### HTTP health probes for resources + +Aspire 9.5 introduces comprehensive HTTP health probe support that allows you to configure startup, readiness, and liveness probes for your resources, providing better health monitoring and deployment coordination. + +**Features:** + +- **Multiple probe types**: Configure startup, readiness, and liveness probes independently +- **Flexible endpoint targeting**: Probe any HTTP endpoint with custom paths and configurations +- **Configurable timing**: Control probe intervals, timeouts, and failure thresholds +- **Kubernetes alignment**: Probe semantics align with Kubernetes health check concepts + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Add readiness probe to ensure service is ready before routing traffic +var api = builder.AddProject("api") + .WithHttpProbe(ProbeType.Readiness, "/health/ready"); + +// Add liveness probe to detect if service needs restart +var worker = builder.AddProject("worker") + .WithHttpProbe(ProbeType.Liveness, "/health/live"); + +builder.Build().Run(); +``` + +**Advanced probe configuration:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Comprehensive probe setup with custom timing +var api = builder.AddProject("api") + .WithHttpProbe( + type: ProbeType.Startup, + path: "/health/startup", + initialDelaySeconds: 30, // Wait 30s before first probe + periodSeconds: 10, // Probe every 10 seconds + timeoutSeconds: 5, // 5 second timeout per probe + failureThreshold: 5, // Consider failed after 5 failures + successThreshold: 1 // Consider healthy after 1 success + ); + +builder.Build().Run(); +``` + +**Multiple probe types for comprehensive monitoring:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var database = builder.AddPostgres("postgres"); + +// Service with complete probe coverage +var api = builder.AddProject("api") + // Startup probe: Ensures service starts successfully + .WithHttpProbe(ProbeType.Startup, "/health/startup", + initialDelaySeconds: 15, failureThreshold: 10) + + // Readiness probe: Determines when ready to receive traffic + .WithHttpProbe(ProbeType.Readiness, "/health/ready", + periodSeconds: 5, timeoutSeconds: 3) + + // Liveness probe: Detects if service is still functioning + .WithHttpProbe(ProbeType.Liveness, "/health/live", + periodSeconds: 30, failureThreshold: 3) + + .WithReference(database); + +builder.Build().Run(); +``` + +**Custom endpoint targeting:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Probe specific endpoint by name +var api = builder.AddProject("api") + .WithHttpEndpoint(8080, name: "management") + .WithHttpProbe(ProbeType.Readiness, "/actuator/health", + endpointName: "management"); + +// Probe with endpoint selector function +var service = builder.AddProject("service") + .WithHttpProbe(ProbeType.Liveness, "/status", + endpointSelector: () => service.GetEndpoint("https")); + +builder.Build().Run(); +``` + +**Integration with resource dependencies:** + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var database = builder.AddPostgres("postgres"); +var cache = builder.AddRedis("redis"); + +// API with probes that check dependencies +var api = builder.AddProject("api") + .WithHttpProbe(ProbeType.Readiness, "/health/ready") // Checks DB & Redis connectivity + .WaitFor(database) // Wait for database startup + .WaitFor(cache) // Wait for cache startup + .WithReference(database) + .WithReference(cache); + +// Frontend waits for API to be ready (not just started) +var frontend = builder.AddProject("frontend") + .WaitFor(api) // Waits for API readiness probe to pass + .WithReference(api); + +builder.Build().Run(); +``` + +This feature enhances deployment reliability by providing fine-grained health monitoring that integrates seamlessly with Aspire's resource orchestration and dependency management. + +### Enhanced resource waiting patterns + +New `WaitForStart` method provides granular control over startup ordering, complementing existing `WaitFor` semantics (#10948). It also pairs with improved `ExternalService` health honoring (#10827) which ensures dependents truly wait for external resources to be healthy. + +**Understanding wait behaviors:** + +- **`WaitFor`**: Waits for dependency to be Running AND pass all health checks. +- **`WaitForStart`**: Waits only for dependency to reach Running (ignores health checks). + +```csharp +var postgres = builder.AddPostgres("postgres"); +var redis = builder.AddRedis("redis"); + +var api = builder.AddProject("api") + .WaitForStart(postgres) // New: startup only + .WaitFor(redis) // Healthy state + .WithReference(postgres) + .WithReference(redis); +``` + +**Migration scenario (database initialization):** + +```csharp +var database = builder.AddPostgres("postgres"); + +var migrator = builder.AddProject("migrator") + .WaitForStart(database) // Start as soon as container is running + .WithReference(database); + +var api = builder.AddProject("api") + .WaitFor(database) // Healthy database + .WaitFor(migrator) // Migration completed + .WithReference(database); +``` + +**ExternalService health integration:** + +`WaitFor` now honors `ExternalService` health checks (#10827). Previously a dependent could start even if the external target failed its readiness probe. + +```csharp +var externalApi = builder.AddExternalService("backend-api", "http://api.company.com") + .WithHttpHealthCheck("/health/ready"); + +var frontend = builder.AddProject("frontend") + .WaitFor(externalApi) // Now waits for healthy external API + .WithReference(externalApi); +``` + +If you need the old (lenient) behavior: + +```csharp +// Do not wait for health +var frontend = builder.AddProject("frontend") + .WithReference(externalApi); + +// Or only wait for startup +var frontend2 = builder.AddProject("frontend2") + .WaitForStart(externalApi) + .WithReference(externalApi); +``` + +### Enhanced resource lifetime support + +**Breaking change**: Resources like `ParameterResource`, `ConnectionStringResource`, and GitHub Model resources now participate in lifecycle operations and support `WaitFor` (#10851, #10842). This section merges prior duplicate "Resource lifetime behavior" content. + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +var connectionString = builder.AddConnectionString("database"); +var apiKey = builder.AddParameter("api-key", secret: true); + +var api = builder.AddProject("api") + .WaitFor(connectionString) + .WaitFor(apiKey) + .WithEnvironment("DB_CONNECTION", connectionString) + .WithEnvironment("API_KEY", apiKey); + +var github = builder.AddGitHubModels("github"); +var model = github.AddModel("gpt4", GitHubModel.OpenAI.Gpt4o); + +var aiService = builder.AddProject("ai-service") + .WaitFor(model) + .WithReference(model); + +builder.Build().Run(); +``` + +These resources no longer implement `IResourceWithoutLifetime`; they surface as Running and can be waited on just like services. + +### Resource lifecycle event APIs + +Aspire 9.5 introduces new resource lifecycle event APIs that allow you to hook into resource state transitions for custom logic execution. + +The new `OnResourceStopped` extension method enables you to register callbacks that execute when a resource transitions to the stopped state: + +```csharp +var database = builder.AddSqlServer("sqlserver") + .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => + { + // Cleanup logic when database stops + logger.LogInformation("Database {ResourceName} stopped", resource.Name); + await PerformCleanupAsync(cancellationToken); + }); +``` + +**Complete lifecycle event coverage:** + +Combined with existing lifecycle events, you now have full coverage of resource state transitions: + +```csharp +var api = builder.AddProject("api") + .OnResourceReady(async (resource, readyEvent, cancellationToken) => + { + // Resource is running and healthy + await RegisterWithServiceDiscoveryAsync(resource, cancellationToken); + }) + .OnResourceStopped(async (resource, stoppedEvent, cancellationToken) => + { + // Resource has stopped + await UnregisterFromServiceDiscoveryAsync(resource, cancellationToken); + }); +``` + +This provides symmetrical lifecycle management for scenarios like service registration/deregistration, resource cleanup, logging, and custom monitoring integration. + +## Publishing and deployment + +### Parameter prompting during deploy + +Aspire 9.5 enhances the deployment experience by automatically prompting for unresolved parameters during `aspire deploy` operations, eliminating the need to manually specify all parameter values upfront. + +#### Interactive parameter resolution + +When deploying your Aspire application, any parameters without values are now automatically detected and prompted for interactively: + +```bash +# Deploy command detects missing parameters and prompts automatically +aspire deploy + +🔧 Resolving deployment parameters... + +Enter value for 'database-password' (secret): ******** +Enter value for 'api-key' (secret): ********************** +Enter value for 'environment-name': production + +✅ All parameters resolved, proceeding with deployment... +``` + +#### Benefits of interactive parameter prompting + +- **Secure credential entry**: Sensitive parameters are masked during input +- **Deployment-time flexibility**: No need to pre-configure all parameter values +- **Error prevention**: Missing parameters are caught before deployment begins +- **Better developer experience**: Clear prompts with parameter descriptions + +#### Parameter types supported + +- **Secret parameters**: Automatically masked input for sensitive values +- **Standard parameters**: Regular text input with validation +- **Optional parameters**: Skipped if no value is provided + +This feature builds on the existing parameter infrastructure and makes deployment workflows more intuitive, especially when working with multiple environments or sharing deployment scripts across team members. + +### Azure Container App Jobs support + +Aspire 9.5 introduces comprehensive support for Azure Container App Jobs, allowing you to deploy both project and container resources as background job workloads that can run on schedules, in response to events, or be triggered manually. + +Container App Jobs complement the existing Container Apps functionality by providing a dedicated way to run finite workloads like data processing, ETL operations, batch jobs, and scheduled maintenance tasks. + +#### Publishing resources as Container App Jobs + +Use the new `PublishAsAzureContainerAppJob` extension method to publish resources as jobs: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Publish a project as a Container App Job +var dataProcessor = builder.AddProject("data-processor") + .PublishAsAzureContainerAppJob((infrastructure, job) => { + // Configure job-specific settings using Azure Provisioning APIs + job.Configuration.TriggerType = TriggerType.Schedule; + // Run daily at 2 AM + job.Configuration.ScheduleTriggerConfig.CronExpression = "0 0 2 * * *"; + }); + +// Publish a container as a Container App Job +var batchJob = builder.AddContainer("batch-job", "my-batch-image") + .PublishAsAzureContainerAppJob((infrastructure, job) => { + // Configure manual trigger job + job.Configuration.TriggerType = TriggerType.Manual; + job.Configuration.ReplicaRetryLimit = 3; + job.Configuration.ReplicaTimeout = 1800; // 30 minutes + }); + +builder.Build().Run(); +``` + +#### Job customization and configuration + +The new `AzureContainerAppJobCustomizationAnnotation` enables fine-grained control over job behavior: + +```csharp +var scheduledJob = builder.AddProject("scheduled-worker") + .PublishAsAzureContainerAppJob((infrastructure, job) => { + // Event-driven job configuration + job.Configuration.TriggerType = TriggerType.Event; + job.Configuration.EventTriggerConfig = new EventTriggerConfiguration + { + Scale = new JobScale + { + MinExecutions = 0, + MaxExecutions = 10, + PollingInterval = 30 // seconds + } + }; + job.Configuration.ReplicaRetryLimit = 3; + job.Configuration.ReplicaTimeout = 1800; // 30 minutes + }); +``` + +This feature addresses issue #4366 and provides a unified development and deployment experience for both long-running services (Container Apps) and finite workloads (Container App Jobs) within your Aspire applications. + +#### Simplified job configuration overloads + +For common scenarios, Aspire 9.5 provides simplified overloads that reduce boilerplate code: + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Scheduled job with cron expression +var scheduledJob = builder.AddProject("daily-processor") + .PublishAsAzureContainerAppJob("0 0 2 * * *"); // Run daily at 2 AM + +// Manual job (default trigger type) +var manualJob = builder.AddContainer("batch-processor", "my-batch-image") + .PublishAsAzureContainerAppJob(); // Manual trigger, ready for on-demand execution + +builder.Build().Run(); +``` + +These overloads provide convenient APIs for the most common job types while maintaining access to the full configuration API when advanced customization is needed. + +### Azure provisioning & deployer + +9.5 delivers the first iteration of the Azure provisioning & deployment pipeline that unifies interactive prompting, Bicep compilation, and mode-specific behavior (run vs publish) across Azure resources: + +- New provisioning contexts separate run-mode and publish-mode flows ([#11094](https://github.com/dotnet/aspire/pull/11094)). +- Graph-based dependency planning (`ResourceDeploymentGraph`) ensures correct ordering of resource provisioning. +- Improved error handling and idempotency for `AddAsExistingResource` across all Azure resources ([#10562](https://github.com/dotnet/aspire/issues/10562)). +- Support for deploying compute images and resources (custom images referenced in your environment) ([#11030](https://github.com/dotnet/aspire/pull/11030)). +- Deploy individual Bicep modules instead of a monolithic `main.bicep` for clearer failure isolation and faster iteration ([#11098](https://github.com/dotnet/aspire/pull/11098)). +- Localized interaction + notification strings across all provisioning prompts (multiple OneLocBuild PRs). + +Provisioning automatically prompts for required values only once per run, caches results, and reuses them in publish-mode without re-prompting. This reduces friction when iterating locally while maintaining reproducibility for production publish. + +### Azure deployer interactive command handling + +The AppHost now wires Azure provisioning prompts into the standard interaction system (initial work in [#10038](https://github.com/dotnet/aspire/pull/10038), extended in [#10792](https://github.com/dotnet/aspire/pull/10792) and [#10845](https://github.com/dotnet/aspire/pull/10845)). This enables: + +- Consistent UX for parameter entry (names, descriptions, validation) +- Localized prompt text +- Support for non-interactive scenarios via pre-supplied parameters + +### Azure resource idempotency & existing resources + +Calling `AddAsExistingResource` is now idempotent across Azure hosting resource builders; repeated calls no longer cause duplicate annotations or inconsistent behavior ([#10562](https://github.com/dotnet/aspire/issues/10562)). This improves reliability when composing reusable extension methods. + +### Compute image deployment + +You can now reference and deploy custom compute images as part of Azure environment provisioning ([#11030](https://github.com/dotnet/aspire/pull/11030)). This lays groundwork for richer VM/container hybrid topologies. + +### Module-scoped Bicep deployment + +Instead of generating a single aggregated template, 9.5 deploys individual Bicep modules ([#11098](https://github.com/dotnet/aspire/pull/11098)). Failures surface with more precise context and partial successes require less rework. + +### Publishing progress & activity reporting + +`IPublishingActivityProgressReporter` was renamed to `IPublishingActivityReporter` and output formatting was reworked to provide clearer, structured progress (multiple commits culminating in improved messages). Expect more concise status lines and actionable error sections when using `aspire publish`. + +### Parameter & interaction API updates + +- `ParameterResource.Value` is now obsolete: switch to `await parameter.GetValueAsync()` or inject parameter resources directly ([#10363](https://github.com/dotnet/aspire/pull/10363)). This change improves async value acquisition and avoids accidental blocking. +- Interaction inputs enforce server-side validation and required `Name` property (breaking, [#10835](https://github.com/dotnet/aspire/pull/10835)). +- New notification terminology (renamed from MessageBar, [#10449](https://github.com/dotnet/aspire/pull/10449)). +- `ExecuteCommandResult` now includes a `Canceled` property to track whether command execution was canceled by the user or system. +- Server-side validation of interaction inputs ([#10527](https://github.com/dotnet/aspire/pull/10527)). + +Migration example: + +```csharp +// Before (deprecated) +var value = myParam.Value; + +// After +var value = await myParam.GetValueAsync(); +``` + +### InteractionInput API improvements + +**Breaking change**: `InteractionInput` now requires `Name`; `Label` is optional (#10835). + +#### Migration example + +```csharp +// Before (9.4 and earlier) +var input = new InteractionInput +{ + Label = "Database Password", + InputType = InputType.SecretText, + Required = true +}; + +// After (9.5+) +var input = new InteractionInput +{ + Name = "database_password", // Required field identifier + Label = "Database Password", // Optional (defaults to Name) + InputType = InputType.SecretText, + Required = true +}; +``` + +This enables better form serialization and integration with interactive parameter processing. + +### Executable resource configuration APIs + +Enhanced APIs for configuring executable resources with command and working directory specifications. + +#### WithCommand and WithWorkingDirectory APIs + +New extension methods allow precise control over executable resource execution: + +```csharp +// Configure executable with custom command and working directory +var processor = builder.AddExecutable("data-processor", "python") + .WithCommand("main.py --batch-size 100") + .WithWorkingDirectory("/app/data-processing") + .WithArgs("--config", "production.json"); + +// Executable with specific working directory for relative paths +var buildTool = builder.AddExecutable("build-tool", "npm") + .WithCommand("run build:production") + .WithWorkingDirectory("./frontend"); +``` + +#### Enhanced CommandLineArgsCallbackContext + +The `CommandLineArgsCallbackContext` now includes resource information for context-aware argument building: + +```csharp +var worker = builder.AddExecutable("worker", "dotnet") + .WithArgs(context => + { + // Access to the resource instance for dynamic configuration + var resourceName = context.Resource.Name; + var environment = context.ExecutionContext.IsRunMode ? "Development" : "Production"; + + context.Args.Add("--resource-name"); + context.Args.Add(resourceName); + context.Args.Add("--environment"); + context.Args.Add(environment); + }); +``` + +These APIs provide fine-grained control over executable resource configuration, enabling complex deployment scenarios and dynamic argument construction based on execution context. + +### Interactive parameter processing APIs + +Aspire 9.5 introduces the `ParameterProcessor` API for programmatic parameter resolution with interactive prompting capabilities. + +#### ParameterProcessor API + +The new experimental `ParameterProcessor` class enables applications to handle parameter resolution during runtime: + +```csharp +// In your application startup or configuration +services.AddSingleton(); + +// Use parameter processor to initialize parameters +public async Task ConfigureAsync(ParameterProcessor processor) +{ + var parameters = new[] + { + builder.AddParameter("database-password", secret: true), + builder.AddParameter("api-key", secret: true), + builder.AddParameter("environment-name") + }; + + // Initialize parameters with interactive prompting + await processor.InitializeParametersAsync(parameters, waitForResolution: true); +} +``` + +#### InteractionInputCollection enhancements + +Enhanced parameter input handling with the new `InteractionInputCollection` type: + +```csharp +// Enhanced interaction service with typed input collection +public async Task> ProcessParametersAsync() +{ + var inputs = new List + { + new() { Name = "username", Label = "Username", InputType = InputType.Text }, + new() { Name = "password", Label = "Password", InputType = InputType.Password }, + new() { Name = "environment", Label = "Environment", InputType = InputType.Select, + Options = new[] { ("dev", "Development"), ("prod", "Production") } } + }; + + var result = await interactionService.PromptInputsAsync( + "Configure Parameters", + "Enter application configuration:", + inputs); + + if (result.Success) + { + // Access inputs by name with type safety + var username = result.Value["username"].Value; + var password = result.Value["password"].Value; + var environment = result.Value["environment"].Value; + } + + return result; +} +``` + +The `InteractionInputCollection` provides indexed access by name and improved type safety for parameter processing workflows. + +### Docker Compose Aspire Dashboard forwarding headers + +`AddDockerComposeEnvironment(...).WithDashboard()` gained `WithForwardedHeaders()` to enable forwarded `Host` and `Proto` handling for dashboard scenarios behind reverse proxies or compose networks ([#11080](https://github.com/dotnet/aspire/pull/11080)). This mirrors the standalone dashboard forwarded header support and fixes auth redirect edge cases. + +```csharp +builder.AddDockerComposeEnvironment("env") + .WithComposeFile("docker-compose.yml") + .WithDashboard(d => d.WithForwardedHeaders()); +``` + +### Container build customization + +`ContainerBuildOptions` support (commit [#10074](https://github.com/dotnet/aspire/pull/10074)) enables customizing the underlying `dotnet publish` invocation when Aspire builds project-sourced container images (for example to change configuration, trimming, or pass additional MSBuild properties). Use the new options hook on the project container image configuration to set MSBuild properties instead of maintaining a custom Dockerfile. (Exact API surface is intentionally summarized here to avoid drift; see API docs for `ContainerBuildOptions` in the hosting namespace for usage.) + +### Deployment image tag callbacks + +Aspire 9.5 introduces powerful deployment image tag callback APIs that allow dynamic generation of container image tags at deployment time, supporting both synchronous and asynchronous scenarios. + +#### Deployment tag callback features + +- **Dynamic tag generation**: Calculate image tags based on deployment context, git commits, build numbers, or timestamps +- **Async callback support**: Perform asynchronous operations like API calls or file system access during tag generation +- **Deployment context access**: Access to deployment environment, resource information, and configuration +- **Flexible callback types**: Support for simple lambdas, context-aware callbacks, and async operations + +#### Basic deployment tag examples + +```csharp +var builder = DistributedApplication.CreateBuilder(args); + +// Simple static tag callback +var api = builder.AddProject("api") + .WithDeploymentImageTag(() => "v1.2.3-stable"); + +// Dynamic tag with timestamp +var worker = builder.AddProject("worker") + .WithDeploymentImageTag(() => $"build-{DateTime.UtcNow:yyyyMMdd-HHmm}"); + +builder.Build().Run(); +``` + +#### Context-aware deployment tags + +```csharp +// Access deployment context for dynamic tag generation +var api = builder.AddProject("api") + .WithDeploymentImageTag(context => + { + // Access resource information + var resourceName = context.Resource.Name; + var environment = context.Environment; + + return $"{resourceName}-{environment}-{GetBuildNumber()}"; + }); + +// Git-based tagging +var frontend = builder.AddProject("frontend") + .WithDeploymentImageTag(context => + { + var gitCommit = GetGitCommitHash(); + var branch = GetCurrentBranch(); + return $"{branch}-{gitCommit[..8]}"; + }); +``` + +#### Async deployment tag callbacks + +```csharp +// Async callback for complex tag generation +var database = builder.AddProject("database") + .WithDeploymentImageTag(async context => + { + // Perform async operations during deployment + var buildInfo = await GetBuildInfoFromApi(); + var version = await ReadVersionFromFile(); + + return $"db-{version}-build{buildInfo.Number}"; + }); + +// API-based version lookup +var api = builder.AddProject("api") + .WithDeploymentImageTag(async context => + { + using var client = new HttpClient(); + var latestTag = await client.GetStringAsync("https://api.company.com/latest-tag"); + return $"api-{latestTag.Trim()}"; + }); +``` + +#### Advanced deployment scenarios + +```csharp +// Environment-specific tagging +var service = builder.AddProject("service") + .WithDeploymentImageTag(context => + { + return context.Environment switch + { + "Production" => $"prod-{GetReleaseVersion()}", + "Staging" => $"staging-{GetBuildNumber()}", + "Development" => $"dev-{DateTime.UtcNow:yyyyMMdd}", + _ => "latest" + }; + }); + +// Multi-resource coordination +var sharedVersion = await GetSharedVersionAsync(); + +var frontend = builder.AddProject("frontend") + .WithDeploymentImageTag(() => $"frontend-{sharedVersion}"); + +var backend = builder.AddProject("backend") + .WithDeploymentImageTag(() => $"backend-{sharedVersion}"); +``` diff --git a/src/frontend/src/data/aspire-integrations.json b/src/frontend/src/data/aspire-integrations.json index 3bab21cfd..d4a31caa6 100644 --- a/src/frontend/src/data/aspire-integrations.json +++ b/src/frontend/src/data/aspire-integrations.json @@ -13,7 +13,7 @@ "azure", "ai" ], - "downloads": 3489, + "downloads": 3522, "version": "9.5.2-preview.1.25522.3" }, { @@ -31,7 +31,7 @@ "ai", "openai" ], - "downloads": 337169, + "downloads": 337778, "version": "9.5.2-preview.1.25522.3" }, { @@ -49,7 +49,7 @@ "tables", "table" ], - "downloads": 514871, + "downloads": 515522, "version": "9.5.2" }, { @@ -67,7 +67,7 @@ "eventhubs", "amqp" ], - "downloads": 179198, + "downloads": 179842, "version": "9.5.2" }, { @@ -85,7 +85,7 @@ "servicebus", "amqp" ], - "downloads": 474572, + "downloads": 475686, "version": "9.5.2" }, { @@ -124,7 +124,7 @@ "npgsql", "sql" ], - "downloads": 21725, + "downloads": 21752, "version": "9.5.2" }, { @@ -151,7 +151,7 @@ "npgsql", "sql" ], - "downloads": 46220, + "downloads": 46357, "version": "9.5.2" }, { @@ -168,7 +168,7 @@ "azure", "search" ], - "downloads": 132340, + "downloads": 132584, "version": "9.5.2" }, { @@ -186,7 +186,7 @@ "keyvault", "secrets" ], - "downloads": 450202, + "downloads": 451143, "version": "9.5.2" }, { @@ -205,7 +205,7 @@ "blobs", "blob" ], - "downloads": 1353287, + "downloads": 1355832, "version": "9.5.2" }, { @@ -224,7 +224,7 @@ "queue", "queues" ], - "downloads": 287026, + "downloads": 287536, "version": "9.5.2" }, { @@ -240,7 +240,7 @@ "cloud", "kafka" ], - "downloads": 448968, + "downloads": 449393, "version": "9.5.2" }, { @@ -256,7 +256,7 @@ "cloud", "elasticsearch" ], - "downloads": 31673, + "downloads": 31692, "version": "9.5.0" }, { @@ -270,7 +270,7 @@ "hosting", "aws" ], - "downloads": 141310, + "downloads": 141722, "version": "9.3.0" }, { @@ -288,7 +288,7 @@ "aifoundry", "foundry" ], - "downloads": 3622, + "downloads": 3670, "version": "9.5.2-preview.1.25522.3" }, { @@ -302,7 +302,7 @@ "hosting", "azure" ], - "downloads": 108453, + "downloads": 108736, "version": "9.5.2" }, { @@ -316,7 +316,7 @@ "hosting", "azure" ], - "downloads": 191977, + "downloads": 192624, "version": "9.5.2" }, { @@ -330,7 +330,7 @@ "hosting", "azure" ], - "downloads": 286631, + "downloads": 287121, "version": "9.5.2" }, { @@ -345,7 +345,7 @@ "hosting", "azure" ], - "downloads": 5550, + "downloads": 5569, "version": "9.5.2-preview.1.25522.3" }, { @@ -364,7 +364,7 @@ "cognitive", "services" ], - "downloads": 330980, + "downloads": 331628, "version": "9.5.2" }, { @@ -380,7 +380,7 @@ "container", "registry" ], - "downloads": 8288, + "downloads": 8340, "version": "9.5.2-preview.1.25522.3" }, { @@ -394,7 +394,7 @@ "hosting", "azure" ], - "downloads": 327521, + "downloads": 328421, "version": "9.5.2" }, { @@ -409,7 +409,7 @@ "azure", "eventhubs" ], - "downloads": 92053, + "downloads": 92347, "version": "9.5.2" }, { @@ -424,7 +424,7 @@ "azure", "functions" ], - "downloads": 319997, + "downloads": 321159, "version": "9.5.2-preview.1.25522.3" }, { @@ -438,7 +438,7 @@ "hosting", "azure" ], - "downloads": 554345, + "downloads": 556260, "version": "9.5.2" }, { @@ -467,7 +467,7 @@ "hosting", "azure" ], - "downloads": 331919, + "downloads": 332803, "version": "9.5.2" }, { @@ -481,7 +481,7 @@ "hosting", "azure" ], - "downloads": 152404, + "downloads": 152747, "version": "9.5.2" }, { @@ -495,7 +495,7 @@ "hosting", "azure" ], - "downloads": 155814, + "downloads": 156157, "version": "9.5.2" }, { @@ -509,7 +509,7 @@ "hosting", "azure" ], - "downloads": 96454, + "downloads": 96654, "version": "9.5.2" }, { @@ -524,7 +524,7 @@ "azure", "servicebus" ], - "downloads": 349819, + "downloads": 350989, "version": "9.5.2" }, { @@ -538,7 +538,7 @@ "hosting", "azure" ], - "downloads": 60490, + "downloads": 60550, "version": "9.5.2" }, { @@ -552,7 +552,7 @@ "hosting", "azure" ], - "downloads": 218619, + "downloads": 219038, "version": "9.5.2" }, { @@ -566,7 +566,7 @@ "hosting", "azure" ], - "downloads": 1261872, + "downloads": 1265377, "version": "9.5.2" }, { @@ -583,7 +583,7 @@ "pubsub", "websocket" ], - "downloads": 14692, + "downloads": 14693, "version": "9.5.2" }, { @@ -596,7 +596,7 @@ "hosting", "devtunnels" ], - "downloads": 5484, + "downloads": 5565, "version": "9.5.2-preview.1.25522.3" }, { @@ -610,7 +610,7 @@ "docker", "docker-compose" ], - "downloads": 87352, + "downloads": 87586, "version": "9.5.2-preview.1.25522.3" }, { @@ -624,7 +624,7 @@ "hosting", "elasticsearch" ], - "downloads": 53556, + "downloads": 53687, "version": "9.5.0" }, { @@ -638,7 +638,7 @@ "hosting", "garnet" ], - "downloads": 31594, + "downloads": 31633, "version": "9.5.2" }, { @@ -654,7 +654,7 @@ "models", "ai" ], - "downloads": 1919, + "downloads": 1934, "version": "9.5.2-preview.1.25522.3" }, { @@ -668,7 +668,7 @@ "hosting", "kafka" ], - "downloads": 258459, + "downloads": 259285, "version": "9.5.2" }, { @@ -682,7 +682,7 @@ "hosting", "keycloak" ], - "downloads": 171763, + "downloads": 172236, "version": "9.5.2-preview.1.25522.3" }, { @@ -695,7 +695,7 @@ "hosting", "kubernetes" ], - "downloads": 15661, + "downloads": 15694, "version": "9.5.2-preview.1.25522.3" }, { @@ -726,7 +726,7 @@ "hosting", "mongodb" ], - "downloads": 229071, + "downloads": 229520, "version": "9.5.2" }, { @@ -740,7 +740,7 @@ "hosting", "mysql" ], - "downloads": 102333, + "downloads": 102708, "version": "9.5.2" }, { @@ -754,7 +754,7 @@ "hosting", "nats" ], - "downloads": 33885, + "downloads": 33951, "version": "9.5.2" }, { @@ -769,7 +769,7 @@ "node", "nodejs" ], - "downloads": 1460936, + "downloads": 1464584, "version": "9.5.2" }, { @@ -784,7 +784,7 @@ "openai", "ai" ], - "downloads": 1102, + "downloads": 1130, "version": "9.5.2-preview.1.25522.3" }, { @@ -799,7 +799,7 @@ "oracle", "sql" ], - "downloads": 19073, + "downloads": 19099, "version": "9.5.2" }, { @@ -813,7 +813,7 @@ "hosting", "orleans" ], - "downloads": 139903, + "downloads": 140089, "version": "9.5.2" }, { @@ -830,7 +830,7 @@ "npgsql", "sql" ], - "downloads": 1478478, + "downloads": 1481565, "version": "9.5.2" }, { @@ -844,7 +844,7 @@ "hosting", "python" ], - "downloads": 85544, + "downloads": 85703, "version": "9.5.2" }, { @@ -858,7 +858,7 @@ "hosting", "qdrant" ], - "downloads": 60194, + "downloads": 60260, "version": "9.5.2" }, { @@ -872,7 +872,7 @@ "hosting", "rabbitmq" ], - "downloads": 793581, + "downloads": 795054, "version": "9.5.2" }, { @@ -886,7 +886,7 @@ "hosting", "redis" ], - "downloads": 1663750, + "downloads": 1667741, "version": "9.5.2" }, { @@ -900,7 +900,7 @@ "hosting", "seq" ], - "downloads": 123714, + "downloads": 124059, "version": "9.5.2" }, { @@ -915,7 +915,7 @@ "sqlserver", "sql" ], - "downloads": 1743271, + "downloads": 1749025, "version": "9.5.2" }, { @@ -927,7 +927,7 @@ "aspire", "testing" ], - "downloads": 1837402, + "downloads": 1842440, "version": "9.5.2" }, { @@ -941,7 +941,7 @@ "hosting", "valkey" ], - "downloads": 97215, + "downloads": 97378, "version": "9.5.2" }, { @@ -956,7 +956,7 @@ "yarp", "reverse-proxy" ], - "downloads": 26601, + "downloads": 26723, "version": "9.5.2-preview.1.25522.3" }, { @@ -972,7 +972,7 @@ "cloud", "keycloak" ], - "downloads": 129310, + "downloads": 129687, "version": "9.5.2-preview.1.25522.3" }, { @@ -1002,7 +1002,7 @@ "database", "db" ], - "downloads": 412583, + "downloads": 413989, "version": "9.5.2" }, { @@ -1020,7 +1020,7 @@ "redis", "cache" ], - "downloads": 2191, + "downloads": 2215, "version": "9.5.2-preview.1.25522.3" }, { @@ -1039,7 +1039,7 @@ "sqlserver", "sql" ], - "downloads": 373190, + "downloads": 373962, "version": "9.5.2" }, { @@ -1065,7 +1065,7 @@ "cosmos", "cosmosdb" ], - "downloads": 80481, + "downloads": 80609, "version": "9.5.2" }, { @@ -1090,7 +1090,7 @@ "sqlserver", "sql" ], - "downloads": 1834379, + "downloads": 1838701, "version": "9.5.2" }, { @@ -1108,7 +1108,7 @@ "configuration", "appconfiguration" ], - "downloads": 22412, + "downloads": 22621, "version": "9.5.2-preview.1.25522.3" }, { @@ -1145,7 +1145,7 @@ "database", "mongodb" ], - "downloads": 154369, + "downloads": 154486, "version": "9.5.2" }, { @@ -1163,7 +1163,7 @@ "database", "mongodb" ], - "downloads": 52925, + "downloads": 53096, "version": "9.5.2" }, { @@ -1183,7 +1183,7 @@ "mysql", "sql" ], - "downloads": 45999, + "downloads": 46037, "version": "9.5.2" }, { @@ -1200,7 +1200,7 @@ "nats", "messaging" ], - "downloads": 38273, + "downloads": 38293, "version": "9.5.2" }, { @@ -1221,7 +1221,7 @@ "npgsql", "sql" ], - "downloads": 626761, + "downloads": 627628, "version": "9.5.2" }, { @@ -1248,7 +1248,7 @@ "npgsql", "sql" ], - "downloads": 2030276, + "downloads": 2033088, "version": "9.5.2" }, { @@ -1265,7 +1265,7 @@ "ai", "openai" ], - "downloads": 239538, + "downloads": 240144, "version": "9.5.2-preview.1.25522.3" }, { @@ -1290,7 +1290,7 @@ "oracle", "sql" ], - "downloads": 73296, + "downloads": 73430, "version": "9.5.2" }, { @@ -1316,7 +1316,7 @@ "mysql", "sql" ], - "downloads": 157442, + "downloads": 157900, "version": "9.5.2" }, { @@ -1332,7 +1332,7 @@ "cloud", "qdrant" ], - "downloads": 41067, + "downloads": 41126, "version": "9.5.2" }, { @@ -1351,7 +1351,7 @@ "rabbitmq", "amqp" ], - "downloads": 435729, + "downloads": 436207, "version": "9.5.2" }, { @@ -1370,7 +1370,7 @@ "rabbitmq", "amqp" ], - "downloads": 163281, + "downloads": 163804, "version": "9.5.2" }, { @@ -1386,7 +1386,7 @@ "cloud", "seq" ], - "downloads": 223809, + "downloads": 224187, "version": "9.5.2" }, { @@ -1404,7 +1404,7 @@ "caching", "redis" ], - "downloads": 2164498, + "downloads": 2168217, "version": "9.5.2" }, { @@ -1424,7 +1424,7 @@ "distributedcache", "redis" ], - "downloads": 1007367, + "downloads": 1009476, "version": "9.5.2" }, { @@ -1445,7 +1445,7 @@ "outputcache", "redis" ], - "downloads": 393953, + "downloads": 394497, "version": "9.5.2" }, { @@ -1461,7 +1461,7 @@ "gofeatureflag", "client" ], - "downloads": 28103, + "downloads": 28190, "version": "9.9.0" }, { @@ -1477,7 +1477,7 @@ "hosting", "activemq" ], - "downloads": 37168, + "downloads": 37239, "version": "9.9.0" }, { @@ -1493,7 +1493,7 @@ "hosting", "adminer" ], - "downloads": 35504, + "downloads": 35661, "version": "9.9.0" }, { @@ -1510,7 +1510,7 @@ "dapr", "azure" ], - "downloads": 28504, + "downloads": 28599, "version": "9.9.0" }, { @@ -1524,7 +1524,7 @@ "communitytoolkit", "dotnetcommunitytoolkit" ], - "downloads": 25002, + "downloads": 25079, "version": "9.9.0" }, { @@ -1541,7 +1541,7 @@ "dataapibuilder", "hosting" ], - "downloads": 39611, + "downloads": 39675, "version": "9.9.0" }, { @@ -1558,7 +1558,7 @@ "staticwebapps", "hosting" ], - "downloads": 32235, + "downloads": 32251, "version": "9.4.0" }, { @@ -1575,7 +1575,7 @@ "bun", "javascript" ], - "downloads": 41113, + "downloads": 41204, "version": "9.9.0" }, { @@ -1591,7 +1591,7 @@ "hosting", "dapr" ], - "downloads": 177883, + "downloads": 178771, "version": "9.9.0" }, { @@ -1621,7 +1621,7 @@ "hosting", "dbgate" ], - "downloads": 60947, + "downloads": 61118, "version": "9.9.0" }, { @@ -1637,7 +1637,7 @@ "hosting", "deno" ], - "downloads": 39111, + "downloads": 39180, "version": "9.9.0" }, { @@ -1655,7 +1655,7 @@ "feature-flags", "openfeature" ], - "downloads": 219, + "downloads": 311, "version": "9.9.0" }, { @@ -1671,7 +1671,7 @@ "hosting", "gofeatureflag" ], - "downloads": 27282, + "downloads": 27353, "version": "9.9.0" }, { @@ -1687,7 +1687,7 @@ "hosting", "golang" ], - "downloads": 46337, + "downloads": 46457, "version": "9.9.0" }, { @@ -1703,7 +1703,7 @@ "hosting", "java" ], - "downloads": 41993, + "downloads": 42068, "version": "9.9.0" }, { @@ -1719,7 +1719,7 @@ "hosting", "k6" ], - "downloads": 21336, + "downloads": 21412, "version": "9.9.0" }, { @@ -1737,7 +1737,7 @@ "hosting", "extensions" ], - "downloads": 199, + "downloads": 266, "version": "9.9.0-preview.1.251103-2303" }, { @@ -1753,7 +1753,7 @@ "hosting", "kurrentdb" ], - "downloads": 190, + "downloads": 263, "version": "9.9.0" }, { @@ -1769,7 +1769,7 @@ "hosting", "lavinmq" ], - "downloads": 25570, + "downloads": 25640, "version": "9.9.0" }, { @@ -1786,7 +1786,7 @@ "smtp", "hosting" ], - "downloads": 52778, + "downloads": 53051, "version": "9.9.0" }, { @@ -1804,7 +1804,7 @@ "debugging", "hosting" ], - "downloads": 12314, + "downloads": 12419, "version": "9.9.0" }, { @@ -1820,7 +1820,7 @@ "hosting", "meilisearch" ], - "downloads": 41261, + "downloads": 41337, "version": "9.9.0" }, { @@ -1838,7 +1838,7 @@ "cloud", "storage" ], - "downloads": 19089, + "downloads": 19259, "version": "9.9.0" }, { @@ -1855,7 +1855,7 @@ "mongodb", "dbgate" ], - "downloads": 32224, + "downloads": 32295, "version": "9.9.0" }, { @@ -1872,7 +1872,7 @@ "mysql", "dbgate" ], - "downloads": 13326, + "downloads": 13392, "version": "9.9.0" }, { @@ -1889,7 +1889,7 @@ "ngrok", "tunnels" ], - "downloads": 38268, + "downloads": 38391, "version": "9.9.0" }, { @@ -1909,7 +1909,7 @@ "pnpm", "npm" ], - "downloads": 230271, + "downloads": 231193, "version": "9.9.0" }, { @@ -1926,7 +1926,7 @@ "ollama", "ai" ], - "downloads": 140307, + "downloads": 140596, "version": "9.9.0" }, { @@ -1942,7 +1942,7 @@ "opentelemetry", "observability" ], - "downloads": 4367, + "downloads": 4452, "version": "9.9.0" }, { @@ -1959,7 +1959,7 @@ "smtp", "hosting" ], - "downloads": 29765, + "downloads": 29837, "version": "9.9.0" }, { @@ -1976,7 +1976,7 @@ "postgres", "dbgate" ], - "downloads": 37423, + "downloads": 37534, "version": "9.9.0" }, { @@ -1995,7 +1995,7 @@ "script", "hosting" ], - "downloads": 11539, + "downloads": 11640, "version": "9.9.0" }, { @@ -2012,7 +2012,7 @@ "uvicorn", "python" ], - "downloads": 39781, + "downloads": 39872, "version": "9.9.0" }, { @@ -2028,7 +2028,7 @@ "hosting", "ravendb" ], - "downloads": 34216, + "downloads": 34319, "version": "9.9.0" }, { @@ -2045,7 +2045,7 @@ "redis", "dbgate" ], - "downloads": 33728, + "downloads": 33815, "version": "9.9.0" }, { @@ -2061,7 +2061,7 @@ "hosting", "rust" ], - "downloads": 36481, + "downloads": 36570, "version": "9.9.0" }, { @@ -2075,7 +2075,7 @@ "communitytoolkit", "dotnetcommunitytoolkit" ], - "downloads": 3728, + "downloads": 3812, "version": "9.9.0" }, { @@ -2092,7 +2092,7 @@ "sql", "sqlproj" ], - "downloads": 78859, + "downloads": 79166, "version": "9.9.0" }, { @@ -2109,7 +2109,7 @@ "sql", "sqlite" ], - "downloads": 39187, + "downloads": 39262, "version": "9.9.0" }, { @@ -2126,7 +2126,7 @@ "sqlserver", "dbgate" ], - "downloads": 42383, + "downloads": 42521, "version": "9.9.0" }, { @@ -2142,7 +2142,7 @@ "hosting", "surrealdb" ], - "downloads": 8377, + "downloads": 8443, "version": "9.9.0" }, { @@ -2158,7 +2158,7 @@ "kurrentdb", "client" ], - "downloads": 200, + "downloads": 264, "version": "9.9.0" }, { @@ -2175,7 +2175,7 @@ "masstransit", "rabbitmq" ], - "downloads": 41120, + "downloads": 41208, "version": "9.9.0" }, { @@ -2191,7 +2191,7 @@ "meilisearch", "client" ], - "downloads": 45497, + "downloads": 45595, "version": "9.9.0" }, { @@ -2209,7 +2209,7 @@ "data", "ado.net" ], - "downloads": 31217, + "downloads": 31287, "version": "9.9.0" }, { @@ -2230,7 +2230,7 @@ "ef", "orm" ], - "downloads": 37907, + "downloads": 37978, "version": "9.7.2" }, { @@ -2248,7 +2248,7 @@ "cloud", "storage" ], - "downloads": 11679, + "downloads": 11766, "version": "9.9.0" }, { @@ -2266,7 +2266,7 @@ "ollamasharp", "client" ], - "downloads": 157416, + "downloads": 157861, "version": "9.9.0" }, { @@ -2282,7 +2282,7 @@ "client", "ravendb" ], - "downloads": 36390, + "downloads": 36496, "version": "9.9.0" }, { @@ -2298,7 +2298,7 @@ "surrealdb", "client" ], - "downloads": 8334, + "downloads": 8398, "version": "9.9.0" } ] \ No newline at end of file

M^{Ncly+<6$_UeXG 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 C8ewGs literal 0 HcmV?d00001 diff --git a/src/frontend/src/assets/integrations/sql/ssms-connected.png b/src/frontend/src/assets/integrations/sql/ssms-connected.png new file mode 100644 index 0000000000000000000000000000000000000000..48994fe20b6d46d578befa5c8388c7aba48ef230 GIT binary patch literal 76645 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�KA*jK zq%6S&8J0cJu(IfIm5CO9ES-gPYn-hSqY@6r-+lJKq#ytj-GL*ybW12NRu*(ONT417 z_%$cNmu({xr$Z#?wTK^`&2uD2jhfm=%c zj@FNGQ;oo{i*r{B5~W&P0N;1R2HtA$U8BVSv2NWj(x1G%_zi5ID5J8qQ%ZQ+t6^ zUVm$6dOMi4Y33SZ&S|IF1(pf$akkZv9muLaZTVSXpo(P{+u}mGgwadmE4>eORN$IR{tTc|3|DjzjrN)L!6Y9 z)H_TFFiAd;z^@nVHIksK{R;~@6h4mH)|B;wF5>|IK7acLZoD>|WQ;rd!4U}UQQ%J+ zkC(iKHg}vnR@&5EZ5x0Po*6dUuT*0}pa6sg)9XVpy-BepO$f8X_vcxhpGknljDy zKxx8guWsP!=Z<*IJk|b5P1;p~cdU425TdI@JRcJr|1ihV>h{BcR2nAb$ZpM%I2zbx z&)y(w1{WL3LF=%uA+ZuUw@bopSki48cIh{aBoZws`!w15#~UdYl*Trsq8u4y^oYC5 zjk1%4;NXrMjPausv;J$_quo#I>e+CeSSmu@)t-o_cp&;eC?2)KzfioFL;oj==b5(n zzOo_2wIP*jhuM_zlPmLORa3}3@JydO>M=zmiQs|WlgTL{%BNJmOh&{RR}?a!WE`&i zA}3-Gzi917P>)a~K;ilJCe%5P$T7={^E}r`$3}Hke+iIcu}N=lZpEMC^KV-q%$>BB zwJvxmv}PZ66(z2ADb8pyGkcMU_bhmoP6ocqy1Sd4u69XYo7tUcLibM6hY0ZC#*wx~ zxD*h})6`rJ^F$pr;)hcvRzUiffZQ=dRduv(WB+S^)iooUBWbSAm( z)s)G*xQo4_rtaFEK55`?Kpo1Kd+*mxRU9|^+S?94fEECxX~EgY+C0u&({?_j&elJ8 ztS`BtIORJjhxv@G6 z1XDX<*|!2ACG#WqMYNT#KCT7RQIXW762DZ>F&844o#%YI<6ze^9aZb@!U#Tp*`l42 z)JVrS?zU64uzTrMnKlj{j1PdIw|XA>_K<46exj*(M6tuIzgQ*|yB>6R>xE7T?0nO& zw4&UwXX9_ckI)~ISPB;oaf|nXEb;;JzwrK(OF-~_@qkjVjT& zgNve<-Oq-DLscVzfUWV*aGLsX-FjF`)uyoKd;di%M%%Ngy`)5@L$g7;dz2{M3gm&^ z%`F*j22&Um(qmq9mS|*1Leq`1_SbCjg?HU$b4Jt8!r0tBez=Rp>n|rI5qtgvUo*t< zHLX=xYV)g_EiHKkVQw&HvFX_A7h@aVN29|L!&2~E0Es1i47HaSlpRzbQR4$_;`7N; z=XM_KFl(w6nPz2lxv|aSK}+JCK$o9z*0wmU$SOU4;2IkKt&aZ9+Wslc^0(x==>mJe z*=}KMoLN%V0qi=Mvmp3*>lb*XQ%OC3{$Hik=pgD50&q#m#?sMN<{qkbuy48Rxfy~l z4Kr&^jsTjS_%txYPLVckokV#_Q%e>Oh^P^d@Clu1dMcp7q&)V^b}0G2mvqs&kDPX8 zJCKx3Zl)4b2vU8E+43>Za0Yr)a()3oDSN$@q8S~CrZ(3b|XWrR9(8$2ql zf6>;=z!L57I{Mrg(=MwD75V<+7A2t$XEOWjm=J{v4ZR3_0pi!CARKpfORS2`OhThL zxX*TX?|zQsm@fi{Xsz()nD$^3BFR=}))O-o5NK|xk7B;8nCNV3TTP4i6N13rjNkfQ z1&8HCB=y+oK?zdsiy|d!+q<{0Vku;_R{0A{JK?-Sr~ak6+jj(32`=Lx$%{K)u8+y# zl9uJd5H?$qu-oR2!BxuO+e_LJiXIOHzn*rNKCuBcI>ZqOf45u%Z&m2Hfn1UAfUrV< zd|PgT#kL0IdlyPEh}ApaAyBGB|y z0X~yij7?mP3SnXa5ZTI1R)W$LA~gsko|XvVQgH0&=&Q!x;s{mLO>n_O^|k?5OOpz% z5so4t1LFFQiLq6Nb{3a!8bz|7yek3aGXTw*o5Kf=>@$*}um+8%Ox?>y^{bHd$o^eE zG&X*eXKy-MFTu)i_1-Uhy$$E? z)%F8J`Hx!tu@h=`%V)%B?y_hmf(fhW2j?r$*t~@dN#S+vOj>==Y8E4OsHoTRO_KCC zE!od zZuKE-J$&m)UQ!laqyT6@k;kXl(|Kzsfm_wQKP&q?Ao`!D)<0!4{$@QJq%DL5=Ue_E zgTbo>^kPs?kDSo)92746Di>Le?G^fmxRK(Q`PLCeW%bWeSH#zH6V0*(|G;DF^Y$HF ztF!J;`;-{(3T+YNzU%O)G}`9EpSher6P;8Ak~J~lRcFQatPc%_ththwG`nR+-hU~; zjg%@uO&IQ7dhE1pUt=*<0TLy33V8Z*D~x*N`Z##9KU*f=BfQQ7Wrd&~c^zDAU9(EB zVI@bK?d{9Hcb>hr$Plk#1V%W*Zfv5RL`dxjf*9lqi>z$-VChxmDjeO}CfSa`E2oW2 z!x-i>zGZm|Q{~^T}st_oU~a&MS?Xg7oMax*3L&XP2WciE6_k&@|(YQk6aq z@{TGYgx$skT#G}`flP)$aIfjS$Psihc&CU-Rn1r`LlO}WbG++CgO7cZ0M41itDYA9 zJ8X&*6bDj2^EDo69Gq>Irfcvlb-p@!mZ1^^bOypIErUz3=6?J_l^lNu3nVv6@)=&J zxsG}K4I*}ZL*L2&l6WijD~Z={VLZSO04jA37?4%6-syw#&nm&=Oe<+%1Lck|SncEz zuCuJ5nkjtX{PuKXOMRb?)16NnqGI1<50jVz%bC0=)8=t>-B%r|?`)m1D;H}#B98rc zvnKS?xG6)*T0HC&vll+TJI;P0Z&=nsSn88nIQ0`6&V_Mx1z5oA;KzIAQ)p4xM(nY_ z;X7&?uh>w1wyR%;Aq8R2HU^VixU}jiy7q1b7qb@IDW4x^c>@=KPO$@$oO}q%qqw1-%AnO5gQ>*ch~`%YbR&`D zO;tHndTEx>YrcCQ;-&xr>ncyPvtACo)`?LFSy1n#tC;x>QWM7fQ>{w$>AmcvY7;}< zK019oT+y`K&FB=}~|aoVs|+Jx?@j`FkF zlnv(ZxGIG+YLPFbqkg4z#euXgc}w@2KF0-hmG|+o?WiLibUhVr#IQS1cfGhfA2Yg% z>J}rqtq_pSjf|_TuP%ZJ6q>m$<)a0UmS554>!@-~{EHst;mfyW&~{S`P_brBHZ%~YVoz31p`9~7djNrza=u(%KY{4BS z)idm=zrx3jVwP(Hx3QhXd;MC|amFmSE9mMcz$uX#f4m}-HEtx@s}ptxA0!hqB})Y~ zzDuQnVY8nF-?Hbf<9c_R-iVIm5QGhrN;7ev5b%=yFX189RU)JTpe6Q2NG^a|sQ`gz zb6DyzZ79d+@bHrLYMF5dAs^mb;g{)8J(4gyKK`vm!OnW^ty^ulz{|rezlW#TALl`_ zD<%71^i_fx|0QC?R@%x|kGN@pAv8>GKBLiS!gj*Udi-Mqx5tD%8wYOK5ww>5ACOew zF%zI36;BN`pBaq26hbj+=cvjsNzV(%%LfvQ+Ttf+X ziDR_G-~W{R3(}O@>EnZAm2xU_yF2J}RqC&B#SYpHYOnVj%1&|kPoB);qb6g2Y7)Zd zfLf%Ns@y|Nf;V-HnJ1umvZh+A2zP!;SE9{H-_t1VZ07r%#GM6A`Jz*~pAQW!5R;g0S4jQ7{2M{FC|Y zkt+Xf2zmb#+u26|RiNvq1!Q4Eq~VA9VW73|h$GtKrRpR1H8#ZU?s85>-q%(+DpLnU zfNXb-E9c!YD2fs=+puUx+!nz#mUjhPOiLir8%2H*fC{WiwTzBo7B4L5R4uE}y+;C8 zqo&agh%MxnDkB9bkcC#;#QKQ6ETGyu=>aQc+j#xJH=R=gzlP{JKd!DHOE(+uj605r zqN5!3HcAxi3N0!*c>kFe>2dhum{96N(Q~W+&Ms4cQTDvPZYNr(j}I8a51vCrmg^N2 z<2cpQM;6a;AE0IB_q8s?ney~rb2>E?T)YZ(l%b<%tg-0owsENzOJo&js%0?7HxFx{gxP+2z@%3( z>w%1aM=VEPY6dgE1_dFx6y!nmzZ=7T@<_5P-7FHVdwpn|;RnvDY;8Lgx-rBI@dfb= zzXc!L><}egc}+NcG^`O^>Bh7d>L}d?qgLi4w=gtLLski@Q*t=_Tr1f4 zERZn|#&uTcWsu2|%x8TiV9r*@ehPBD8>{+JOIVl9n7I~oE6+@}{2i8XvGoldg+?*R zGg)`svQ;vDDb@wBB6sdfl$R3$Va8j&pM}ZurNBiZEZc!rrsC*M+F}qYGYtj9xyszG z=uSQRneQ`yx!#CFS(mkT6y%}6!g&L(G>!Ug7%}C zpKI!s^8#G~bN?jZtar=vgIuLSMEJ(FGU`>EYqT zSG>@UmGIFU#d+7+5<`)DLeyTdvf%k~9$abcywqJ^b0up+G#L`q`2l(41?=@9C~J7c z5H;`x4^5MqK4F}34#AGK#B3pg*S(AMaTc`~dO7#$5)j3ta~=(WUzLv%F?F#YaSN7T zOIxA|)y&@>2wWO1y%NT9ucvqzRibH^!kG5s?wlD{ZGwQlNUJcATrI2WV;VbLF;&zy zPq2OYCg~X69`~d2HZ#mFd1L+z&hc=h>)?wNz+2VK3R_sZo%w8=ke;Q0S1qnc!#BvO zi`}Sb@)_>_c9!D|YJsrbPhgd16)NPFVCWDr5wZ>LVH@>m+u!%tD0nTIG^i$Qn|PQ+P4oRaDc;EJEcD<*;MJ`0d9L94^~ybf{j{i zV&h-D18?5x7i_#QIO{lCET^#c<)ngoh|`}Ofep3ZGRW=eRAmfF&}$05Pe{TNCN+4t zuiT&-bUeWm(1Jus3Na@~<+M&z$hbn#Q1b=;P=~a zbCz+o;?YJuZR*l+;OX%ED9MUhf!2qBM6^fbA<)h2#w3GZN-`I*l8MXT!Bev$;C~b^ zPo){_hU&Zw$#LRj`Yi$jOB>*aWrGqry~zND0ETKO#l#l=k&{RxX>9xyQwHthae9;F zB?bA3G0Q(V{cv}Fnm`k0t9lmv+g8;^sUmB<@t?LTLVcXBX`~N2!@lw>Oj5UR5?XzM zEo%CSpvF)yCAAn6)VU!@l@R9dTTAVaS2^Blp`@AwhPIXcsHfPDTRvVA{DFkq3JfT~qCVlgt8rr?o zL<2c%QS=lKq{BrNQE}(X6&}1M&HfS?;Gh0A|FtU%Lhn_nCt*&mVPH0WQ~1ga2mKO* zTrYq|yD9q`@_pCY*IRh{DnqT=nr&))USvlL!I5;ksmSrp_Tsd`ztrOJL;Xg(JcO#) z+fAcnYGNFyv;Rur;o4{f%BJC22ivjMp(3(cA9L)EJ}7J&8XYYM34i;rn2OjQd0sBN z1(d&hkVfZXyQXW4TIzA?L%wqL&5l7AArw}H5C=cxQtDm|6*lP(Mx@0$&&oB_ELz|o zu352F9`b<07Obq#hC#2znjsh6%z2#AciEPPnkJ<=r3Pd_T8oUDE=3eCPf+rR3l&mg zP=y}f@7mj})z+qCkc$I_O;;;Y2(3eFiW@fQkme0OMjJfESvSMP%zTO#jPXq?69?J6 zH*2u&*{kr8jEgY&6M)w|i+_k4S%(3IYftIrFD8EQUifMeQ+ca#Na+pw%(GbVB zTdpTkwpZR;j)^{Lx!m;Cf3~Ad0w1_0Fvn;U{tTMdgyeiZzL)G=L!3b7JwynL#<$Wi zQcdgjb4z@s!)ZeiQ$WK-yp$JHMT%z+ql&?8ZmD>Lf7u2!-yNS#Le4jLvtZ^tJq+Vh z^f1Q?0)q-oC%I6n&DpvN{-Qz4Ds=^1e|iQXM<|gKl~XH2cYV@%@Nz1FU(gfK6_>sf zjct*`N}rR(GB(x8&Xvz>t|Uhxm&+VmNxSv-{qZWRH0rUY^qfqiK`2ezxFn1*HC{i*3q z^HLaEj6l9RzE>HC8@RG(@Wvgz1z^6 zb+B6nV8wO6*R?+rL;4Nq-QO8{gSB#OUg+@|tP4@r2gQ`SgvXEO%Q+0kt&PnN_wI0+aUj`M+;^J$pMq>;Z2%|bce<*|-A@9# z9Vxut?oV#u?mht-d5kuNA`*#Yv2}7%{=MA>HN#W~)dOraai(h)`8tpM==i+=$2sh> zfZjEsLL};KGbC5sS0tKe!yNA%khlnN=;=S;b#U{rV?%eOe-G7ucXWSs z_vEcp26?GE<0Mg&hE{Cl zh)U5PJM^$&%rBaJ%8oOnKk2b#UD(CgLhq78( zdWJ$Ed%U!`$SfaTtqzzbJq0X*twEfz21kd0cgMzkD#G{r9@1R4MCV)Lz4y-1z9G<~~rbu6(f!7wX%~*Tnz5lja-`BWy%3KEKIaT*A zEuv>?ltx3-c7g%kH)WylQUMo|i74U88`(KvoMmWkXl+mR`Rtu%X;R<18*oF(9FSu{ zpt9oSe2p9`fZ7c*Lg_?+Pzw%Gqhe@q>5&?(3$+|_k^Qy#=W(BHJ3n{?slTZ6jZC_m6UZVm^*SAd9M*gc~Lt2xfa!K{AMeaqD*s@EGA>w4#xQqj_7(nTM zg=*V-X?pui=$6VRn;KyyE7jN(K9;aAgdbV;$F3BP`WntZm?(kU%Lbx}`d|FsQPf)k z_ynuKI<5hs z#6T#|3T$FBRdEQJfX(40rU%+SElAri1eiO#t7NTe+cJawG_OSCVa@={kGNPWJ-51mt?E zRu}DWBe?AZ@`G)=f>H5#l{mH%O8g&iOE&B)m-gyUt>&-ik9gC~EjenqUP2KZvqqp) zB8k3V+m%+H!AvAOY~buY&Z4fp|A(y1)XzBa(pK21vhO0dyir zkp}F2i69O-*dGo{1-zDC^h~pd_a$WFvSEf2cx-fS`JcV-{}?MGtN{P6 zsHw>hOdE%fp5JgLcbnOn|4R%{+}INVYV{R(gkyLkn}~TI!I!zj0u>qj7w727Wjs12z!m(^7w3m=aCOxhoQMzBzR z!fITdH?p{q(*Cif**rQ7lIu23Zko90HI4(jR$%ufg~0$H`_>H7e~VdWvzQ+6D&6v^ zE5^sR4l$9`0y6_B=0vEIMwA*8NMOvJRPztHJN0wBN31HhlP+LBw32HbDwsb!#3LfO ztam(J5I&%TrXwW{IEkWFD`^>SSY=OJ!DXdJ#B?LP4l0R= zlKF;if>bC!;DD^o%j6dBGSiZPN9p`819%f==d=DYWii?mhBB1wtLSECwk&-e?$H|$i(s}g_1;NqZj@2I8Wz&ik67e~0Yu9}Rye{HCfE^oZ;-ZT; zCK)&@+SQ!@nO8d&h=;tZ!uQNl|}_dah$glZ%9z z$|+P1sn7x{lpL^I>LDH8@9jtRo_a(>(i+af^r5SO?5JSA7zbV3A5Ur}`PizwHGGYv z2j`18H7(bV)t-Kl@6KngqW%7~WWF#SGQE&A>y z#&KjPyTO$8f$=wQv(Y@#$W>OKXtbE?Hs4%ZK zq1w?-!T21z0bdlgfP|-~=V|XIUkq5!b6d9|mElUt_O^%!Wt|z>oar4>?}oVJJXSWR zamhaQrF)E~R6`PH$Z7*F#Wu?4=49EVc{|{)WWW$f{b691P63sH@|vl(9zkj~xH!$B zC>sxKK5q1(^(!!g<+JDA#@{I}b<>*?4GFP$34<3&p4Etp9&iM4;|lT9#1;|)cbcek zv!AIByha%=2m1bKc=QKL;t+Y;iee;> zNp<>DM5JP#WLSo5<^)2ZZ>ggGO|@GiX@KL^%yQSNlJebVGO3pzkH32agnE74nKy=k zcc?qXJHWfeH8&6*izuJFYr57gskuiDgh%oLB_H&5tIP1@v|JRldK30adkY*aox&_b zHm<7Jm;qs_OQz4~1I;r@gIbi@c{^c6#Z^b3=Ta=W8Hw^0QauAuh++mcL!mZ-Cc}6v zbkxa8{#jd{L{RCg+-y`{x!%n#bwx9UhgRY*Kh}wLO_eI^8qb8Ep1&-2FhOjEY}gLw z8v?0#^*q(juz{Rxm>5iSs_(x0RikGhn{!h7q(g4&jQ*1;F9HQBIk%u*`TI}Op9;}S zpTMiPS|1p%UOi9~8(U89KWuN7`HR^XS=u-G!<1Vqm>IQ{=+>wV--s-#_*f%U(fe~F=ULwO>d}(fHJ;7LDpfdLj)acGPboi{Vh(6a! z;W&Cn&=)9*Y$yOt-4RBF8#l=eAQP_rHAMX3R>)9GpKr}J4|=v=-?NzQA(yq3RcCjS za;U3{%z!|ld_l^$0*%IutjS3sqFPSr4&6SrnuSjKYAs}tlg>DaJLGYP|K|Bx?JxOv4wN?6_n%Go6czOnmJZfoijy2w3Mpgn zw%7GUgGU$?R#Phdzfm$dC>%cSR#BoSbgtrk-1f+Sx5g~YZopn?JiYM5 zY2S${v46XEDv`QN1#XqM|54y!jCP*v1^dq0mmlv7iWcFnF)gcT=YC4x-dk`xxsYc) z&F6mXo6yGkFlCtvs4aBLY=rMXXx6ry;f^y;HMll@d9{->qL&F-kAmd%l9-XlQFaN~ z*^nq``>2}jU15c(t2miZ)Qv+jZ+ULoeH?SK_ZkNdV;qc(S}Ac`xx40=LH{A%l2~Ya zB`|m1d~V3viezGASdnFG=#lnp3+ej~5T!d+vD{rIT-|sD+AH@qLcJMgB`9kTXBTtU zeLYqmb!Gq9?^15C5K7}+*V?UBv!4(Qd`~cKyKghW-M1Gp7vb`O(pla#(}od^gEY zV|!`6B&etV)2G*Z=zUqXrX#D>YHa5!KgVAd1~@GFM#siTmyXa!_NdVh8!IST!=>aj z%)vpc%QM7_bkK@}m2~&+%N9H*)ZnM?%Gvp&*<|kMKzm`J3@6OpHO$T`v0~e$t(@SR zB+wi^!yVw1sF7|mV=>$n{Y;;OY^2$=`dok$V}oWXguQqlOSu-zkgJl$9fK!zjiHMv zeP}$5WW6{EjED`dA6;IjJAqjhpw<5amTukY(308+AXw-5U?QeYQpc8Ek*h6{hI2%% z_sHytCBWtlo7SOCzDFLy7nGf@)}&|gzBu`jTI`{AVM0al?Iu1pCp#|%x!eN}u+LXw zkD&yyKoDg4HHDc>Wv&HR`94e@nzU`;`*_|qbGxo(p{Gb;#?w8Ymmj^-8AMiEm9<4uO7Nx}?A_&(JOrlYcFg9A z^h15dB+k%Alf(wvT*aYYL%6lXP(Ws-ic8MCeHYTCX!WYTT4wfcd&P@u!63?5mq&tB z_ON)>k@b-YZpSc&bvE;D2fOyM7^-ZL1&R9ybPzOIt(N5Rm_RaqOSHpH>Mpa21z~<0 z`zDlL-(pSIs{*==d(3w2pu2C3-}I- zP@pRp4|PUNX%yAm%d-qx;^Hmi1@A};1UHPOC`ov3@#m5Z4qUL{;+b-p@J=cTx|0axWUlE=8<>gVth zu%<}=*=-~EO1*Nq~3zWpZ(ec|LE<|PU|Nu-nj5}4%9P*6DNZw!G2fwrz7o~es7 z6y~i5l~7>I^9unyTQPbSsmRF&&s!ZrUi%Itt3vVkg{cFil!F=r>ScFc*G7Jf}P>UPOMro3vqjrjdJFH1EFeqxP#u zi>Nqu3iIA9-td5Vx>o*LYA$af=c^?C!Qbe+SH05G1@;@-MSV<|aZNPv0hU#zn%GQT zlV1c3rj|=xo}kPk1t1Ry3p6{_&QAdtUS?VeAF;`QVRL2N++Zyw4xag~ma%(P<~DaQ zjb)(_?G}sbrGU`70X4U9RmJb`oN_{1zUkVAk#qedenSVn-OyET39I#-n?`t$i^1mr zN-cmD;{LLA=HUW^vm6m=IDA!Q@lbrl3xY$R%4jWH5_j#!qHb4n9<{u+U>aYh*e_+U z0={QE!_T$*^0L^DU59h;E1YnM7@!HzcG^W-o)24S@ z9~WN9EA!Np7lI8(bn?wjFS1+|d&x3qRh~W*u3WdKkgn@Yp<;6d^C?Yt0D8dgdyKM= z#KkD9*xxMxNNJPnDY!@0+BX~-(n6=wQE|U-n(p;!Y6Q!dToPATg#hL%rKsUkqVW8F z701;=RcGz=p&OVF4SWLBcwO;@?`?Iv6wOozT#D*$ zWUj1BO1RU=QpRsF8=Aw>$U4ZUX2%7~U2K1_$s}ZS*wdgz#18$DYHpP_HC#b_u zPNSux72c>tp~tRgz)EKE>0C zB_w6dBLec+dMjmImS+y+RR3*oq|h$7?FeHwR94Z#^lM+TeMglr&MIzeowEah^|>4vC)mV95T#QmYzgu^W<*I zCw?;$R+S9q!Dam_!R#|1qE=F(j`uEbXwwY=`x^nyv!^PTNM#hmJRF37$UFm%a_i*3?K{{ zhH6Y6>%pYcb`)H{frkrw4!vwM$`#zg*0Ddp-)u)|8uybG=l;-o4nqy|I>A{;xb4LE zFZe81N>Nx7L4@`{EMAR9!=P26+plF!8X-6-?8{7YKH@|{% zHKn8Tx$o9X*nO;0^875ci=h3V=z$zg*}hfsY@J^^Xdv8V(>-U%xpUlI8x*5H!_G2R zqFUFa(6xrZEd=Pz1t_oQo=tHMFjnI0ylt#mbe9)oLtcVe=X%*?V{H?(wQX!V=ektr zT!E%NTUk&^`TN}gW^!9a37yvFY9{N|-#>{Afa|@Sqw{XM{8D1`3Wk-o z9vvtZDLJG$^U=*&4_fciH~`t`Yo^aC*R6W2b9G>_*@Cc{8q&+1*XpmhJiSreFFdg$ zz?zMLgXDh2rs6ontfdj7o6JAtLmgD;47TdwH={gddZwM%$h*DDUlIBu zG=yFV_M{=f0%euuoSp!11{w453)0(+Pf7qs3J?^-#-*Uz%0&Zk4^2Z*CY%n*GkM@K zVF?*uc&seIHF(e41g4mac(751N4_{^D2pAYrQYiOv*h=HWS?S%9l3i0cba|v2&AFZy33S21gb51_9lnt^z|LU zDH7g;i=4O#{XG9O5dO?QBb;S{@(WYsb4(D#i@oq&5B^u`PuW38`u~Rb12}>3{e6JZ z08&_g^qDSvf3ePc?o{!0rS&TyP(0-qd{Aa-h3p#Eo}vQ~8p4>o^YWH;0TB0=2^z_; z;o;eb{|S)1u8xV7arrEuwdR?7f0A@*ERwS+n8Xq@EbwYocjd9Lc%(28#R$sRu)XQr z|7MMgJWP-Nzp_~Z@VeKM3%U%tRlY)^K1QTo*#Z7-C%PNwb-C|?S#u(^zC1`g9=6WB zGz~s~Ek_Dd18LIGX~48p)X$mWI{m@92bb#(b5^Z!JzwLBmQ$ql+g#Dsb}_4;)+LOw z2`?LB2^A^`G=*fgITMj(D})@#(3kbyCJGfBM^VLV1P8a+T-9^$PwaYcCWVjQ zB9pw);YcRM*eNlp2C$2}Cln2L_sg--@!283jeaOun`5WwD2qIgcalW4*Y@5qAL{1) z5esYzn3YKKZ#u|6<6E5u(Sx}*IdyXN88*%R6MfxExtCjjQ;O9oW@~<&cdE`X>sfh5 zzS4@mk5>Kk@#7UI92VVwC;=o5qzMh_-hxG@zS7v)_&hNCi?~V8GMAU)sRFRMaXdQ7 z&6~~k>O+xok}VA^3agt_GQ!8EwmmGl<-}b(JRu%1oBN5)9*RMeuy$qpu@;t1(c6B{ z0;<@ZMW#n@I^x18Qwe6aVAEQqBBKde^{j-_74(q5L`Kf*pg5`i1IdSg=xf|ChX~5z z3)odeYmn}bF!H{+9=B;_zq>6YrL+0)=v(^ESE$;*3rsK~E? z+Xu=~^mXlD9v(gyREDZ4GrflZ%aZSiC@q4t`g!ZpE4xA=LUmbnATGk2ZN`o;)LaML zCq?SRbUJ14gdMl*BH>%nIX7bSX%L{#CMIuKEK{?jg>p z+x5ed`>((8Q`Gp$%*}m1`!{Ha`RM<@aBxpCn*fkB;QN-iTPC;-63Dt)xK!)0IrGWs z8m$<0BE5(@kfIUFo@s0raZm2_E}hc`v41!MGwmVv&8*=!GmRKk$wI4d3w_^F**&xB z+1UypPTdR5fYy%8q*=5RO4bC^H9sS*WMWB8iM~d1t|8HPArUX#}BjHvr#d~fJ^N_TMDu$ zWt;F29#t1if;?WM31-G-$h!p;z#E76GPp6QkLk)~>{s1m0-3n#DC6>8i$m0ez zK6CQsXmdD5g76bUuE65YWDMHwcJC9+eLlpLWqsed#=$j~1WAhHDaSoQe1emj_Sgpclc)%jZ9q5}aO z`zKr40mFOd<*oJ8JOGRXTk?dNgwhxeMIfmka_?D zGqlivCQPgscdo7dK~?I-?l!Gl=&!~~u_?e*L{&ja+=iRHZYogeTXv!tT2B`<5UG%k ztmCjvxoaG67a*rl`n_Ig!`~od2r&IfRIK)bjmT9{-#xyj&@Dgh%k&Txm!xKpjLlK5 zPu)w$jz3BsF8W#F{T#z&4Jx1p`4_C*Q>OHzE{b)+LulR$<*1~6ZF6@a<(Qr>zR+fE zC~cltkr?lsbr*2qDNGiJAvWRN1G9KudrvzPdBS?%m@3FeA!Ejcb%2Z*)?w8aU0dZb zwTZiz&m`oSG*%#DzyEd7*|(a!<5W%$%DJuR9PfT_F{i1DH8+5`_aeHkPmpGt8k{`lPJkHdn6T*rk#&pifo~Bftnr z!AL(PvSW|TrXZkabrL0@(6J!CcQ_pX(X&wYN2jb`XR1GiR?oTxY6eg`@VvCVR)ZSn zh0ybcwOR)B9gEAKKR+z?_sxz)`tiF@0l^xFb>IX^e|wVI=n#ZU&yP;Fi(IaX9&pmKtM65DgZlgfwC{E{vAXCTp+nr&I0MD zxgsiONf7?Reni-X1wu{Z!QDD1$>40+uN|Js5+E=rWX|D4)aw!HRIwZ=Gs) zMw~X63&+m|x-=``RDuq6a+{;5)fuBlroe}5jFK|!x!0I3ciz)4bnPX0i-Ss;Gh&kL zL?m)gYqR)eCv_rjFeK~d3>pF}v~)z%fkIftT2P&c5(}`jbEt{6)RHDKMpC0IK+QZ( zA5Gyg&ZAOYIqnxaHdvoInBzL={tp}aP|5u*dXbAgOv7;9>U{`NC3Ow8XkKEuWv z8n-)VnW)orC}qxdQvlXv;utMFcA&x@NAG6?^!_S+3XU?%PMqK)V|ymz2&Q%yB_eqR zHep);RvU1{;QA47$$?1b2P}5%0NReeZvg*e-uBzqqPTkyViHz1owAN7nhB z0^4guSAACuP0#^n!rPQ09ogmHD8`OrRbn<~b+bb0^R_Kb61PFYE~J3NfwV%FOH{?I zsio-{TYIVJPv7yZXw5l2^T8&TPQ%0V-g3uwg2Ve?=#07{Rl1D7h$cpWhE9!ez zb#bd26+EQ`mZ&*3ox{>sXYX!1 z;($)ZAZ=~%b}|T1Cz;hUrIfRc0hQ9-@c0t^0C9QsDvo3@TH%;dC~YwV(lIkK0{+vd zZjL4IxX*Jk@46{&SM#_c4Pnb*40FYuqod-ON=J4XpOJogAR)`XQ2GtHw{UQU3y7K8 zD7GpBn!NHv*2`fPs`l;U1*+j!jHIY#FpW+=Z|k-vn_>MH|IgydJtJce@IM(TTxPYd zZ*oypDu2hl>zOVoKNhBh+;uAwfhFI51ksImL&p~K=e!$GU`KQ@&*Z^o?Y0@^uoDwV zN5%u%pDgCuTezA3Iu-4_`Vki{rqRcD>JXCBx)#53z6zOZ8Mn$i z(8sGBNeYH#0jeow78EZ$3oZBbX9KLdT>GRT_Nujmy^%IvM2+{{*~-O8fC^HH?2oQn z4-BK-eNXt@`J5WBW}L?z^Rh&)665EW^Q{b{}IXWhYA zGXiSp6TS?oHtPC0ND1V=AH4>~aO%bYA(FRo&h+DvTLSNxbsYnCnb(Z+`Q{?{(Ocn{ z&V&d|Z-qIA4qQ1}ATLmjgnJ`9JZlUDrGK-3aF9dkv(O3Q{r)75w-$g+=07s$Mp1g5 z&RqafNpXMn?A>>;GUJIJOtYs1w%8@i#S_V&m~bu z;3h=>kvd8npl1^imyXV+&`*xVMMb34-oL2NGbzfZe}B!V`L+_fZoFxMr`UHi?fKd% zxQK4h3eX$OBa)F_7>X>1Gy$vT9*})I7hk(fX2E9v(diI_KlmZ)c~$c;FB)~OR{ZVYse3WD<+5b@9wmCbMBAcSk!1yf zTEA1+)ZGyRSPYwSs)hm?&?zZY^k9vxi&_ILB;0B|N?2o@V^@a7JS(NceKd7AmaIv; z2IyLKSXMEs3nP(Aog~HNP;O7K$=8rGYXZC@-@;mVoLLzhqi*1mx#+-pg%p4?_vLJQ zYG<1KOMuM}(C-z>c2B<)EAzQ&>aHI%MER1MhYNYwtAsj5#%g!xjlgdmcEVIEwO#1D z91$FoD%8w|R-F;GK+EX!wr5S&y6yDZ1EW%V$vJ?`aN|&=KgM{MsSE29)36zZp0h`$ zI>^XT8l&P4YqbiOYI{5BVJX2px6nO>m#V6#&pw3K7tYr8Ofa^PuReNDmjjjgZ2rK@ zG+)F;N9e@Ae$Y<<7l63QHsnf+_z(JLkvOBo`gXF{D|+(>!^FkO;&xq6)eggOSTDPkwq;=+Nx3!&n>g|T<6(deN%s5X@<`%Y4;Ep z87)fwOJp4E!bZljTYN~48iK(rD3ew(lbB*6VD!7(T&6zz5}@+l?NcpFG)CB%}Y9C1$ zRH{&eoP?#6)rD6XAXgU>l4OiOb0h$HlaiAfs@S@K#FdW^aDcVTv_S+|fF(Ki@R4wg zl3$nOeuNhD29d#U)KpPh|vR)kdocXRsh$c=TScgFc)T~aQiWYEy;96@@Y_wx7x#BqJd8>W&}-wf-joJLg*K~q<=F?8N(j;nDhbrK0Lhtd8!EgvJU+f9baMvy#vAoR!woS z!LH2)N|6mf4p}I%IlHU-Izw zMqP3KVB_Fn0S;L`yUq?^pMPq??I>~Io$-gr)Z<1gbdF`)wO)W{pG>|6I4<7#3aCtX zQ3v!~!5~>*nYTejp(+~6)2f1BRP||_7$D#AqRTJPU6~~YV`+Gh_(+48&JU^wH`AxK zaaP=n1r6^TW=@fc5VJ)HEa?Gz)*1zdqGA`m&s2DDE0`!>Z0_NqtB{q=`ge+pSDjV3 z=Ll||1sn`?f_7+^F&CU9qQ`gh4yZEn%R`U1;6~$|+J7+Yh+`WP`RQSeV{eRuc9Fm` z@f_S8+=?o;JD9+bSUj%w=kDC9Ikw5c!c?r}xHHNc1o%08WtumyY&H*UZHYf{y%N-p6@+*G#82K>ONfBeQUv|IBLj`247b28l!$*#48y z$|Bluq@6(D-gR{iN1vyX=<*??#>g5xPFvYw;`lX|M*qfm4>X-@6gEV7YOT3hkg8gU z4y*tIB@FO%to2q*$)Mj^AaI_az_(^}(PqCQwhl|xi-dUai$=h^MQqX)DTt-KRLOaJ%HQgm$}g*SQI{W;I3yTI&V|JY<%F!}r5943$kR4@R0=3yfQ*@6M>J zhTH6AI3ql(gj&*73upm@iG3*Uo^SR6VVW~|Ki)9x%k;jN2?Y=*GdACyX+59xc;}b( zY*#=g$oVR%_F1cI9U^%8E)fZ}|5Ju)U>OXW$Li1Z5>f3D*eL4)nKRA{ur5f_ZT*@W z`{7OFy1*s+|FpV3qW1$-V`$!&>4#OQ6kxq$l*P{3zq%skv$D1P<;THv8GS2&53_!y z%8GEN8Stj6v<^ZIA>*RNJ=>(i)bT6MT?+LVGr+=z_Rmgn&Q^p{DxDNwZ1>a*u8eu9 z4JR}1{FE906N21*Rg|UzeMKDjcJ^FX)I~2CF5xPgl0wjXw8c^ey4A^MKx$@CJ&&vB zz~ih8k_CG6kX`+rzsf{Qr<@%fi*snGsh7XoECgrJu2zW#fY{d#7)W315dy)=XbjSVHKYwoJwUL3 zxy{u~C_Te<3NPQ>wE4E2mJhfSDBqu`xhT$29Pf#@6*Qvx=9s2U_cyVY8@yf2Q2Y~! z|HG)JK#~f0T!F5kY8Avj+dNFV8z(`|VJ}#r#mrkngyOD*@lvuCne4~Z=_MHVn$Xl! z;X&lugA~&N(Mv_Iv7zsD`MhuO9ETow?H}fhUYT$2m(tqv;c*Yqdv z5RvZ0qreQ#ztkxrd`{1(=NnA2g9!c==9BeK66?0 z6uFix;A#tV|HwuZ!^OAYu{1Iw-Nq$tn<1cLj+HBxbMsZI+3YJu0hNn%GezEn0jD2k z?hqt$kcNakcj9g1ofV`yhTEJt@`PD03Wj8F*r3J^o|XXIob8%d~|}tm<(+Pg$+Mn)6t!Hek%-hlzyL zEjYi{eU8Du;C9V2qxO4KvzA$aC(krmrp{*7%5t*ijSeMy!Gjv>fU;N?;8j|Z;b#Jh zg=#J~cflUYDEhoI3jZ=?B#N)GW9+Z&M5NUoX=v~yj9^^b<4*J$uCCjt132*kxDBis z@2>q?o~luE{t(J251ZIt{t#9YV6Am`+GxC{XH$8T4!8uLzeI_cyJR&u*Ywdamr=9J zt`#U1b>xv;nsFz`kcH9}+tj5@$)!UnlHVjfJ_=b7ckd?B_!Vyp9(Df3bjlbl$K9y% z^wd9XO5(}LLuy{i`}y{t8qd3PfOoleh>R$Io?H{B&6l6>vm5F*Z!6%E9f#Mflg%pE zDo3dE2IP`Op}?{uRd*GL0Fz>CGqSC7nJbVAS}tbLBaO+g>OA>?sCK|pW|I&c+AG}^ zp+*~j@x8jj9rK-Rg1f`(LoxI_GRbE1!*^L6JNZIhZ$0)`wLp2Y^&TajWBlD$ECJE| z5&YA>=crzo27vIO%AIklZ4T9o83P9S(ch?#HgOGSBI&Vi#md_|KWUU+hIjwOr9zL( zjj*Bwv-(F5?I7SZ6p(=*US}$OjNbU{>U&<_A&#CL`9Y~PqDRl#ZLd~E+X3e81v!6t z1`Q=xyG{gW0Qj!!JE-$PVYRVpK{18zvnYtbAaL;kxn@-KZ!z==H*$*xTuGgMwcTmXN3 zE)7{*HQ*{KJ}3R^@OxpdZ9_uKyxX}t&4zWbJO&dqF?@=`O8d~JAV3+z@F<&qO^gUG zV5Ahk)7cB83$`xsVsXIJLqIVNy+%T-uZD4ZuLo4N0ktH9y_-`L>+oBbyeJ$T1Dztp zDF;0w`uJn6eN-a|o+?4l6dloe?Iz5n0x2KP-pv>KTnm?YFV0HPcaXi#n?ylbvu4cH ztM#KQ{B`0Y7a3jBH>D$VZ@VL^K;H$f)-z-_JY*a^${UQif!1?3pw} z{-VBn^{78iN8w4C;L0#Fl*sgNUs=cty1AnAVR*5+GMyXJdW3pU53@pC=<|sMm#VOr z5O}c!;5jizRN`yEl8vo0VPsRv`(owNE@VzooFqIijw`4Wy&}+s6s9(H{8mcI@kF)f zT7~|5jOesi3Rt{X{sf2@m}7VAXNUWiJ72{p996^VEz3kKzcvgO2yN8h=9a7nz{>R2 zKz=YbCF z@;zk+_^x4AlYZ~gN8Ef$21?5YyD+*plzdYlr?D;b&_ZJ*a#~wCpWCVXO;Sq&?&e)8 zfq`xr70bz2v8EjpXO|v<$}qM(-`F3eSKzboU#uJ{oOyXhTDzLJ+>O)4SKIKXK2(`0 zte20>hn~yA56McWN|8VOhn9bVLg0+j0~3)Kju`;s08rG13!IBU;8f6c5OVUDG7trC zXUk=bZ8+P6oMd-vuy&t264x+}L<`R$eOTiSTEYVI(ec8}DD8IMDPd9?*^T%}quA{Z0s*CD36;@7@sbHatA7-(`Wq;r~=sjQ4h4 z1**HT4k!mNU!oh~#}Q7M^*ayFSZ?1dll%r5zgyygFEVyvaCgQ$P@PDGNui4%eJU0* zEAf`J#+LKC`AT2wEqm`LW8oUt;a4U)tk-Uzm6Tm^_s8EYjg_HzJG~Gs|$ew0%Rw^uyScG^l+$H%~S&lr! zV$IDCxBdHhTzNbEzjj}9^Ig$G%d-cTLkwJK=-rK)GXT5K@mp;CaPSf?@i#Kk1=yK`jg!Hi4T-C|@wsV_-yb1uy!6%fR;x@t zMqcj%WyO5tU$ix6N)NDETc# zvC8GebXRXy;dFrEqc&VyoBc8diBe<8TX~R6ICY!y2UZq-bwVCsm~xCjQRS@RcbRmP z<;^YA@ezs|=*9ca_;WHriME=g#K9&Dt}f_qut}bZZr#H8#V~bhAq9d6k1y=UDF-p<+z!AH7A!O~xlENXNWAEKVLq`Im?DQ&nYdgEW0A zw|CCy)F;zucp z0ZV^)`9BIUv=wx~28c><8bJp=OUgHQ)5)E>#?3=9_SS<+#y`!IcV)#wt^(hpHgo~H2XTk(rVBusQO6YKLi=3+$q5KT$&>;gYipOp}oQ^9- zIV+Zl-QB>Yl6Lgej?}C=i=S{3SE(f+x{6|T_F-UFakMHASS=fRy<=~amCM)VW6FANv>O~WYZlHsyEphCh4qoW%&G)^?%e$v4r6(r zDuj1nx7lvm1{`NDQNDbTinruSWsBOmx_ylQ;C#|k-wM=Sc;p+fp@dx0JKhwpA`)GB zDOBi6Ul11+UGO5QfQ1*8dpqN(D&c8udS<50XO*aQ(_{uYtGfg5h%7>=6&Y78N2B(eiH8_ z`(96brDns=w$cCbicG1;;!}D44;ohHicN~p+et`BpAe@#f1;RG@o3Ct< zCKB(HvR+6AK6h){#M%i0FOASs-D!CRm@MtNy*i1X4}Zq-LxGKHi6DVaY$P9tH@Uaq zejhKO`+EnGc2hJ}M4WSzk}RT%9c9 zQRJeCXM{4oh5aSvdpGFf>E-3*T&GhJOM0sbk`eC{eifeE-FkhA7?Oi>PUkf2qV5wy{GO6qD}}hIez9hdAHk~ zD0Pk3GTH9u-6Bp&RcmpR16D_YY2bT}bs}z&Vy`D8EIn+E+BBSuFD~k}Jl+$tl;1>F zeI)NLz=y^p?%guAw1B+LRCfwv0T)&KC#ta4yFZGrk`1S3VkC@p;6`(Xevm+TPG^} zG8@AultYo9IW%jW5^u`JtLspQ7#N{=8PCzqn#HGn&3!F2TSdjY7hQEjrk90=#oB*x zpmCN|rq}9$o98g^EOvx-+uDQ7F7(h}T_3KN(Sd!VQ5up^D76s2d?Rf>lzpMRZ?m!5 zr&4!;W6Kpm0PB4$OJZy8AtmvKh#?4=hWNZ8#NNqkwIK=4^o}=?-7DpHYJ$Ssyk+n* zC`d(OYWFr23+YSE1GtUb|6a&ck(qTchqVBR0Kq)I|FyD@+>BMXL=ARPq@|e!QlMbE znyyhvkx5eK)?FyxUwPwcqwOTc6T;03VSZFiz;70pj*y#1r?GPKIb8|n0+igLD&P&B15^w8Hzt0?nZ&6f(5I; zFCBn*(=z!*T;o}UQhoNZ#~j>8$mEa#8J4LVe?V1?<*kcQ+%t={$jx`B*Vbt?^E4%} zm|;wy()=l~an{D^SyB;#m6ETCR{GK;!{$(_h*a@SpB^P=Wd*nEOcYYGR_fX+v46ia zjtqF_VXygw#(^U*{~|-mJxk|Wp^Wy>F6ZK6^Cf;m*k#`fdI)JJx}5g;$Lqp$@^Vr! zJ9?SIvR#uJZuW)#Z8t#({v%U`98wkzw>XOV;!-u(r6;eFsgUd_$WM+0^A^$-(dWNwX?--zE#+J$#yjmjy(xA? zdrLL5f(tWcf%dk#!De7SZti}k=*-D&MO5XoNM>$1-=UIlGZu&1J0(UjN>08$LHc?xMbkvTFcgD2m{c3`_ zXmghTB!pg@wR*-^8(FKd(82*(+$lw6K~seL&x%JodlC6VlxnY3SvxA8`ZkSw*!HJx zNKA;#G;B7{g$96QTco{4UG}ZXqQu%Z>!L&xZ@kyH{1XXLHO*^$7 z+(trS)~XDjFJ0!W&}-Ry0Q->06q;ubam^&_J*-mKc78%`JCJHrk7}|1z&%DGpS5b+ zH7t9>blNh=?S_m^f1cW?07?x(Zr1&%SYNlR_%l9gEqbAHaH2B?SO9Kugd>Fk7xo%U zGY7uSaBMMZW0q9Ys(n{vL39<;ziw;XYbUgq<1};YbZS6xzTT@9Z6=aoH93h7{}79f zj3f?TJ1NO;Sd+j55YD$#*CrfrNafFZ0I7^lqHP#r%XYv%>#*m=OB+T8I}DETCUe`w z(IGJ^!g^|je-zg|gwyB6MdnO6a2(wQiOMW?S1%BnR8En@%%KeVeM!k=GB(+=&nC0u ztga3T_xct@LP094Rt;f)bTsmJ-p|hsheRvD9e!s2alygQ{7rHz$p?SQV+o)$OJ~x|Ba2xTpzm2EX^`N>z_&_spniTVuTEt6;V zk$!v63if;qZNYnVF?um&Zal3$s&dTGGPP#{baD5}SlNLzI%xQ!d7{vzf-54#>Ymn8 z3Q)_jK0hfe3uAY6l80V5V%$i}r{z_DDOt?0%E#LG-35alWcTb$n^uFsZ_OkyUwrQc zu>XP!KXeN_mnKfX9Udn##r!oM-lXd+mZ-qPdq?}~ysU`a>sLQbI?tXhEG#_loh!td ztMM|dzX#XRtwUe`qu$M_nS)NZ;o zRtelQAkpWWNCX=*E89(`y)tgkT`%EP28^qvPay9{i`ep&cIR;-$q#oQJ9KfG9_23cc@Qr=qES66n6$=&_W#@27y0 zIAOEYEHC*w{rvY*R@LzrSt_f~Dw4iFlVPxB{7O(@lCBNawzN#=Nv9a!*rbuAvo}u< zzR|K8pnGtWI5<>Gfi;UnU}Ex0_KZ~Ft08sPaSf@}+J@veoqy)2sVH!dHr!r-z}qIz zpST*hR{~H5kIH-L^AUHB*DPsArVl=`Gg|`Jg&&9M3$XX)&CTP+Tuf$@Gj62@;CcyK zbBM(hxRYr(G|X;cNw(Ai#@oLpr#5>CQm2*@ zi)v@lQlZxuZA3UDoJL7Xw%1;?vSMNCOz}`P{+_=OX;#;JDRMGwVon;RF3M;$`KWbr z0;kvq?(xLX#SfMqo)#vK#G9$2y=0K0weLJnHq^Trud;jx4#_VQ^}0n+FfrBc&@R>< zHe{Rtbkw&)Why2!ohT=BH!0t>jI5obS|#JDcM-QsPm%(gijInTpz;tYv2hlqUv7Mo zdrx@&Uj7%NJlMf)u&!3iT9MJ*-ad}_Gdd-hPB3%Z`cy@gdT_F_>C?bvwz=-*pTpmw z(Oa~9m-etd@V9vS@lNcyuj3xScCWd^W7c2Qi7k74;>gh5-+;k3+uI+YKp>eVX=QZsGuC=E_I>Wj4ZDHdt>#ByeM zBW(aR;+WzkX^8H68Ma9aKe&3-<|zJU94VVqrEB2%At?XPc6uCp#je0iOUMTO8+Zhq zRVzn}#ZGB7afOQPK@Ak2N=akcziwf1BJRA^)F0e2bmJnM?3a&p1(Pkn@J+u>s%pjI zDs8A4DH$m^CP~&-j9T^12Jz2q}&o>Z)w%dS0f=Ef;Eb z9ZfY;5gVR-j;CGyHt;^BZJnwPbots;zY}uXIUpen#f8I8H> z*J2T2A#)=m>jt_V+QlhO@A5znKf8y2aBe2NcdB?&a%z?qxhU%XSBYl_kOG3#CcES zz`|mbT&alUCaovq80}h(>t`PMh-(JgRS)oUnxUe4SEo(E+?W^qzNMBe^Hu zwwGu+V2+^^9T$jmq#DT{9lGdy90!}l8u&gxTW_4;SL$4pXTf|LMlX@fewgDJh!qmKs){1Jj0yYaMj5?o6% z(=N^0n}=LU0|7!C-XEHFav_|5?OXsPPh!G(WGrl?9=SaY@5vUqUG@hs@uSs9S7<4*6TsE*VadWObJf&J8_4KQP-=YuO1bUW@ zM0hJC#e@vEx0^<`c9t@)O%HrKIi#Kb;*;z6)ZKEK$8U3<0`Ad(ZrL{V;liw-3&|+s zq!HR%aFwNv8iQ*O&?rSmQQItNaaS}9w>ONchb4MI9Tk>=Dm?u5BN;S9wZvN2@9UihMa>JGYRLsn;^5TZ9Dm&bq| z(I$-rqL!22c{-Trk7HvE3;fU~ISraZgC5PJ`r4ug@v)b5BMRj0<=-p0Ml|d`l0I7K zI{NZP_QBP?uJJT3zb_Mu62}{VtpTf9S6LHJLmb_Jw7%6Cpg1QV+vBc?T7DzD`+l-m zY59}24DM-yc$L2&{C?`6DzZ!trl~$V6+R1y-76d1+@Fr9`xuMLDNco)PK-Ao_V!M? zgtv8g$GlgmxRzC!I7g!mt1D`o&^H|h+6?^Q!Y*sET&RX8D~e~|MixJ!rQya%RrG0f z__B?tp$K|PKF4iGoV|+wc!;+VEcV&2j1jkjg5!Li`!^zJ$i3&sD}$QP+UDJafpD>4 zSaDez{;H_y~;X`1K3UbgHE$&1LE+E=;A%`w{qaK zGfPL5qoJ>zD)TpQ`&akh|$spGSUjhF_%~zxq2gEgfS{m$TLHVVL^`JyCdE JBw_U8{{W|8L|Xs= literal 0 HcmV?d00001 diff --git a/src/frontend/src/assets/integrations/sql/ssms-new-connection.png b/src/frontend/src/assets/integrations/sql/ssms-new-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..7df212e180744ae726abf03c51a39af81b926585 GIT binary patch literal 75284 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 { }); --- -