{"id":1063,"date":"2026-05-04T16:19:17","date_gmt":"2026-05-04T23:19:17","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/?p=1063"},"modified":"2026-05-04T16:19:17","modified_gmt":"2026-05-04T23:19:17","slug":"announcing-the-winapp-vs-code-extension-run-debug-and-package-windows-apps-in-vs-code","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/announcing-the-winapp-vs-code-extension-run-debug-and-package-windows-apps-in-vs-code\/","title":{"rendered":"Announcing the WinApp VS Code Extension \u2014 Run, Debug, and Package Windows Apps in VS Code"},"content":{"rendered":"<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1078\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1.webp\" alt=\"decorative image\" width=\"2233\" height=\"1162\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1.webp 2233w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1-300x156.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1-1024x533.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1-768x400.webp 768w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1-1536x799.webp 1536w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-header-0.1-2048x1066.webp 2048w\" sizes=\"(max-width: 2233px) 100vw, 2233px\" \/><\/a><\/p>\n<p>VS Code is where many cross-platform and web developers already work, but getting package identity, MSIX packaging, and Windows SDK tooling often meant reaching for Visual Studio or command-line tools. The <strong>WinApp VS Code extension<\/strong>\u00a0brings the full power of the <a href=\"https:\/\/github.com\/microsoft\/WinAppCli\">Windows App Development CLI<\/a> directly into VS Code. Via the extension, you can initialize, run, debug, package, and sign Windows applications from a variety of development frameworks without ever leaving the editor.<\/p>\n<p>Whether you&#8217;re building with <strong>.NET, WPF, WinUI, C++, Electron, Rust, Tauri, or Flutter,<\/strong>\u00a0this extension can help you streamline your Windows development process.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1091\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension.webp\" alt=\"Screenshot of WinApp VS Code extension logo and description of the extension that reads &quot;WinApp extension for Visual Studio Code to assist in building, debugging, and packaging Windows applications using the WinAppCLI.&quot;\" width=\"1504\" height=\"375\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension.webp 1504w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension-300x75.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension-1024x255.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-extension-768x191.webp 768w\" sizes=\"(max-width: 1504px) 100vw, 1504px\" \/><\/a><\/p>\n<p>Ready to get started? The <strong>WinApp VS Code extension<\/strong> is now available in public preview on the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=Microsoft-WinAppCLI.winapp\">Visual Studio Code Marketplace<\/a>.<\/p>\n<p>Let&#8217;s walk through what&#8217;s included.<\/p>\n<h2>\ud83d\udc1b Integrated Launching and Debugging with Package Identity<\/h2>\n<p>Many Windows APIs \u2014 notifications, background tasks, on-device AI, share targets \u2014 require your app to have <strong>package identity<\/strong>. Traditionally, getting identity meant building a full MSIX installer or running from Visual Studio. With the WinApp extension, you can run Windows apps with package identity without having to leave VS Code.<\/p>\n<p>The extension provides a custom <strong><code>winapp<\/code> debug type<\/strong> that gives your app package identity, launches your app, and attaches your debugger, all from a single <strong>F5<\/strong>\u00a0press.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-launch-deb.gif\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1073\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/vsce-launch-deb.gif\" alt=\"Launch AI Dev Gallery app from VS Code using WinApp launch and debug.\" width=\"2480\" height=\"1514\" \/><\/a><\/p>\n<p><strong>How it works:<\/strong><\/p>\n<p>After the user presses <strong>F5<\/strong>\u00a0to start a debug session, the extension:<\/p>\n<ol>\n<li>Locates your build output and manifest<\/li>\n<li>Launches your app via <code>winapp run<\/code> to give it package identity<\/li>\n<li>Attaches a child debug session using your preferred debugger<\/li>\n<\/ol>\n<p><strong>Supported debuggers:<\/strong><\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 33.3333%;\"><code>debuggerType<\/code><\/td>\n<td style=\"width: 33.3333%;\">Language<\/td>\n<td style=\"width: 33.3333%;\">Required Extension<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><code>coreclr<\/code> (default)<\/td>\n<td style=\"width: 33.3333%;\">C# \/ .NET<\/td>\n<td style=\"width: 33.3333%;\"><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-dotnettools.csharp\">C# Dev Kit<\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><code>cppvsdbg<\/code><\/td>\n<td style=\"width: 33.3333%;\">C \/ C++<\/td>\n<td style=\"width: 33.3333%;\"><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.cpptools\">C\/C++<\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.3333%;\"><code>node<\/code><\/td>\n<td style=\"width: 33.3333%;\">Node.js \/ Electron<\/td>\n<td style=\"width: 33.3333%;\">Built-in<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Getting started is as simple as adding a <code>winapp<\/code> configuration to your <code>launch.json<\/code>:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">{\r\n  \"version\": \"0.2.0\",\r\n  \"configurations\": [\r\n    {\r\n      \"type\": \"winapp\",\r\n      \"request\": \"launch\",\r\n      \"name\": \"WinApp: Launch and Attach\"\r\n    }\r\n  ]\r\n}<\/code><\/pre>\n<h3>Automate the build step<\/h3>\n<p>The <code>winapp<\/code> debug type assumes your project has already been built. It <strong>does not<\/strong>\u00a0build automatically. After making code changes, you need to rebuild before pressing F5.<\/p>\n<p>The good news: you can automate this with a <code>preLaunchTask<\/code>\u00a0so your project is always built before every debug session.<\/p>\n<p><strong>1. Define a build task<\/strong> in <code>.vscode\/tasks.json<\/code>\u00a0(example for .NET):<\/p>\n<pre class=\"prettyprint language-json\"><code class=\"language-json\">{\r\n  \"version\": \"2.0.0\",\r\n  \"tasks\": [\r\n    {\r\n      \"label\": \"build\",\r\n      \"command\": \"dotnet\",\r\n      \"type\": \"process\",\r\n      \"args\": [\"build\", \"${workspaceFolder}\"],\r\n      \"problemMatcher\": \"$msCompile\"\r\n    }\r\n  ]\r\n}<\/code><\/pre>\n<p><strong>2. Reference it<\/strong> in your <code>launch.json<\/code>:<\/p>\n<pre class=\"prettyprint language-json\"><code class=\"language-json\">{\r\n  \"type\": \"winapp\",\r\n  \"request\": \"launch\",\r\n  \"name\": \"WinApp: Launch and Attach\",\r\n  \"preLaunchTask\": \"build\"\r\n}<\/code><\/pre>\n<p>Now every time you press F5, VS Code will build your project first, then launch it with package identity and attach the debugger, just like the full Visual Studio experience.<\/p>\n<p>See the full <a href=\"https:\/\/github.com\/microsoft\/WinAppCli\/blob\/main\/docs\/debugging.md\">Debugging Guide<\/a>\u00a0for more details.<\/p>\n<h2>\ud83c\udfa8 Command Palette Commands<\/h2>\n<p>Many of the WinApp CLI commands are available from the VS Code Command Palette (<code>Ctrl+Shift+P<\/code>). Type <strong>WinApp <\/strong>and you&#8217;ll see the full list:<\/p>\n<ul>\n<li><strong>Initialize Project<\/strong>: configure your project with the Windows SDK and\/or Windows App SDK<\/li>\n<li><strong>Restore \/ Update Packages<\/strong>: manage project dependencies<\/li>\n<li><strong>Run Application<\/strong>: launch your app as a loose-layout packaged app with full package identity<\/li>\n<li><strong>Create Debug Identity<\/strong>: add sparse package identity to an existing executable for F5 debugging<\/li>\n<li><strong>Unregister Package<\/strong>: clean up sideloaded development packages when you&#8217;re done<\/li>\n<li><strong>Create MSIX Package<\/strong>: package your app into an MSIX, with options for certificates and self-contained runtime<\/li>\n<li><strong>Generate Manifest<\/strong>: create a <code>Package.appxmanifest<\/code> from a template<\/li>\n<li><strong>Add Manifest Execution Alias<\/strong>: add a command-line alias so your packaged app can be launched by name<\/li>\n<li><strong>Update Manifest Assets<\/strong>: auto-generate all required app icons from a single source image<\/li>\n<li><strong>Generate \/ Install Certificate<\/strong>: create or install development certificates for signing<\/li>\n<li><strong>Certificate Info<\/strong>: display certificate details (subject, thumbprint, expiry) to verify a certificate matches your manifest<\/li>\n<li><strong>Sign Package<\/strong>: sign an MSIX package or executable<\/li>\n<li><strong>Run SDK Tool<\/strong>: run <code>makeappx<\/code>, <code>signtool<\/code>, <code>mt<\/code>, or <code>makepri<\/code> with custom arguments<\/li>\n<li><strong>Get WinApp Path<\/strong>: show paths to installed SDK components<\/li>\n<\/ul>\n<p>No separate CLI installation required. The WinApp CLI is bundled with the extension.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1088\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands.webp\" alt=\"Screenshot of WinApp commands in VS Code command palette\" width=\"2105\" height=\"1370\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands.webp 2105w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands-300x195.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands-1024x666.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands-768x500.webp 768w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands-1536x1000.webp 1536w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/05\/winapp-commands-2048x1333.webp 2048w\" sizes=\"(max-width: 2105px) 100vw, 2105px\" \/><\/a><\/p>\n<p>The WinApp extension commands work with the same frameworks as the WinApp CLI:<\/p>\n<ul>\n<li><strong>.NET<\/strong>: WPF, WinForms, Console, WinUI3<\/li>\n<li><strong>C \/ C++<\/strong>: Win32, CMake, MSBuild<\/li>\n<li><strong>Electron<\/strong> \/ <strong>Node.js<\/strong><\/li>\n<li><strong>Rust<\/strong><\/li>\n<li><strong>Tauri<\/strong><\/li>\n<li><strong>Flutter<\/strong><\/li>\n<\/ul>\n<h2>\ud83d\ude80 Get Started<\/h2>\n<p><strong>Install from the VS Code Marketplace:<\/strong><\/p>\n<ol>\n<li>Open VS Code<\/li>\n<li>Go to the Extensions view (<code>Ctrl+Shift+X<\/code>)<\/li>\n<li>Search for <strong>WinApp<\/strong><\/li>\n<li>Click <strong>Install<\/strong><\/li>\n<\/ol>\n<p>Or install from the command line:<\/p>\n<pre class=\"prettyprint language-default\"><code class=\"language-default\">code --install-extension Microsoft-WinAppCLI.winapp<\/code><\/pre>\n<p><strong>Requirements:<\/strong><\/p>\n<ul>\n<li>Windows 10 or later<\/li>\n<li>Visual Studio Code 1.109.0 or later<\/li>\n<li>For debugging, install the debugger extension that matches your app&#8217;s language (see supported debuggers above)<\/li>\n<\/ul>\n<p>Once installed, open a Windows app project, hit <code>Ctrl+Shift+P<\/code>, type <strong>WinApp<\/strong>, and start exploring.<\/p>\n<p>Head over to <a href=\"https:\/\/github.com\/microsoft\/winappCli\/blob\/main\/src\/winapp-VSC\/README.md\">WinApp VS Code Extension<\/a> for full documentation.<\/p>\n<h2>\ud83d\udcac We Want Your Feedback<\/h2>\n<p>This is a <strong>public preview<\/strong>; we&#8217;re actively developing the extension and want to hear from you. Your feedback directly shapes what we build next.<\/p>\n<ul>\n<li><strong>Found a bug?<\/strong> <a href=\"https:\/\/github.com\/microsoft\/winappCli\/issues\/new?template=bug-report.yml\">File a bug<\/a><\/li>\n<li><strong>Have a feature request?<\/strong> <a href=\"https:\/\/github.com\/microsoft\/winappCli\/issues\/new?template=feature_request.yml\">Open a feature request<\/a> and tell us what would make your workflow better.<\/li>\n<li><strong>Something confusing?<\/strong>\u00a0Let us know. We want the experience to be smooth from day one.<\/li>\n<\/ul>\n<p>Want to see what we&#8217;re working on? Check out our <a href=\"https:\/\/github.com\/microsoft\/winappCli\/issues?q=is%3Aissue%20state%3Aopen%20label%3Avs-code-extension\">open VS Code extension issues<\/a>\u00a0on GitHub. Feel free to upvote, comment, or open new issues for features you&#8217;d like to see.<\/p>\n<p>Happy coding! \ud83c\udf89<\/p>\n","protected":false},"excerpt":{"rendered":"<p>VS Code is where many cross-platform and web developers already work, but getting package identity, MSIX packaging, and Windows SDK tooling often meant reaching for Visual Studio or command-line tools. The WinApp VS Code extension\u00a0brings the full power of the Windows App Development CLI directly into VS Code. Via the extension, you can initialize, run, [&hellip;]<\/p>\n","protected":false},"author":110839,"featured_media":1078,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4,62,10,61,49,82,8,6],"class_list":["post-1063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ifdef-windows","tag-net","tag-app","tag-desktop","tag-developer","tag-dotnet","tag-vs-code","tag-windows","tag-winui"],"acf":[],"blog_post_summary":"<p>VS Code is where many cross-platform and web developers already work, but getting package identity, MSIX packaging, and Windows SDK tooling often meant reaching for Visual Studio or command-line tools. The WinApp VS Code extension\u00a0brings the full power of the Windows App Development CLI directly into VS Code. Via the extension, you can initialize, run, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/users\/110839"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/comments?post=1063"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1063\/revisions"}],"predecessor-version":[{"id":1093,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1063\/revisions\/1093"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/media\/1078"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/media?parent=1063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/categories?post=1063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/tags?post=1063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}