James Newton-King ♔

@james.newtonking.com

Principal Software Engineer ASP.NET. Author of Newtonsoft.Json.

Upgrading a 10-year-old website with AI 🤖 🚀 .NET Framework → .NET 10 🌐 ASP.NET MVC → ASP.NET Core 🗄️ Entity Framework 6 → EF Core 10 🎨 Bootstrap 3 → Bootstrap 5 ⚡ Sync → Async 💎 KnockoutJS → KnockoutJS (perfection doesn't change)

Aspire 13.1 new dashboard features, day 7: Small QoL improvement: when logs are associated with a Gen AI span, a button to open the visualizer is shown ✨ No need to jump to the traces page, making the Gen AI visualizer easier to discover ⛵️

Screenshot of the structured logs page with the Gen AI button displayed.

Aspire 13.1 new dashboard features, day 4: Bug fixes! 🐞 🌐 Status code middleware no longer interfers with API calls 💫 Interaction service can open a dialog when the dashboard is first loaded 🤡 Trace detail page doesn't error when a span duration is 24+ days (2^32 ms)

Aspire 13.1 new dashboard features, day 3: Resource health checks now show when they last ran ❤️‍🩹 This change removes uncertainty when viewing the dashboard: Yes, your resource is still broken, and no, Aspire hasn't stopped checking it 🙃

Screenshot of the dashboard showing the last time a health check ran.

Aspire 13 new dashboard features, day 6: Introducing the Aspire MCP server. Integrate Aspire into your dev AI eco-system. 🚀 Observe resources (health status, endpoints, etc) 🪄 Debug with real-time console logs 📊 Investigate dev-time telemetry ⚙️ Execute resource commands

Screenshot of Aspire MCP dialog

Aspire 13 new dashboard features, day 5: The interaction service just got a major upgrade ⚡ 💫 Dropdowns can now accept text — in other words, ComboBox inputs. 🔄 Supports dynamic data loading for cascading dropdowns. See it in action in the Azure provisioning dialog 🚀

Screenshot of the Azure provisioning dialog.

Aspire 13 new dashboard features, day 3: Big perf gains when displaying traces with thousands of spans: 📂 Don’t refetch trace if it hasn’t changed 🔍 Use dictionary lookups to turn O(n) → O(1) 🧠 Cache calculations Large traces (10k+ spans) now update in sub-second time!

Aspire 13 new dashboard features, day 2: New dashboard accent colors. 🎨 They're now more FluentUI-ish (saturation++) with custom tweaks for light and dark themes. Dark blue is no longer almost invisible on a dark background 🤓

Color preview web page

Aspire 9.5 new dashboard features, day 10: Introducing the Gen AI Visualizer ✨ Collate and summarize AI telemetry: 🗃️ Explore input and output messages 🚀 JSON/XML payloads highlighted and indented 🖼️ Preview Markdown and multimodal content (e.g. images)

Aspire 9.5 new dashboard features, day 9: Span details now show the destination of a span 📍 For database calls, HTTP requests, or RPC calls, Aspire matches the target address to a resource and displays it as a clickable link 🔗

Trace detail page showing destination resource in details.

Aspire 9.5 new dashboard features, day 6: Traces pages now have a type filter 🔎 - a quick way to find traces and spans for the selected operation type. For example, choose Messaging 📬 to see only traces from your app that interact with RabbitMQ.

Traces page with a type selected.

Aspire 9.5 new dashboard features, day 5: The dashboard selects the best duration unit based on its length: Long → seconds (s) Short → milliseconds (ms) Very short → microseconds (μs) In 9.5 you'll see seconds more often, with microseconds shown only to avoid 0.00ms.

Fun AI use: Updating the accent colors in the Aspire dashboard to be more Fluent design-ish. AI tasks: 🎨 Tweak the existing color scheme to follow Fluent 🌃 Output light are dark optimized colors 🌐 Generate HTML page to preview

Color preview web page