{"id":1195,"date":"2026-07-20T11:13:08","date_gmt":"2026-07-20T18:13:08","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/?p=1195"},"modified":"2026-07-20T11:13:08","modified_gmt":"2026-07-20T18:13:08","slug":"announcing-a-new-visual-manifest-editor-in-the-winapp-vs-code-extension","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/announcing-a-new-visual-manifest-editor-in-the-winapp-vs-code-extension\/","title":{"rendered":"Announcing a New Visual Manifest Editor in the WinApp VS Code Extension"},"content":{"rendered":"<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1201\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce.webp\" alt=\"Decorative header image\" width=\"2300\" height=\"1243\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce.webp 2300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce-300x162.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce-1024x553.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce-768x415.webp 768w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce-1536x830.webp 1536w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/header-0.2-vsce-2048x1107.webp 2048w\" sizes=\"(max-width: 2300px) 100vw, 2300px\" \/><\/a><\/p>\n<p>The WinApp VS Code extension exists to make Windows app development feel at home in VS Code. It brings the <a href=\"https:\/\/github.com\/microsoft\/WinAppCli\">Windows App Development CLI<\/a>\u00a0right into the editor, so you can initialize, run, debug, package, and sign Windows apps built with .NET, WPF, WinUI, C++, Electron, Rust, Tauri, or Flutter, all without switching tools.<\/p>\n<p><strong>Get it now:<\/strong>\u00a0Install the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=Microsoft-WinAppCLI.winapp\">WinApp extension from the VS Code Marketplace<\/a>.<\/p>\n<p>We&#8217;re excited to announce the release of v0.2. This release includes a new editor that supports editing a manifest file without touching raw XML and support for running WinApp commands in multi-app workspaces.<\/p>\n<h2>A Visual Editor for AppxManifest<\/h2>\n<p>Your <code>AppxManifest.xml<\/code> (or <code>.appxmanifest<\/code>) declares the identity, capabilities, dependencies, and activation of your app. But editing manifest files can be confusing. Editing the XML means memorizing elements, properties, namespaces, and a long list of format rules for publisher names, versions, GUIDs, and more. Worse, the raw XML won&#8217;t alert you when something is wrong, so you often don&#8217;t find out your manifest has a syntax error until you try to package your app and the build fails.<\/p>\n<p>With v0.2, the extension now includes a <strong>visual editor<\/strong>\u00a0for manifest files. Instead of raw XML, you can edit your manifest files with a clean, form-based, easy-to-use UI:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot.webp\"><img decoding=\"async\" class=\"alignnone size-full wp-image-1197\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot.webp\" alt=\"Screenshot of WinApp manifest editor open to the Identity tab. A GUI form with fields for Name, Publisher, etc that matches the theming of VS Code. \" width=\"2157\" height=\"1479\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot.webp 2157w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot-300x206.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot-1024x702.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot-768x527.webp 768w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot-1536x1053.webp 1536w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/manifest-editor-screenshot-2048x1404.webp 2048w\" sizes=\"(max-width: 2157px) 100vw, 2157px\" \/><\/a><\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 32.1429%; text-align: center;\"><strong>Tab<\/strong><\/td>\n<td style=\"width: 67.8571%; text-align: center;\"><strong>What you can edit<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Identity<\/strong><\/td>\n<td style=\"width: 67.8571%;\">Package name, publisher, version, processor architecture, optional phone identity, and resource ID<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Properties<\/strong><\/td>\n<td style=\"width: 67.8571%;\">Display name, publisher display name, description, and store logo path<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Dependencies<\/strong><\/td>\n<td style=\"width: 67.8571%;\">Target device families (min\/max versions), package and main-package dependencies, driver constraints, OS dependencies, host runtime dependencies, and external dependencies<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Resources<\/strong><\/td>\n<td style=\"width: 67.8571%;\">BCP-47 language declarations (e.g. <code>en-us<\/code>, <code>fr-fr<\/code>)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Capabilities<\/strong><\/td>\n<td style=\"width: 67.8571%;\">General, restricted, device, and custom capabilities (Internet Client, Run Full Trust, Microphone, and more)<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 32.1429%;\"><strong>Applications<\/strong><\/td>\n<td style=\"width: 67.8571%;\">Executable path, entry point, trust level, runtime behavior, visual elements (logos, splash screen, tiles), and extensions<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>And it&#8217;s not just a prettier form. It&#8217;s a smarter one:<\/p>\n<ul>\n<li><strong>Real-time validation:<\/strong> Inline errors catch missing required fields and format mistakes (i.e. publisher distinguished names, version numbers) before they become build failures.<\/li>\n<li><strong>Asset generation built in:<\/strong> A <strong>Regenerate Assets<\/strong> button calls the WinApp CLI to auto-generate every required icon size from a single source image.<\/li>\n<li><strong>Extension management:<\/strong> Add or remove extensions with templates for Protocol Activation, COM Server, and more.<\/li>\n<li><strong>Reorderable lists:<\/strong> Reorder dependencies and resources to control the order they appear in the XML.<\/li>\n<li><strong>Format-preserving edits:<\/strong>\u00a0Changes are applied surgically to the underlying XML text, so your whitespace, comments, and attribute ordering stay exactly as you left them.<\/li>\n<\/ul>\n<p><strong>How to open it:<\/strong>\u00a0When you open an <code>AppxManifest.xml<\/code> or <code>.appxmanifest<\/code> file, VS Code offers the visual editor alongside the default text editor. You can switch between the two at any time. Just right-click the file and choose <strong>Open With\u2026<\/strong>, so the raw XML is always one click away when you need it.<\/p>\n<h2>Workspace and Multi-Project Support<\/h2>\n<p>In v0.1, the extension ran all WinApp commands from the current directory open in VS Code. Most developers typically open the root of their repository in VS Code. This meant that if your app lived in a subfolder, you had to reopen VS Code inside the app directory just to run a WinApp command, then reopen it again at the root to see your diffs. That back-and-forth added friction to an otherwise smooth workflow.<\/p>\n<p>v0.2 removes that friction by making WinApp commands <strong>workspace-aware<\/strong>. Now you can keep your repository root open and let the WinApp commands find your app for you. When you run a command, it automatically searches the workspace for compatible projects. If it finds one, it targets that project directly. If it finds several, it shows a QuickPick so you can choose which one to run against. And if a recognized project happens to be at the root, the command simply runs there without prompting.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options.webp\"><img decoding=\"async\" class=\"aligncenter wp-image-1198\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options.webp\" alt=\"Screenshot of Quickpick in VS Code showing app options for Winapp command to run on\" width=\"750\" height=\"357\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options.webp 1232w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options-300x143.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options-1024x487.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/command-app-options-768x365.webp 768w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>If you&#8217;d rather not use the automatic search, you can tell the extension exactly which projects you care about. When you have a fixed set of app directories you always run commands against, declare them in your VS Code settings, and WinApp will surface only those directories. With a single entry, commands target it automatically; with several, you get a QuickPick limited to your chosen projects.<\/p>\n<pre>\/\/ .vscode\/settings.json\r\n{\r\n  \"winapp.appDirectories\": [\r\n  \"apps\/my-app\",\r\n  \"apps\/shell\"\r\n  ]\r\n}<\/pre>\n<h3>Smarter project detection in Initialize Project<\/h3>\n<p>The <strong>WinApp: Initialize Project<\/strong> command benefits from the same project detection. When you run it, the extension searches for valid app projects in your workspace. If a recognized app project is at the workspace root, it proceeds right away. Otherwise, it searches the workspace and lets you pick which one to initialize. If no projects are found, it&#8217;ll offer to initialize in the current directory. From there, the init command will continue as expected and ask for your SDK channel (stable, preview, experimental, or none) and run <code>winapp init<\/code>\u00a0to set up the manifest, SDK packages, and configuration for your chosen project.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options.webp\"><img decoding=\"async\" class=\"aligncenter wp-image-1196\" src=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options-1024x519.webp\" alt=\"Quickpick of app options when running the winapp init command in VS Code. \" width=\"743\" height=\"377\" srcset=\"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options-1024x519.webp 1024w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options-300x152.webp 300w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options-768x389.webp 768w, https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-content\/uploads\/sites\/61\/2026\/06\/init-app-options.webp 1243w\" sizes=\"(max-width: 743px) 100vw, 743px\" \/><\/a><\/p>\n<h2>A New Home: WinAppVSCE<\/h2>\n<p>Alongside these features, the extension&#8217;s source code is <strong>moving to a new repository<\/strong>.<\/p>\n<p>Previously the extension lived inside the <a href=\"https:\/\/github.com\/microsoft\/WinAppCli\">microsoft\/WinAppCli <\/a>repo alongside the CLI itself. Starting with v0.2, the VS Code extension has its own dedicated home at <a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\">microsoft\/WinAppVSCE<\/a>.<\/p>\n<p>Going forward, please <strong>file extension issues and feature requests in the new repository<\/strong>:<\/p>\n<ul>\n<li>\ud83d\udc1b <strong>Found a bug in the extension?<\/strong> <a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\/issues\">File a bug in WinAppVSCE<\/a>.<\/li>\n<li>\ud83d\udca1 <strong>Have a feature idea for the extension?<\/strong>\u00a0<a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\/issues\">Open a feature request in WinAppVSCE<\/a>.<\/li>\n<li>\u2699\ufe0f <strong>Issue with the underlying CLI behavior?<\/strong> Continue filing those in <a href=\"https:\/\/github.com\/microsoft\/WinAppCli\/issues\">WinAppCli<\/a>.<\/li>\n<\/ul>\n<h2>Get Started<\/h2>\n<p>The <strong>WinApp VS Code extension<\/strong> is 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><strong>Install from VS Code:<\/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 from the command line:<\/p>\n<pre>code --install-extension Microsoft-WinAppCLI.winapp<\/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, the debugger extension that matches your app&#8217;s language (C# Dev Kit, C\/C++, or built-in Node.js)<\/li>\n<\/ul>\n<h2>We Want Your Feedback<\/h2>\n<p>This is still a <strong>public preview<\/strong>, and your feedback directly shapes what we build next. Whether the visual editor is missing a field you need or you have an idea to make the workflow smoother, we want to hear it.<\/p>\n<ul>\n<li>\ud83d\udc1b <a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\/issues\">File a bug<\/a><\/li>\n<li>\ud83d\udca1 <a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\/issues\">Open a feature request<\/a><\/li>\n<li>\ud83d\udc40 Browse <a href=\"https:\/\/github.com\/microsoft\/WinAppVSCE\/issues\">open extension issues<\/a>\u00a0to upvote and comment on what matters to you<\/li>\n<\/ul>\n<p>Happy coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The WinApp VS Code extension exists to make Windows app development feel at home in VS Code. It brings the Windows App Development CLI\u00a0right into the editor, so you can initialize, run, debug, package, and sign Windows apps built with .NET, WPF, WinUI, C++, Electron, Rust, Tauri, or Flutter, all without switching tools. Get it [&hellip;]<\/p>\n","protected":false},"author":110839,"featured_media":1201,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[4,87,10,61,49,82,72,86,8,6],"class_list":["post-1195","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ifdef-windows","tag-net","tag-apps","tag-desktop","tag-developer","tag-dotnet","tag-vs-code","tag-winapp","tag-winapp-cli","tag-windows","tag-winui"],"acf":[],"blog_post_summary":"<p>The WinApp VS Code extension exists to make Windows app development feel at home in VS Code. It brings the Windows App Development CLI\u00a0right into the editor, so you can initialize, run, debug, package, and sign Windows apps built with .NET, WPF, WinUI, C++, Electron, Rust, Tauri, or Flutter, all without switching tools. Get it [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1195","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=1195"}],"version-history":[{"count":1,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1195\/revisions"}],"predecessor-version":[{"id":1327,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/posts\/1195\/revisions\/1327"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/media\/1201"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/media?parent=1195"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/categories?post=1195"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/ifdef-windows\/wp-json\/wp\/v2\/tags?post=1195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}