Skip to content

Add Support for VS Code AppxManifest Editor#533

Merged
nmetulev merged 201 commits into
mainfrom
cm/vsc
Jun 19, 2026
Merged

Add Support for VS Code AppxManifest Editor#533
nmetulev merged 201 commits into
mainfrom
cm/vsc

Conversation

@chiaramooney

@chiaramooney chiaramooney commented May 13, 2026

Copy link
Copy Markdown
Contributor

Description

Adds Support for VS Code AppxManifest Editor. Editor provides easy-to-use GUI to user to edit their manifest files from within VS Code. Supports many of the different appxmanifest customizations and include in-line validation.

Adds Unit and E2E tests for the editor to validate its behavior across sample manifest files. ~8600 lines of code changes are just tests.

Design Decisions

Note: The editor is designed to make surgical string changes to a manifest's xml. It does not use the existing XML parser APIs. This is because the XML parser APIs serialize the manifest data when they read/write to the manifest. This results in the manifest's white space being altered. Opted to use surgical string changes to avoid contaminating white space.

Validation of the manifest in the editor occurs after each change to the manifest. All validation checks are always done. I explored only running checks pertaining to the elements that were edited but there was no meaningful performance change because the validation only too ~4ms in the first place.

Usage Example

Open an appxmanifest file in VS Code. Reopen the file with the WinApp editor. Use the GUI to customize your manifest as you like. Changes are automatically reflected in manifest's xml.

Related Issue

Resolves #331

  • ✨ New feature
  • 📝 Documentation
  • 🧪 Test update

Checklist

  • New tests added for new functionality (if applicable)
  • Tested locally on Windows

Screenshots / Demo

Screenshot 2026-05-13 112919

Additional Notes

AI Description

This update introduces a visual editor for AppxManifest.xml and .appxmanifest files within VS Code, offering a user-friendly interface for editing manifest properties, including identity, properties, dependencies, resources, capabilities, and applications. The editor supports real-time validation, format-preserving edits, and allows for easy management of extensions. Users can utilize this feature by right-clicking an AppxManifest.xml or .appxmanifest file and selecting the Open With… command to access the new GUI.

### How to open:
When you open an `AppxManifest.xml` or `.appxmanifest` file, VS Code will offer the visual editor as an option alongside the default text editor. You can switch between them at any time by right clicking on the file and selecting the **Open With…** command.

azchohfi and others added 30 commits February 11, 2026 12:55
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Refactored the code to collect all <dependency> nodes from the .nuspec XML, removing the previous logic that distinguished between ungrouped and grouped dependencies. This streamlines dependency extraction but may mix dependencies from different target frameworks.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings May 29, 2026 21:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a VS Code custom editor (“AppxManifest Editor”) to visually edit AppxManifest.xml / .appxmanifest files, backed by format-preserving XML string operations and real-time validation, plus a large Playwright E2E suite and unit tests to validate behavior across representative fixture manifests.

Changes:

  • Registers a custom editor provider and adds an onboarding notification to reopen manifests in the visual editor.
  • Introduces manifest-editor implementation (webview UI, XML ops/utils, types, validation integration).
  • Adds extensive unit + Playwright E2E coverage with multiple real-world manifest fixtures.

Reviewed changes

Copilot reviewed 47 out of 49 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/winapp-VSC/src/test/xml-utils.test.ts Unit tests for low-level XML manipulation helpers.
src/winapp-VSC/src/test/redos-prevention.test.ts Performance regression test to prevent ReDoS in validation.
src/winapp-VSC/src/test/fixtures/winui-gallery.appxmanifest Real-world manifest fixture for parsing/editing tests.
src/winapp-VSC/src/test/fixtures/widgets-sample.appxmanifest Fixture stressing nested capabilities and mixed formatting.
src/winapp-VSC/src/test/fixtures/push-notifications-sample.appxmanifest Fixture for COM/protocol extension scenarios.
src/winapp-VSC/src/test/fixtures/edge-cases.appxmanifest Adversarial/edge-case fixture for parser robustness.
src/winapp-VSC/src/test/fixtures/background-task-sample.appxmanifest Fixture for background tasks + dependency subtypes.
src/winapp-VSC/src/test/extension-templates.test.ts Tests extension template insertion and real-world parsing round-trips.
src/winapp-VSC/src/test/extension-field-validator.test.ts Unit tests for extension-field validation branches.
src/winapp-VSC/src/test/e2e/shared-context.ts Shared VS Code instance lifecycle utilities for E2E specs.
src/winapp-VSC/src/test/e2e/resources-tab.spec.ts E2E coverage for Resources tab CRUD/reorder flows.
src/winapp-VSC/src/test/e2e/README.md Documentation of E2E suite architecture and inventory.
src/winapp-VSC/src/test/e2e/push-notifications-fixture.spec.ts E2E validation against push notifications fixture.
src/winapp-VSC/src/test/e2e/properties-tab.spec.ts E2E coverage for Properties tab fields and optional sections.
src/winapp-VSC/src/test/e2e/parse-error.spec.ts E2E coverage for malformed XML error view behavior.
src/winapp-VSC/src/test/e2e/mrt-validation.spec.ts E2E tests for MRT resource-key validation for image fields.
src/winapp-VSC/src/test/e2e/identity-tab.spec.ts E2E coverage for Identity fields, validation, PhoneIdentity, regressions.
src/winapp-VSC/src/test/e2e/helpers.ts Playwright helpers to launch VS Code and interact with the webview.
src/winapp-VSC/src/test/e2e/global-teardown.ts Global teardown to close the shared VS Code instance.
src/winapp-VSC/src/test/e2e/editor-launch.spec.ts E2E smoke tests for editor launch and tab navigation.
src/winapp-VSC/src/test/e2e/dependencies-tab.spec.ts E2E coverage for dependencies CRUD across multiple subtypes.
src/winapp-VSC/src/test/e2e/capabilities-tab.spec.ts E2E coverage for capabilities toggling, namespaces, custom caps.
src/winapp-VSC/src/test/e2e/background-task-fixture.spec.ts E2E validation against background-task fixture.
src/winapp-VSC/src/manifest-editor/xml-utils.ts XML string utilities (namespaces, bounds, attribute/text edits).
src/winapp-VSC/src/manifest-editor/webview-styles.ts Webview CSS extracted for maintainability.
src/winapp-VSC/src/manifest-editor/webview-script-resources.ts Webview script chunk for Resources tab UI/events.
src/winapp-VSC/src/manifest-editor/webview-script-identity.ts Webview script chunk for Identity tab optional-field behaviors.
src/winapp-VSC/src/manifest-editor/webview-script-dependencies.ts Webview script chunk for Dependencies tab UI/events.
src/winapp-VSC/src/manifest-editor/webview-script-capabilities.ts Webview script chunk for Capabilities tab interactions.
src/winapp-VSC/src/manifest-editor/manifest-xml-ops-applications.ts String-based add/remove/update logic for Applications/Extensions.
src/winapp-VSC/src/manifest-editor/manifest-types.ts Shared types + templates + known capabilities metadata.
src/winapp-VSC/src/manifest-editor/manifest-editor-provider.ts Custom editor provider wiring, update loop, file/image helpers.
src/winapp-VSC/src/extension.ts Activation wiring: registers editor + shows “open with editor” prompt.
src/winapp-VSC/README.md Adds user-facing documentation for the visual editor feature.
src/winapp-VSC/playwright.config.ts Playwright config for VS Code-as-Electron E2E suite.
src/winapp-VSC/package.json Registers custom editor contribution + adds E2E script/deps.
src/winapp-VSC/.vscodeignore Excludes Playwright artifacts and review docs from VSIX.
.gitignore Ignores Playwright artifacts and VSIX outputs.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/winapp-VSC/src/manifest-editor/xml-utils.ts Outdated
Comment thread src/winapp-VSC/src/manifest-editor/manifest-xml-ops-applications.ts
Comment thread src/winapp-VSC/src/manifest-editor/manifest-xml-ops-applications.ts
Comment thread src/winapp-VSC/src/test/e2e/push-notifications-fixture.spec.ts
@chiaramooney
chiaramooney enabled auto-merge (squash) June 12, 2026 14:29
@chiaramooney
chiaramooney disabled auto-merge June 12, 2026 14:29
@chiaramooney
chiaramooney requested a review from nmetulev June 16, 2026 21:39
chiaramooney and others added 2 commits June 18, 2026 09:52
Regenerated the lockfile to restore missing packages that were
dropped during the merge conflict resolution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@nmetulev

Copy link
Copy Markdown
Member

@copilot resolve the merge conflicts in this pull request

@nmetulev

Copy link
Copy Markdown
Member

@copilot resolve the merge conflicts in this pull request

Co-authored-by: nmetulev <711864+nmetulev@users.noreply.github.com>

Copilot AI commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Merge conflict in src/winapp-VSC/package-lock.json has been resolved by regenerating the lock file with npm install. The conflict was caused by a form-data dependency update in PR #581. The extension compiles successfully and passes linting with no new errors. (commit: 838d70c)

@nmetulev
nmetulev disabled auto-merge June 19, 2026 20:19
@nmetulev
nmetulev merged commit 91d652a into main Jun 19, 2026
22 checks passed
@nmetulev
nmetulev deleted the cm/vsc branch June 19, 2026 20:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: AppxManifest Visual Editor

7 participants