Skip to content

Add explicit resource icons to hosting integrations - #1612

Merged
afscrome merged 1 commit into
mainfrom
claude/community-toolkit-resource-icons-637198
Sep 22, 2026
Merged

afscrome merged 1 commit into
mainfrom
claude/community-toolkit-resource-icons-637198

Conversation

@afscrome

Copy link
Copy Markdown
Contributor

Overview

Adds .WithIconName(...) annotations to resources across 45 hosting integration packages in this repo that previously had no explicit dashboard icon, so they no longer fall back to generic type-based heuristics in the Aspire dashboard (container → box, project → code, etc.). This mirrors dotnet/aspire#18954, which did the same for all upstream Aspire hosting packages.

8 packages already had icons set (Adminer, DbGate, Dbx, Java, JavaScript.Extensions, K3s, OpenTelemetryCollector, SqlDatabaseProjects) and were left untouched. Packages that only extend upstream resources (MongoDB.Extensions, MySql.Extensions, PostgreSQL.Extensions, SqlServer.Extensions, Redis.Extensions, Keycloak.Extensions, Azure.Dapr.Redis) don't define new resource types, so nothing to add there either — those resources already got icons from the upstream PR.

Icon selection

Icon names were verified directly against the FluentUI Filled icon set the dashboard resolves against (via the Microsoft.FluentUI.AspNetCore.Components.Icons.Filled assembly metadata), not guessed. Semantics roughly follow the mapping used upstream:

  • Databases / search: Database, DatabaseMultiple, DatabaseSearch, WindowDatabase (admin UIs)
  • Message brokers: MailMultiple / Mail
  • AI / ML: BrainCircuit, ImageSparkle
  • Storage: HardDrive, FolderOpen
  • Identity / secrets: PersonLock, Vault, LockClosed
  • Language runtimes: dedicated Code*Rectangle icons where they exist (CodePyRectangle for Python.Extensions, CodeTsRectangle for Deno — matching the existing CodeJsRectangle used by JavaScript.Extensions and upstream's CodeCsRectangle for .NET projects); falls back to generic Code/WindowConsole for Go, Rust, Perl and PowerShell, which have no dedicated FluentUI icon
  • Misc: Flag (feature flags), TopSpeed (k6), Payment (Stripe), PeopleTeam (Squad), PuzzlePiece/Cube (Dapr), ChartMultiple (Umami), GlobeArrowForward (Ngrok), ServerMultiple/Archive (Kind)

Verification

  • All 45 affected projects build individually with 0 warnings/errors, and the full CommunityToolkit.Aspire.slnx solution builds clean.
  • Ran the example AppHosts for a representative sample across each icon category (DuckDB, Mosquitto, Flagd, RustFs, Python.Extensions, Zitadel, k6, Stripe) and visually confirmed the correct icon renders in the Aspire dashboard for each resource — no fallback/default icons appeared.

Note for maintainers

K3sClusterResource currently uses .WithIconName("Kubernetes"), which is not a real FluentUI icon name and will silently fail to resolve in the dashboard. Left untouched here since it's an existing icon rather than a missing one, but flagging it as a possible follow-up.

PR Checklist

  • Created a feature/dev branch (not on main)
  • Based off latest main branch of toolkit
  • PR doesn't include merge commits
  • New integration (N/A — no new integrations added)
  • Contains NO breaking changes
  • Every new API (including internal ones) has full XML docs (N/A — no new public API, WithIconName is an existing upstream Aspire API)
  • Code follows all style conventions

Other information

No tests were added since this only attaches an existing, already-tested extension method (WithIconName) to existing resource-construction call sites — there's no new behavior to unit test beyond what Aspire.Hosting's own WithIconName tests already cover.

🤖 Generated with Claude Code

Adds .WithIconName(...) annotations to resources across 45 hosting
integration packages that previously had no explicit dashboard icon,
so they no longer fall back to generic type-based heuristics in the
Aspire dashboard (mirrors microsoft/aspire#18954 upstream). Icon names
were verified against the FluentUI Filled icon set the dashboard
resolves against, and language-runtime resources use the dedicated
Code*Rectangle icons where one exists (C#, F#, JS, Python, Ruby, TS,
VB), falling back to a generic icon for Go/Rust/Perl/PowerShell which
have no dedicated icon.

Verified by running example AppHosts for a representative sample
across each icon category (database, message broker, storage,
language runtime, identity, feature flag, performance testing,
payments) and confirming the correct icon renders in the dashboard.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.sh | bash -s -- 1612

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.ps1) } 1612"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟢 Approval recommended

No unresolved blocking issues were identified.

Review effort: Lite
Findings: None

What changed in this PR

Adds explicit Fluent UI dashboard icons across 45 hosting integration packages, replacing generic resource-type fallbacks without changing runtime behavior.

Changes:

  • Annotates services, runtimes, child resources, and companion tools with semantic icons.
  • Preserves existing lifecycle, endpoint, health-check, and manifest behavior.
  • Adds no public API or functional behavior changes.
File Change
src/​CommunityToolkit.Aspire.Hosting.Zitadel/​ZitadelHostingExtensions.cs Adds identity icon.
src/​CommunityToolkit.Aspire.Hosting.Umami/​UmamiBuilderExtensions.cs Adds analytics icon.
src/​CommunityToolkit.Aspire.Hosting.SurrealDb/​SurrealDbBuilderExtensions.cs Adds database and UI icons.
src/​CommunityToolkit.Aspire.Hosting.Stripe/​StripeExtensions.cs Adds payment icon.
src/​CommunityToolkit.Aspire.Hosting.StableDiffusionCpp/​StableDiffusionCppResourceBuilderExtensions.cs Adds AI/image icons.
src/​CommunityToolkit.Aspire.Hosting.Squad/​SquadBuilderExtensions.cs Adds team icon.
src/​CommunityToolkit.Aspire.Hosting.Solr/​SolrBuilderExtensions.cs Adds search database icon.
src/​CommunityToolkit.Aspire.Hosting.Sftp/​SftpHostingExtensions.cs Adds storage icon.
src/​CommunityToolkit.Aspire.Hosting.SeaweedFS/​SeaweedFSBuilderExtensions.cs Adds storage icon.
src/​CommunityToolkit.Aspire.Hosting.RustFs/​RustFsBuilderExtensions.cs Adds storage and bucket icons.
src/​CommunityToolkit.Aspire.Hosting.Rust/​RustAppHostingExtension.cs Adds runtime icon.
src/​CommunityToolkit.Aspire.Hosting.RedPanda/​RedPandaBuilderExtensions.cs Adds broker and UI icons.
src/​CommunityToolkit.Aspire.Hosting.RavenDB/​RavenDBBuilderExtensions.cs Adds server and database icons.
src/​CommunityToolkit.Aspire.Hosting.Python.Extensions/​UvicornAppHostingExtension.cs Adds Python runtime icon.
src/​CommunityToolkit.Aspire.Hosting.Python.Extensions/​UvAppHostingExtension.cs Adds Python runtime icon.
src/​CommunityToolkit.Aspire.Hosting.Python.Extensions/​StreamlitAppHostingExtension.cs Adds Python runtime icon.
src/​CommunityToolkit.Aspire.Hosting.PowerShell/​PowerShellRunspacePoolResourceBuilderExtensions.cs Adds console icon.
src/​CommunityToolkit.Aspire.Hosting.PowerShell/​DistributedApplicationBuilderExtensions.cs Adds console icon.
src/​CommunityToolkit.Aspire.Hosting.Posta/​PostaHostingExtensions.cs Adds mail icon.
src/​CommunityToolkit.Aspire.Hosting.Perl/​PerlAppResourceBuilderExtensions.PackageManager.cs Adds installer icons.
src/​CommunityToolkit.Aspire.Hosting.Perl/​PerlAppResourceBuilderExtensions.cs Adds runtime icon.
src/​CommunityToolkit.Aspire.Hosting.PapercutSmtp/​PapercutSmtpHostingExtension.cs Adds mail icon.
src/​CommunityToolkit.Aspire.Hosting.Ollama/​OllamaResourceBuilderExtensions.OpenWebUI.cs Adds chat icon.
src/​CommunityToolkit.Aspire.Hosting.Ollama/​OllamaResourceBuilderExtensions.Model.cs Adds AI model icon.
src/​CommunityToolkit.Aspire.Hosting.Ollama/​OllamaResourceBuilderExtensions.cs Adds AI service icons.
src/​CommunityToolkit.Aspire.Hosting.Ngrok/​NgrokExtensions.cs Adds tunnel icon.
src/​CommunityToolkit.Aspire.Hosting.Mosquitto/​MosquittoBuilderExtensions.cs Adds broker icon.
src/​CommunityToolkit.Aspire.Hosting.Meilisearch/​MeilisearchBuilderExtensions.cs Adds search database icon.
src/​CommunityToolkit.Aspire.Hosting.McpInspector/​McpInspectorResourceBuilderExtensions.cs Adds tool icon.
src/​CommunityToolkit.Aspire.Hosting.MailPit/​MailPitHostingExtension.cs Adds mail icon.
src/​CommunityToolkit.Aspire.Hosting.Logto/​LogtoBuilderExtensions.cs Adds identity icon.
src/​CommunityToolkit.Aspire.Hosting.Listmonk/​ListmonkBuilderExtensions.cs Adds messaging icon.
src/​CommunityToolkit.Aspire.Hosting.LavinMQ/​LavinMQHostingExtension.cs Adds broker icon.
src/​CommunityToolkit.Aspire.Hosting.KurrentDB/​KurrentDBBuilderExtensions.cs Adds database icon.
src/​CommunityToolkit.Aspire.Hosting.Kind/​KubernetesEnvironmentKindExtensions.cs Adds cluster icon.
src/​CommunityToolkit.Aspire.Hosting.Kind/​KindManifestResourceBuilderExtensions.cs Adds manifest icon.
src/​CommunityToolkit.Aspire.Hosting.Kind/​KindHelmChartResourceBuilderExtensions.cs Adds chart icon.
src/​CommunityToolkit.Aspire.Hosting.Kind/​KindClusterResourceBuilderExtensions.cs Adds cluster icon.
src/​CommunityToolkit.Aspire.Hosting.k6/​K6BuilderExtensions.cs Adds load-testing icon.
src/​CommunityToolkit.Aspire.Hosting.Golang/​GolangAppHostingExtension.cs Adds Go runtime and installer icons.
src/​CommunityToolkit.Aspire.Hosting.GoFeatureFlag/​GoFeatureFlagBuilderExtensions.cs Adds feature-flag icon.
src/​CommunityToolkit.Aspire.Hosting.Flyway/​DistributedApplicationBuilderExtensions.cs Adds migration icon.
src/​CommunityToolkit.Aspire.Hosting.Flagd/​FlagdBuilderExtensions.cs Adds feature-flag icon.
src/​CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions/​ElasticvueBuilderExtensions.cs Adds database UI icon.
src/​CommunityToolkit.Aspire.Hosting.DuckDB/​DuckDBResourceBuilderExtensions.cs Adds database icon.
src/​CommunityToolkit.Aspire.Hosting.Deno/​DenoAppHostingExtensions.cs Adds runtime and installer icons.
src/​CommunityToolkit.Aspire.Hosting.Dapr/​IDistributedApplicationComponentBuilderExtensions.cs Adds sidecar icon.
src/​CommunityToolkit.Aspire.Hosting.Dapr/​IDistributedApplicationBuilderExtensions.cs Adds component icon.
src/​CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager/​BitwardenSecretManagerExtensions.cs Adds vault and secret icons.
src/​CommunityToolkit.Aspire.Hosting.Azure.Extensions/​AzureStorageExplorerBuilderExtensions.cs Adds storage icon.
src/​CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder/​DataApiBuilderHostingExtension.cs Adds database-link icon.
src/​CommunityToolkit.Aspire.Hosting.Azure.Dapr/​AzureDaprHostingExtensions.cs Adds component icon.
src/​CommunityToolkit.Aspire.Hosting.ActiveMQ/​ActiveMQBuilderExtensions.cs Adds broker icon.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@afscrome
afscrome enabled auto-merge (squash) September 22, 2026 23:00
@github-actions

Copy link
Copy Markdown
Contributor

Code Coverage

Package Line Rate Branch Rate Complexity Health
CommunityToolkit.Aspire.DuckDB.Api 99% 100% 13 ✔
CommunityToolkit.Aspire.DuckDB.NET.Data 52% 45% 28 ❌
CommunityToolkit.Aspire.GoFeatureFlag 83% 81% 36 ✔
CommunityToolkit.Aspire.Hosting.ActiveMQ 88% 48% 58 ✔
CommunityToolkit.Aspire.Hosting.ActiveMQ.MassTransit 16% 4% 217 ❌
CommunityToolkit.Aspire.Hosting.Adminer 98% 70% 12 ✔
CommunityToolkit.Aspire.Hosting.Azure.Dapr 29% 5% 35 ❌
CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis 56% 46% 26 ❌
CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder 86% 83% 18 ✔
CommunityToolkit.Aspire.Hosting.Azure.Extensions 64% 30% 27 ➖
CommunityToolkit.Aspire.Hosting.Bitwarden.SecretManager 59% 51% 700 ❌
CommunityToolkit.Aspire.Hosting.Dapr 45% 25% 443 ❌
CommunityToolkit.Aspire.Hosting.DbGate 96% 62% 12 ✔
CommunityToolkit.Aspire.Hosting.Dbx 92% 59% 22 ✔
CommunityToolkit.Aspire.Hosting.Deno 96% 85% 24 ✔
CommunityToolkit.Aspire.Hosting.DuckDB 98% 90% 10 ✔
CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions 100% 94% 21 ✔
CommunityToolkit.Aspire.Hosting.Flagd 81% 100% 16 ✔
CommunityToolkit.Aspire.Hosting.Flyway 100% 100% 3 ✔
CommunityToolkit.Aspire.Hosting.GoFeatureFlag 80% 50% 24 ✔
CommunityToolkit.Aspire.Hosting.GoFeatureFlag.ApiService 100% 100% 3 ✔
CommunityToolkit.Aspire.Hosting.k6 71% 10% 8 ➖
CommunityToolkit.Aspire.Hosting.k6.ApiService 64% 67% 6 ➖
CommunityToolkit.Aspire.Hosting.Kind 89% 75% 507 ✔
CommunityToolkit.Aspire.Hosting.KurrentDB 88% 100% 19 ✔
CommunityToolkit.Aspire.Hosting.LavinMQ 91% 83% 18 ✔
CommunityToolkit.Aspire.Hosting.LavinMQ.MassTransit 16% 4% 217 ❌
CommunityToolkit.Aspire.Hosting.Listmonk 95% 100% 24 ✔
CommunityToolkit.Aspire.Hosting.Logto 73% 67% 24 ➖
CommunityToolkit.Aspire.Hosting.MailPit 92% 100% 13 ✔
CommunityToolkit.Aspire.Hosting.McpInspector 85% 60% 80 ✔
CommunityToolkit.Aspire.Hosting.McpInspector.McpServer 89% 100% 2 ✔
CommunityToolkit.Aspire.Hosting.Meilisearch 95% 80% 29 ✔
CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService 80% 100% 9 ✔
CommunityToolkit.Aspire.Hosting.MongoDB.Extensions 88% 69% 18 ✔
CommunityToolkit.Aspire.Hosting.Mosquitto 90% 67% 17 ✔
CommunityToolkit.Aspire.Hosting.MySql.Extensions 90% 71% 36 ✔
CommunityToolkit.Aspire.Hosting.Ngrok 56% 43% 95 ❌
CommunityToolkit.Aspire.Hosting.Ollama 77% 67% 265 ➖
CommunityToolkit.Aspire.Hosting.PapercutSmtp 100% 100% 9 ✔
CommunityToolkit.Aspire.Hosting.Perl 88% 79% 716 ✔
CommunityToolkit.Aspire.Hosting.Posta 97% 80% 78 ✔
CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions 91% 87% 46 ✔
CommunityToolkit.Aspire.Hosting.PowerShell 76% 59% 83 ➖
CommunityToolkit.Aspire.Hosting.Python.Extensions 46% 31% 44 ❌
CommunityToolkit.Aspire.Hosting.RavenDB 68% 49% 105 ➖
CommunityToolkit.Aspire.Hosting.RavenDB.ApiService 24% 33% 8 ❌
CommunityToolkit.Aspire.Hosting.Redis.Extensions 88% 50% 22 ✔
CommunityToolkit.Aspire.Hosting.RedPanda 99% 75% 46 ✔
CommunityToolkit.Aspire.Hosting.RedPanda.Consumer 69% 83% 10 ➖
CommunityToolkit.Aspire.Hosting.Rust 96% 90% 13 ✔
CommunityToolkit.Aspire.Hosting.RustFs 83% 66% 102 ✔
CommunityToolkit.Aspire.Hosting.SeaweedFS 88% 80% 44 ✔
CommunityToolkit.Aspire.Hosting.Sftp 91% 62% 15 ✔
CommunityToolkit.Aspire.Hosting.Sftp.ApiService 94% 100% 10 ✔
CommunityToolkit.Aspire.Hosting.Solr 88% 100% 15 ✔
CommunityToolkit.Aspire.Hosting.SqlServer.Extensions 82% 63% 40 ✔
CommunityToolkit.Aspire.Hosting.Squad 94% 80% 80 ✔
CommunityToolkit.Aspire.Hosting.Squad.ApiApp 63% 16% 28 ➖
CommunityToolkit.Aspire.Hosting.StableDiffusionCpp 55% 47% 82 ❌
CommunityToolkit.Aspire.Hosting.Stripe 50% 17% 117 ❌
CommunityToolkit.Aspire.Hosting.SurrealDb 89% 74% 191 ✔
CommunityToolkit.Aspire.Hosting.SurrealDb.ApiService 52% 38% 440 ❌
CommunityToolkit.Aspire.Hosting.Umami 100% 75% 7 ✔
CommunityToolkit.Aspire.Hosting.Zitadel 97% 86% 27 ✔
CommunityToolkit.Aspire.KurrentDB 55% 70% 25 ❌
CommunityToolkit.Aspire.Meilisearch 81% 71% 30 ✔
CommunityToolkit.Aspire.RavenDB.Client 35% 38% 67 ❌
CommunityToolkit.Aspire.SeaweedFS.Client 95% 86% 76 ✔
CommunityToolkit.Aspire.Sftp 57% 65% 38 ❌
CommunityToolkit.Aspire.SurrealDb 49% 46% 30 ❌
SeaweedFS.ApiService 19% 5% 225 ❌
Summary 72% (11391 / 15866) 51% (2974 / 5788) 6004 ➖

@afscrome
afscrome deployed to azure-artifacts September 22, 2026 23:06 — with GitHub Actions Active
@afscrome
afscrome merged commit 6df3979 into main Sep 22, 2026
216 of 217 checks passed
@afscrome
afscrome deleted the claude/community-toolkit-resource-icons-637198 branch September 22, 2026 23:14

This branch was successfully deployed

1 active deployment
azure-artifacts — 4c4d65ca Deployed Sep 22, 2026 by afscrome via publish-azure-artifacts #3693
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants