{"id":516,"date":"2026-09-29T15:32:58","date_gmt":"2026-09-29T22:32:58","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/aspire\/?p=516"},"modified":"2026-09-30T10:30:20","modified_gmt":"2026-09-30T17:30:20","slug":"whats-new-aspire-13-6","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/aspire\/whats-new-aspire-13-6\/","title":{"rendered":"Aspire 13.6: Your dashboard gets memory"},"content":{"rendered":"<p>Aspire 13.6 is out today, and it includes potentially the longest awaited Aspire feature ever&#8230; <a href=\"https:\/\/github.com\/microsoft\/aspire\/issues\/4256\">persistent dashboard data<\/a>! The Aspire Dashboard now keeps your runs around so you can still see traces and logs after you&#8217;ve restarted your full stack. That alone would make this a stellar release, but 13.6 also lets you interact with any container shell from the dashboard, brings Java and Rust hosting into the first-party lineup, and previews a brand-new Azure deployment target.<\/p>\n<p>As usual, these are some of my favorites, but the complete inventory, migration notes, and breaking changes are detailed in the <a href=\"https:\/\/aspire.dev\/whats-new\/aspire-13-6\/\">aspire.dev What&#8217;s New<\/a>.<\/p>\n<p><div  class=\"d-flex justify-content-center\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/get.aspire.dev\" target=\"_blank\">Get Aspire 13.6<\/a><\/div><\/p>\n<h2>\ud83d\uddc4\ufe0f Your dashboard remembers<\/h2>\n<p>Finally!!! The dashboard now automatically stores resource snapshots and telemetry after you stop the apphost. When you start the apphost again, the dashboard starts a fresh &#8220;run&#8221;, and you can quickly swap between live and past sessions with the run selector.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/aspire\/wp-content\/uploads\/sites\/90\/2026\/09\/dashboard-run-history.webp\" alt=\"The Aspire 13.6 dashboard showing structured logs from an earlier run with the run selector open\" \/><\/p>\n<p>Filtering, search, paging, and aggregation all work on historical runs, so investigating an old run still gives you all the power of the dashboard. Historical runs are read-only, so you can poke around without worrying about changing anything. The runs are stored on disk as SQLite databases, so you can point your coding agent at them to compare and contrast between runs, too.<\/p>\n<p>The dashboard keeps up to 10 runs per application and prunes the oldest ones as new runs start. If a run captured something you want to hang onto, like the one time you actually reproduced a tricky bug, pin it in the run selector to retain it.<\/p>\n<p>Running the <a href=\"https:\/\/aspire.dev\/dashboard\/standalone\/\">standalone dashboard<\/a> without an apphost? Give it a stable application name and opt into <strong>Resume<\/strong> so the same run survives restarts:<\/p>\n<pre><code class=\"language-bash\">aspire dashboard run --application-name my-app --persistence Resume<\/code><\/pre>\n<p>We also raised the default limits for console logs, structured logs, and traces to 100,000 entries each, so a busy run holds a lot more before the oldest entries roll off.<\/p>\n<p><div class=\"alert alert-info\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Protect your telemetry<\/strong><\/p>Persisted telemetry can contain sensitive values, and the underlying on-disk database has no separate encryption or authorization layer. The dashboard is still a development and short-term diagnostics tool, not a production telemetry backend.<\/div><\/p>\n<p>Learn more about <a href=\"https:\/\/aspire.dev\/dashboard\/data-persistence\/\">dashboard data persistence<\/a>.<\/p>\n<h2>\u2328\ufe0f Exec against your containers from the dashboard<\/h2>\n<p>When I want to check what&#8217;s actually installed on a container image, I usually drop into my container runtime of choice, find the tab that gives me a terminal, and start typing. If I want to do anything more complicated, like manually clear my cache, I have to copy-paste passwords or the connection string and hope I grabbed the right one.<\/p>\n<p>In 13.6, we created the <code>WithRepl()<\/code> extension for common container-based integrations:<\/p>\n<div id=\"repl-code\" role=\"tablist\">\n<div id=\"repl-code-ts\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span data-bs-toggle=\"tab\" data-bs-target=\"#repl-code-cs\"><button type=\"button\" aria-controls=\"repl-code-cs\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">C#<\/button><\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#repl-code-ts\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">TypeScript<\/span>\n    <\/div>\n<pre><code class=\"language-typescript\">const postgres = await builder.addPostgres('postgres')\n    .withRepl();<\/code><\/pre>\n<\/p><\/div>\n<div id=\"repl-code-cs\" class=\"active show\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span class=\"active\" data-bs-toggle=\"tab\" data-bs-target=\"#repl-code-cs\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">C#<\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#repl-code-ts\"><button type=\"button\" aria-controls=\"repl-code-ts\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">TypeScript<\/button><\/span>\n    <\/div>\n<pre><code class=\"language-csharp\">var postgres = builder.AddPostgres(\"postgres\")\n    .WithRepl();<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>Now, the resource has a <strong>REPL<\/strong> command in the dashboard. Click it, and the client bundled in the container opens in the dashboard&#8217;s new terminal dock, already authenticated. You can start querying without installing anything, copying credentials, or leaving the dashboard.<\/p>\n<p>REPL support ships in preview for PostgreSQL (<code>psql<\/code>), MySQL, SQL Server (<code>sqlcmd<\/code>), MongoDB (<code>mongosh<\/code>), Redis (<code>redis-cli<\/code>), and Valkey, and we are excited to add more based on your feedback. Because it uses the resource&#8217;s real credentials with full write access, you have to opt in with <code>WithRepl()<\/code> \/ <code>withRepl()<\/code>, and it only works in run mode.<\/p>\n<p>The new experimental terminal dock APIs are fully accessible to you, so you can create and drive any terminals for any container or executable resource. We have a lot of plans for more built-in functionality with the dock, so we&#8217;re super excited to hear your feedback and see what you build!<\/p>\n<p>This complements the <a href=\"https:\/\/aspire.dev\/dashboard\/terminals\/\">console-app resource support<\/a> that started with <code>WithTerminal()<\/code> in 13.5. A resource that is a standalone console app still gets its own fully interactive terminal on the Console page; now, you also have a generic shell to exec into any resource type.<\/p>\n<p>Stay tuned for a deep dive blog on how all of this works, aka how @mitchdenny accidentally built the most powerful terminal emulator on the planet!<\/p>\n<h2>\u2615\ud83e\udd80 Java and Rust join the first-party lineup<\/h2>\n<p>Java and Rust developers have been orchestrating their apps thanks to the <a href=\"https:\/\/github.com\/CommunityToolkit\/Aspire\">Aspire Community Toolkit<\/a> for a while. In 13.6, both integrations move into Aspire itself as <code>Aspire.Hosting.Java<\/code> and <code>Aspire.Hosting.Rust<\/code>, reworked to match the experience you get with JavaScript, Python, and Go. Huge thanks to <a href=\"https:\/\/github.com\/marshalhayes\">@marshalhayes<\/a> and <a href=\"https:\/\/github.com\/afscrome\">@afscrome<\/a>, whose community contributions made this happen.<\/p>\n<p>Here&#8217;s a Spring Boot catalog service and a Cargo pricing API in the same apphost:<\/p>\n<div id=\"polyglot-code\" role=\"tablist\">\n<div id=\"polyglot-code-ts\" class=\"active show\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span class=\"active\" data-bs-toggle=\"tab\" data-bs-target=\"#polyglot-code-ts\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">TypeScript<\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#polyglot-code-cs\"><button type=\"button\" aria-controls=\"polyglot-code-cs\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">C#<\/button><\/span>\n    <\/div>\n<pre><code class=\"language-typescript\">const catalog = await builder.addSpringBootApp('catalog', '..\/catalog');\nconst pricing = await builder.addRustApp('pricing', '..\/pricing');<\/code><\/pre>\n<\/p><\/div>\n<div id=\"polyglot-code-cs\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span data-bs-toggle=\"tab\" data-bs-target=\"#polyglot-code-ts\"><button type=\"button\" aria-controls=\"polyglot-code-ts\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">TypeScript<\/button><\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#polyglot-code-cs\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">C#<\/span>\n    <\/div>\n<pre><code class=\"language-csharp\">var catalog = builder.AddSpringBootApp(\"catalog\", \"..\/catalog\");\nvar pricing = builder.AddRustApp(\"pricing\", \"..\/pricing\");<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>On the Java side, you also get Quarkus, executable JARs, and Maven or Gradle wrapper tasks. Aspire detects the target Java release from your build, configures OpenTelemetry export so your telemetry lands in the dashboard (add <code>WithOtelAgent()<\/code> when you want the Java agent&#8217;s automatic instrumentation), and generates a multi-stage Dockerfile when you publish. Rust apps get Cargo target, argument, and feature configuration, plus a generated Dockerfile of their own.<\/p>\n<p>Both languages also work with the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=microsoft-aspire.aspire-vscode\">Aspire VS Code extension<\/a>, so you can hit <strong>Start Debugging<\/strong> and set breakpoints in your Spring controller or Rust handler alongside the rest of your app.<\/p>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Preview packages<\/strong><\/p><code>Aspire.Hosting.Java<\/code> and <code>Aspire.Hosting.Rust<\/code> ship as preview packages in 13.6. If you&#8217;re coming from the Toolkit, follow the migration guidance in the <a href=\"https:\/\/aspire.dev\/integrations\/frameworks\/java\/java-host\/\">Java<\/a> and <a href=\"https:\/\/aspire.dev\/integrations\/frameworks\/rust\/rust-host\/\">Rust<\/a> hosting docs.<\/div><\/p>\n<p>And yes, for the adventurous, Java and Rust apphost authoring is also available behind <a href=\"https:\/\/aspire.dev\/reference\/cli\/configuration\/#toggle-preview-feature-experiences\">experimental feature flags<\/a>.<\/p>\n<h2>\ud83d\udcc2 One volume path, local and deployed<\/h2>\n<p>If your app writes files, it needs a directory. Locally that&#8217;s a path on your machine, and in a container it&#8217;s a mount path like <code>\/data<\/code>. That difference usually ends up as a little bit of environment-sniffing code in your app.<\/p>\n<p>13&#46;6 adds an <code>env<\/code> argument to any executable&#8217;s volume mount, so your app reads one environment variable everywhere:<\/p>\n<div id=\"volume-code\" role=\"tablist\">\n<div id=\"volume-code-ts\" class=\"active show\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span class=\"active\" data-bs-toggle=\"tab\" data-bs-target=\"#volume-code-ts\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">TypeScript<\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#volume-code-cs\"><button type=\"button\" aria-controls=\"volume-code-cs\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">C#<\/button><\/span>\n    <\/div>\n<pre><code class=\"language-typescript\">const api = await builder.addProject('api', '..\/Api\/Api.csproj');\nawait api.withVolume('\/data', 'data', 'DATA_PATH');<\/code><\/pre>\n<\/p><\/div>\n<div id=\"volume-code-cs\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span data-bs-toggle=\"tab\" data-bs-target=\"#volume-code-ts\"><button type=\"button\" aria-controls=\"volume-code-ts\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">TypeScript<\/button><\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#volume-code-cs\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">C#<\/span>\n    <\/div>\n<pre><code class=\"language-csharp\">builder.AddProject&lt;Projects.Api&gt;(\"api\")\n    .WithVolume(\"data\", \"\/data\", env: \"DATA_PATH\");<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>When you run locally, <code>DATA_PATH<\/code> points to a stable, workload-specific directory in the apphost&#8217;s local store. When you publish to Docker Compose, Kubernetes, or a managed cloud like Azure Container Apps, <code>DATA_PATH<\/code> is <code>\/data<\/code>. Your app code just reads <code>DATA_PATH<\/code> and moves on with its life.<\/p>\n<p>See <a href=\"https:\/\/aspire.dev\/fundamentals\/persist-data-volumes\/\">Persist data with volume resources<\/a> for the details, including how this works with 13.5&#8217;s <a href=\"https:\/\/aspire.dev\/deployment\/kubernetes\/persistent-volumes\/\">persistent volume support for Kubernetes<\/a>.<\/p>\n<h2>\u2601\ufe0f Deploy to Azure Container Apps Sandboxes<\/h2>\n<p>The new <code>Aspire.Hosting.Azure.Sandboxes<\/code> package adds <a href=\"https:\/\/aspire.dev\/deployment\/azure\/sandboxes\/\">Azure Container Apps Sandboxes<\/a> as a deployment target, so each of your projects, containers, and Dockerfile resources runs in its own isolated sandbox. Add a sandbox group to your apphost and run <code>aspire deploy<\/code>. Aspire provisions the group, a container registry, and the identities and role assignments it needs. If the sandbox group is your only compute environment, Aspire assigns your compute resources to it automatically.<\/p>\n<p>When you want more control, pick a tier and configure auto-suspend:<\/p>\n<div id=\"sandbox-code\" role=\"tablist\">\n<div id=\"sandbox-code-ts\" class=\"active show\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span class=\"active\" data-bs-toggle=\"tab\" data-bs-target=\"#sandbox-code-ts\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">TypeScript<\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#sandbox-code-cs\"><button type=\"button\" aria-controls=\"sandbox-code-cs\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">C#<\/button><\/span>\n    <\/div>\n<pre><code class=\"language-typescript\">import { AzureSandboxTier, createBuilder } from '.\/.aspire\/modules\/aspire.mjs';\n<!-- -->\nconst builder = await createBuilder();\nawait builder.addAzureSandboxGroup('sandboxes');\nawait builder\n    .addDockerfile('web', '.\/web')\n    .withHttpEndpoint({ port: 8080, targetPort: 8080, name: 'http' })\n    .withExternalHttpEndpoints()\n    .publishAsAzureSandbox({\n        tier: AzureSandboxTier.Small,\n        autoSuspendEnabled: true,\n        autoSuspendInterval: 900_000 \/\/ 15 minutes\n    });<\/code><\/pre>\n<\/p><\/div>\n<div id=\"sandbox-code-cs\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span data-bs-toggle=\"tab\" data-bs-target=\"#sandbox-code-ts\"><button type=\"button\" aria-controls=\"sandbox-code-ts\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">TypeScript<\/button><\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#sandbox-code-cs\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">C#<\/span>\n    <\/div>\n<pre><code class=\"language-csharp\">builder.AddAzureSandboxGroup(\"sandboxes\");\n<!-- -->\nbuilder.AddDockerfile(\"web\", \".\/web\")\n    .WithHttpEndpoint(port: 8080, targetPort: 8080, name: \"http\")\n    .WithExternalHttpEndpoints()\n    .PublishAsAzureSandbox(new AzureSandboxOptions\n    {\n        Tier = AzureSandboxTier.Small,\n        AutoSuspendEnabled = true,\n        AutoSuspendInterval = TimeSpan.FromMinutes(15)\n    });<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>As always, Aspire&#8217;s defaults lean safe. Only endpoints marked external get a public HTTPS URL, and those URLs require Microsoft Entra ID authentication unless you opt a specific endpoint into anonymous access. Egress is deny-by-default, and Aspire cleans up stale sandboxes on redeploy and on <code>aspire destroy<\/code>.<\/p>\n<p><div class=\"alert alert-success\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Lightbulb\"><\/i><strong>Preview<\/strong><\/p>Azure Container Apps Sandboxes requires preview access in your Azure subscription and region, and the Aspire package is prerelease. Volumes, TCP ports, private service discovery, and Windows or ARM64 images aren&#8217;t supported yet.<\/div><\/p>\n<p>Get started with <a href=\"https:\/\/aspire.dev\/deployment\/azure\/sandboxes\/\">Deploy to Azure Container Apps Sandboxes<\/a>. If you&#8217;re deploying to regular Azure Container Apps, you can also try the experimental <a href=\"https:\/\/aspire.dev\/deployment\/azure\/container-apps\/#express-environments\">Express mode<\/a> with <code>AsExpress()<\/code> for faster provisioning and scale-to-zero.<\/p>\n<h2>\ud83e\uddea C# devs: help us try the new .NET project experience<\/h2>\n<p>If you&#8217;re building with C#, 13.6 has something new for you to kick the tires on. <code>AddDotnetProject<\/code>, from the prerelease <code>Aspire.Hosting.Dotnet<\/code> package, is the next version of how Aspire builds and runs your .NET projects, bringing it to parity with the modernized experience for every other language resource. You point it straight at a <code>.csproj<\/code>, so there&#8217;s no <code>ProjectReference<\/code> to wire up in your apphost:<\/p>\n<div id=\"dotnet-project-code\" role=\"tablist\">\n<div id=\"dotnet-project-code-cs\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span data-bs-toggle=\"tab\" data-bs-target=\"#dotnet-project-code-ts\"><button type=\"button\" aria-controls=\"dotnet-project-code-ts\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">TypeScript<\/button><\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#dotnet-project-code-cs\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">C#<\/span>\n    <\/div>\n<pre><code class=\"language-csharp\">builder.AddDotnetProject(\"api\", \"..\/Api\/Api.csproj\");<\/code><\/pre>\n<\/p><\/div>\n<div id=\"dotnet-project-code-ts\" class=\"active show\" style=\"display:none\">\n<div style=\"display:flex;gap:2px;padding:0 8px;font-size:14px\">\n      <span class=\"active\" data-bs-toggle=\"tab\" data-bs-target=\"#dotnet-project-code-ts\" aria-current=\"true\" style=\"padding:6px 14px;border-radius:8px 8px 0 0;background:var(--clr-codeblock-btn-bg);color:var(--clr-body);font-weight:600\">TypeScript<\/span><span data-bs-toggle=\"tab\" data-bs-target=\"#dotnet-project-code-cs\"><button type=\"button\" aria-controls=\"dotnet-project-code-cs\" style=\"padding:6px 14px;border:0;border-radius:8px 8px 0 0;background:transparent;color:var(--clr-codeblock-btn);cursor:pointer\">C#<\/button><\/span>\n    <\/div>\n<pre><code class=\"language-typescript\">const api = await builder.addDotnetProject('api', '..\/Api\/Api.csproj');<\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>Instead of restoring and building every project on its own, Aspire groups compatible projects and builds them together with one shared NuGet restore. On a new enough .NET 11 SDK, it also turns on MSBuild&#8217;s multithreaded task execution. When you change code, hit the resource&#8217;s <strong>Rebuild<\/strong> command, and <strong>Start<\/strong> and <strong>Restart<\/strong> reuse the coordinated build output. This also means the Aspire dashboard, and any other resources, will start sooner since Aspire doesn&#8217;t have to wait for the entire MSBuild graph to resolve.<\/p>\n<p>Already have an apphost full of <code>AddProject<\/code> calls? Run <code>aspire agent init<\/code> and run the <code>aspire-project-v2-migration<\/code> skill. Your agent assesses each project resource, proposes the exact edits, and waits for your approval before touching anything. This is still prerelease, so now is the perfect time to try it on a real app and tell us what breaks. Learn more about <a href=\"https:\/\/aspire.dev\/integrations\/dotnet\/project-resources\/#coordinated-builds-and-restore\">coordinated builds and restore<\/a> and <a href=\"https:\/\/aspire.dev\/integrations\/dotnet\/project-resources\/#migrate-from-legacy-project-resources\">migrating from legacy project resources<\/a>.<\/p>\n<h2>\ud83c\udfc5 Grab bag<\/h2>\n<p>Some other things you might be hoping to hear about shipped in 13.6:<\/p>\n<ul>\n<li><code>aspire run<\/code> and <code>aspire start<\/code> accept <code>--launch-profile<\/code> (or <code>-lp<\/code>) to pick an apphost launch profile.<\/li>\n<li><code>aspire stop --force --volumes<\/code> also removes the volumes Aspire created, while leaving bind mounts and pre-existing volumes alone.<\/li>\n<li>Coding agents can start and stop apphosts through the VS Code extension&#8217;s lifecycle tools, and the Aspire pane now has <strong>Deploy<\/strong> and <strong>Publish<\/strong> actions right next to <strong>Run<\/strong>.<\/li>\n<li>Deno 2 can run your TypeScript apphost, and <code>AddDenoApp<\/code> \/ <code>addDenoApp<\/code> hosts Deno apps. Thanks to <a href=\"https:\/\/github.com\/rickylabs\">@rickylabs<\/a> for both!<\/li>\n<li>TypeScript apphosts load <code>appsettings.json<\/code> from the apphost directory, just like C# apphosts.<\/li>\n<li>MongoDB gets an experimental <code>WithReplicaSet()<\/code> so you can use transactions and change streams locally.<\/li>\n<\/ul>\n<h2>\ud83d\udcab Get Aspire 13.6<\/h2>\n<p>Update the CLI, your apps, and your agent skills:<\/p>\n<pre><code class=\"language-bash\">aspire update --self\naspire update\naspire agent init<\/code><\/pre>\n<p>Then run your app, restart it a couple of times, and open the run selector in the dashboard. Add <code>WithRepl()<\/code> to your database while you&#8217;re in there, or drop a Spring Boot or Rust service into your apphost and see how it feels.<\/p>\n<p><strong>New to Aspire?<\/strong> <a href=\"https:\/\/get.aspire.dev\">Install the CLI<\/a> with your package manager of choice, and try the <a href=\"https:\/\/aspire.dev\/get-started\/add-aspire-existing-app-typescript-apphost\/\">Aspireify<\/a> skill on your existing apps.<\/p>\n<p>Share feedback on <a href=\"https:\/\/github.com\/microsoft\/aspire\">GitHub<\/a>, join us on <a href=\"https:\/\/aka.ms\/aspire-discord\">Discord<\/a>, follow <a href=\"https:\/\/x.com\/aspiredotdev\">@aspiredotdev on X<\/a>, find us on <a href=\"https:\/\/bsky.app\/profile\/aspire.dev\">BlueSky<\/a>, or subscribe on <a href=\"https:\/\/www.youtube.com\/@aspiredotdev\">YouTube<\/a>.<\/p>\n<p>Happy Aspirifying! \ud83d\udcab<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aspire 13.6 keeps dashboard telemetry across runs, opens container exec shells right in the dashboard, adds first-party Java and Rust hosting, introduces portable volume paths, and previews Azure Container Apps Sandboxes.<\/p>\n","protected":false},"author":1965,"featured_media":528,"comment_status":"open","ping_status":"closed","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,52],"tags":[9,23,53,79,80],"class_list":["post-516","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspire-category","category-releases","tag-aspire","tag-azure","tag-dashboard","tag-java","tag-rust"],"acf":[],"blog_post_summary":"<p>Aspire 13.6 keeps dashboard telemetry across runs, opens container exec shells right in the dashboard, adds first-party Java and Rust hosting, introduces portable volume paths, and previews Azure Container Apps Sandboxes.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts\/516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/users\/1965"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/comments?post=516"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts\/516\/revisions"}],"predecessor-version":[{"id":530,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts\/516\/revisions\/530"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/media\/528"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/media?parent=516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/categories?post=516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/tags?post=516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}