{"id":483,"date":"2026-06-16T10:00:00","date_gmt":"2026-06-16T17:00:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/aspire\/?p=483"},"modified":"2026-06-15T11:39:58","modified_gmt":"2026-06-15T18:39:58","slug":"aspire-vscode-extension-13-4","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/aspire\/aspire-vscode-extension-13-4\/","title":{"rendered":"Aspire in VS Code: the 13.4 developer loop"},"content":{"rendered":"<p>Visual Studio Code consistently ranks as the <a href=\"https:\/\/survey.stackoverflow.co\/2025\/technology#1-dev-id-es\">most popular<\/a> IDE for developers, and its flexibility and extension marketplace make it possible for developers using any technology or language to build and debug their applications. In 2026, we&#8217;ve brought Aspire support to VS Code, providing an integrated experience for developing, running, and deploying AppHosts inside the IDE you already use.<\/p>\n<p>The Aspire VS Code extension hooks into the <a href=\"https:\/\/aka.ms\/aspire\/cli\">Aspire CLI<\/a>. To use it, ensure that the Aspire CLI is installed and available on your <code>PATH<\/code>, or run the <code>&gt; Aspire: Install Aspire CLI (stable)<\/code> command inside VS Code after extension installation.<\/p>\n<p><div  class=\"d-flex justify-content-center\"><a class=\"cta_button_link btn-primary mb-24\" href=\"https:\/\/aka.ms\/aspire\/vscode\" target=\"_blank\">Install the Aspire VS Code extension<\/a><\/div><\/p>\n<h2>Come as you are<\/h2>\n<p>To create a new Aspire app, you can use the <code>&gt; Aspire: New Aspire project<\/code> command palette command, which will scaffold your application after prompting for a template type, app location, and whether you want to install AI skills that teach coding models how to effectively develop with Aspire.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/aspire\/wp-content\/uploads\/sites\/90\/2026\/06\/code-extension-create-aspire-project-scaled.webp\" alt=\"VS Code Aspire project template picker.\" \/><\/p>\n<p>Aspirify an existing app with the <code>&gt; Aspire: Initialize Aspire in an existing codebase<\/code> command or open a repo that already has an AppHost.<\/p>\n<h2>Debug (almost) all your resources<\/h2>\n<p>Aspire in Visual Studio Code natively supports debugging for both C# and TypeScript AppHosts.<\/p>\n<p>When launching an AppHost with the Aspire debugger, Aspire will also orchestrate and provide debugging support for C#, TS\/JS, Python, and Go resources. You can even use <a href=\"https:\/\/aspire.dev\/reference\/api\/csharp\/aspire.hosting.javascript\/javascripthostingextensions\/methods\/#withbrowserdebugger-iresourcebuilder-t-string\">WithBrowserDebugger<\/a> to automatically launch a debug browser with frontend source after the resource is healthy. Throughout the rest of 2026, we will be expanding debugger support to include additional languages like Java.<\/p>\n<h3>Set up debugging<\/h3>\n<p>To set up a launch configuration for the first time, run the <code>&gt; Aspire: Configure launch.json file<\/code> command. The generated launch config can be as small as:<\/p>\n<pre><code class=\"language-json\">{\n  \"type\": \"aspire\",\n  \"request\": \"launch\",\n  \"name\": \"Aspire: Launch default AppHost\",\n  \"program\": \"${workspaceFolder}\"\n}<\/code><\/pre>\n<p>That one debug profile is enough for the extension to build the AppHost, start resources, attach supported debuggers, and, if configured, open the Aspire dashboard. If you want more control, the same <code>type: \"aspire\"<\/code> launch config also supports <code>deploy<\/code>, <code>publish<\/code>, and <code>do<\/code> (run a pipeline step, must be paired with the <code>step<\/code> property) commands:<\/p>\n<pre><code class=\"language-json\">{\n  \"type\": \"aspire\",\n  \"request\": \"launch\",\n  \"name\": \"Aspire: Deploy AppHost\",\n  \"program\": \"${workspaceFolder}\",\n  \"command\": \"deploy\",\n  \"env\": {\n    \"ASPIRE_ENVIRONMENT\": \"Development\",\n    \"MY_ENVIRONMENT_VARIABLE\": \"Hello\"\n  },\n  \"args\": [\"--non-interactive\"]\n}<\/code><\/pre>\n<p>By using the <code>deploy<\/code> and <code>do<\/code> commands, custom publishers and pipeline steps can be debugged from the same VS Code launch path, allowing you full visibility into what your pipeline is producing and how.<\/p>\n<p>You can pass per-language debugger settings through the <code>debuggers<\/code> property.<\/p>\n<h3>Hitting F5<\/h3>\n<p>Most Aspire apps have multiple processes. A normal app might have a C# API, a React frontend, a Python worker, a browser target, a database container, and now maybe a Go service too. The extension turns the AppHost model into the right VS Code debug sessions.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/aspire\/wp-content\/uploads\/sites\/90\/2026\/06\/code-extension-debug-scaled.webp\" alt=\"VS Code Run and Debug view showing an Aspire debug session with AppHost, C#, Node.js, and browser debug sessions attached.\" \/><\/p>\n<p>The documented support includes C#\/.NET, Python, Node.js, browser apps, and Azure Functions. New in Aspire 13.4, we have also added first-party Go hosting with VS Code debugger support through <code>dlv-dap<\/code>.<\/p>\n<h2>Put resource state next to the AppHost code<\/h2>\n<p>The Aspire extension&#8217;s most noticeable editor addition is showing live resource state in your AppHost file editor. Important state and actions are available at a glance, including resource health, health check status, and available commands. This same information is available elsewhere in VS Code through the Aspire panel.<\/p>\n<p>When the AppHost is running, CodeLens appears above supported resource declarations. Note that you don&#8217;t have to start an AppHost inside VS Code to see this UI; CLI-managed runs using <code>aspire run<\/code> or <code>aspire start<\/code> are also shown.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/aspire\/wp-content\/uploads\/sites\/90\/2026\/06\/editor-indicators-dark.webp\" alt=\"Aspire CodeLens and gutter icons in an AppHost file.\" \/><\/p>\n<p>The gutter also gets health-aware icons. They use different shapes and icons, so you can easily and quickly identify any issues or anomalies.<\/p>\n<p>There are two new AppHost-level CodeLens actions worth calling out in 13.4: <strong>Open Dashboard<\/strong> and <strong>View Logs<\/strong>. They sit by the builder statement, so when you are already looking at the AppHost you can jump to the Aspire dashboard or AppHost logs without switching to the Aspire panel first or needing to execute a terminal command.<\/p>\n<h2>The Aspire panel is useful even before you start debugging<\/h2>\n<p>Currently, most Aspire work still eventually lands in the <a href=\"https:\/\/aka.ms\/aspire\/dashboard\">Aspire Dashboard<\/a>: resources, endpoints, logs, traces, metrics, and commands in one place. And the Aspire Dashboard is great!<\/p>\n<p>But one of our goals in 13.4 has been tightening the developer loop, so with the Aspire panel, common actions can be done directly in VS Code, eliminating the need to navigate away from your IDE at all. Health check status, resource type, clickable commands, resource endpoints, and dashboard links are all shown in the panel.<\/p>\n<p><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Note<\/strong><\/p>The Aspire panel has two modes: workspace and global. Workspace view shows running and idle AppHosts from inside the open workspace, while global view shows all running AppHosts on your machine.<\/div><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/aspire\/wp-content\/uploads\/sites\/90\/2026\/06\/code-extension-sidebar-scaled.webp\" alt=\"Aspire panel showing running AppHosts and resources.\" \/><\/p>\n<p>Beginning in Aspire 13.4, commands can declare typed arguments, labels, descriptions, defaults, choices, validation, and secret inputs. The extension uses VS Code prompts for those inputs, then sends the command through the Aspire CLI. <a href=\"https:\/\/aspire.dev\/fundamentals\/custom-resource-commands\/#command-arguments\">Learn more<\/a> about custom Aspire commands and arguments.<\/p>\n<h2>Dashboard stays one click away<\/h2>\n<p>Beginning mid-June, the Aspire dashboard will no longer open automatically when you start an AppHost from VS Code. However, you can still open the dashboard via the Aspire panel, AppHost editor, or command palette. The old behavior can be restored by setting <code>aspire.enableAspireDashboardAutoLaunch<\/code> to true and the <code>aspire.dashboardBrowser<\/code> VS Code setting to a value that will open the dashboard after launch:<\/p>\n<ul>\n<li><code>integratedBrowser<\/code> uses VS Code&#8217;s integrated browser.<\/li>\n<li><code>openExternalBrowser<\/code> uses your system browser.<\/li>\n<li><code>debugChrome<\/code>, <code>debugEdge<\/code>, and <code>debugFirefox<\/code> launch a browser of the specified type as a child debug session.<\/li>\n<\/ul>\n<p>I tend to use <code>integratedBrowser<\/code> when I am in a dashboard-heavy loop, such as when I&#8217;m often looking at structured or console logs.<\/p>\n<h2>13&#46;4 is also a TypeScript AppHost release<\/h2>\n<p>Aspire 13.4 takes the TypeScript AppHost to GA, and the VS Code extension is where a lot of that support becomes visible.<\/p>\n<p>New TypeScript AppHosts use <code>apphost.mts<\/code>, and generated SDK modules live under <code>.aspire\/modules\/<\/code>. The extension discovers those AppHosts through the workspace config and runs\/debugs them through the same <code>type: \"aspire\"<\/code> launch config as C# AppHosts.<\/p>\n<p>If you are upgrading a 13.3.x TypeScript AppHost, update the CLI first:<\/p>\n<pre><code class=\"language-bash\">aspire update --self # or use the '&gt; Aspire: Update Aspire CLI' command\naspire update # or use the '&gt; Aspire: Update integrations' command<\/code><\/pre>\n<h2>Try the loop<\/h2>\n<p>Install or update the <a href=\"https:\/\/aka.ms\/aspire\/vscode\">Aspire extension for VS Code<\/a>, open an AppHost, press <strong>F5<\/strong>, and try the full loop:<\/p>\n<ul>\n<li>Use CodeLens to open the dashboard from the AppHost.<\/li>\n<li>Restart one resource from the editor.<\/li>\n<li>View that resource&#8217;s logs from CodeLens or the Aspire panel.<\/li>\n<li>Open the same resource in the dashboard when you need traces, metrics, or the full resource graph.<\/li>\n<li>Switch the Aspire panel to Global mode and interact with other running AppHosts on your machine.<\/li>\n<\/ul>\n<p>If you want to suggest improvements or notice issues, please send feedback on <a href=\"https:\/\/github.com\/microsoft\/aspire\">GitHub<\/a>, in <a href=\"https:\/\/aka.ms\/aspire-discord\">Discord<\/a>, or on <a href=\"https:\/\/x.com\/aspiredotdev\">X<\/a> \/ <a href=\"https:\/\/bsky.app\/profile\/aspire.dev\">Bluesky<\/a>. Happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aspire 13.4 brings more of the local development loop into VS Code: AppHost CodeLens actions, live resource state, dashboard shortcuts, typed resource command prompts, TypeScript AppHost support, and multi-language debugging.<\/p>\n","protected":false},"author":215488,"featured_media":484,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,17],"tags":[9,53,78,32,77],"class_list":["post-483","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aspire-category","category-deep-dives","tag-aspire","tag-dashboard","tag-developer-experience","tag-typescript","tag-vs-code"],"acf":[],"blog_post_summary":"<p>Aspire 13.4 brings more of the local development loop into VS Code: AppHost CodeLens actions, live resource state, dashboard shortcuts, typed resource command prompts, TypeScript AppHost support, and multi-language debugging.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts\/483","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\/215488"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/comments?post=483"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/posts\/483\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/media\/484"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/media?parent=483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/categories?post=483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/aspire\/wp-json\/wp\/v2\/tags?post=483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}