+ {
+ supportedEntries.length > 0 && (
+
+
+ {supportedEntries.map(({ language, content }) => (
+
+
+
+ ))}
+
+
+ )
+ }
+ {
+ limitationEntries.map(({ language, limitation }) => (
+
+ ))
+ }
+
diff --git a/src/frontend/src/components/IntegrationCard.astro b/src/frontend/src/components/IntegrationCard.astro
index bd63953ee..58f9143da 100644
--- a/src/frontend/src/components/IntegrationCard.astro
+++ b/src/frontend/src/components/IntegrationCard.astro
@@ -4,7 +4,15 @@ import { Code } from '@astrojs/starlight/components';
import { Image } from 'astro:assets';
import csharpIcon from '@assets/icons/csharp.svg';
import typescriptIcon from '@assets/icons/typescript.svg';
+import pythonIcon from '@assets/icons/python.svg';
+import goIcon from '@assets/icons/go.svg';
+import javaIcon from '@assets/icons/java.svg';
+import rustIcon from '@assets/icons/rust.svg';
import { generateFriendlyName } from '@utils/helpers';
+import {
+ getEnabledAppHostLanguages,
+ type AppHostLanguageId,
+} from '@utils/apphost-languages';
// Helper to abbreviate download counts
function formatDownloads(n?: number) {
@@ -56,7 +64,7 @@ function hostingDocsUrl(docs: string): string {
// Append the global aspire-lang query param so the destination page's synced
// Tabs (and any PivotSelector with key="aspire-lang") pre-select the right
// language without depending on prior browser state.
-function withLang(docs: string, lang: 'csharp' | 'typescript'): string {
+function withLang(docs: string, lang: AppHostLanguageId): string {
const url = hostingDocsUrl(docs);
const sep = url.includes('?') ? '&' : '?';
return `${url}${sep}aspire-lang=${lang}`;
@@ -66,6 +74,15 @@ function withLang(docs: string, lang: 'csharp' | 'typescript'): string {
// that can render `