Skip to content

Move monaco to an external dependency - #50463

Draft
Noraa Junker (noraa-junker) wants to merge 7 commits into
mainfrom
dev/noraa-junker/monaco-dependency
Draft

Move monaco to an external dependency#50463
Noraa Junker (noraa-junker) wants to merge 7 commits into
mainfrom
dev/noraa-junker/monaco-dependency

Conversation

@noraa-junker

@noraa-junker Noraa Junker (noraa-junker) commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Summary of the Pull Request

Moves Monaco from an inline dependency to an extern one through downloading Monaco from NPM as a build step.

PR Checklist

  • Closes: #xxx
  • Communication: I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected
  • Tests: Added/updated and all pass
  • Localization: All end-user-facing strings can be localized
  • Dev docs: Added/updated
  • New binaries: Added on the required places
  • Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments

Validation Steps Performed

@github-actions github-actions Bot added Product-General Refers to general PowerToys functionality Ready for review labels Sep 8, 2026
@github-actions github-actions Bot added the Product-Registry Preview Refers to the Registry Preview PowerToy label Sep 8, 2026
@noraa-junker Noraa Junker (noraa-junker) changed the title [WIP] Add monaco as an external dependency Add monaco as an external dependency Sep 8, 2026
@noraa-junker Noraa Junker (noraa-junker) changed the title Add monaco as an external dependency Move monaco to an external dependency Sep 8, 2026

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.

🟡 Changes recommended

The current build-time download approach has path/evaluation-order issues that can result in Monaco assets not being included on clean builds.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Moves the Monaco Editor payload from a vendored-in src/Monaco/monacoSRC/min/... tree to an externally fetched asset, downloaded from the NPM registry as part of the build, and updates docs/ignore rules accordingly.

Changes:

  • Removes checked-in Monaco min language bundles under src/Monaco/monacoSRC/min/vs/basic-languages/*.
  • Adds a pre-build download step (downloadMonaco.ps1) invoked by FilePreviewCommon.csproj.
  • Updates Registry Preview to build FilePreviewCommon first and adjusts developer docs and .gitignore.
File summaries
File Description
src/Monaco/monacoSRC/min/vs/basic-languages/yaml/yaml.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/xml/xml.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/vb/vb.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/typespec/typespec.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/typescript/typescript.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/twig/twig.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/tcl/tcl.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/swift/swift.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/sparql/sparql.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/sophia/sophia.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/shell/shell.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/scheme/scheme.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/sb/sb.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/rust/rust.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/restructuredtext/restructuredtext.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/redis/redis.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/r/r.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/qsharp/qsharp.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/python/python.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/pug/pug.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/powershell/powershell.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/pla/pla.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/pascaligo/pascaligo.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/pascal/pascal.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/objective-c/objective-c.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/msdax/msdax.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/mips/mips.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/mdx/mdx.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/markdown/markdown.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/m3/m3.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/lua/lua.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/liquid/liquid.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/lexon/lexon.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/less/less.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/kotlin/kotlin.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/java/java.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/ini/ini.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/html/html.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/hcl/hcl.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/graphql/graphql.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/go/go.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/fsharp/fsharp.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/flow9/flow9.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/ecl/ecl.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/dockerfile/dockerfile.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/dart/dart.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/cypher/cypher.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/css/css.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/csp/csp.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/csharp/csharp.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/cpp/cpp.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/coffee/coffee.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/cameligo/cameligo.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/bicep/bicep.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/bat/bat.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/azcli/azcli.js Removes vendored Monaco language bundle.
src/Monaco/monacoSRC/min/vs/basic-languages/apex/apex.js Removes vendored Monaco language bundle.
src/common/FilePreviewCommon/FilePreviewCommon.csproj Adds an MSBuild target to download Monaco prior to build.
src/common/FilePreviewCommon/downloadMonaco.ps1 New script to fetch and extract Monaco from the NPM registry.
src/modules/registrypreview/RegistryPreviewUILib/RegistryPreviewUILib.csproj Adds build-time dependency on FilePreviewCommon for Monaco availability.
doc/devdocs/common/monaco-editor.md Updates Monaco documentation to reflect external download flow.
doc/devdocs/common/FilePreviewCommon.md Updates Monaco update instructions to point to the script version pin.
.gitignore Ignores generated Monaco source folder.
Review details

Suppressed comments (1)

src/common/FilePreviewCommon/downloadMonaco.ps1:23

  • The destination path is set to "src\monaco\MonacoSRC", but the repo’s Monaco assets are under "src\Monaco\monacoSRC" (see src/Monaco.props). With the current path/casing, the download will write to a new directory that none of the build/link logic consumes.
  • Files reviewed: 91/109 changed files
  • Comments generated: 4
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +15 to +18
<!-- Download Monaco Editor with the help of the script downloadMonaco.ps1 before the build -->
<Target Name="DownloadMonacoEditor" BeforeTargets="Build">
<Exec Command="powershell -ExecutionPolicy Bypass -File &quot;$(ProjectDir)downloadMonaco.ps1&quot;" />
</Target>
Comment on lines +83 to +85
<!-- Ensures FilePreviewCommon is built before this project, so that Monaco is available -->
<ItemGroup>
<ProjectReference Include="..\..\..\common\FilePreviewCommon\FilePreviewCommon.csproj" />
@@ -0,0 +1,29 @@
$CurrentDir = Get-Location
$repoRoot = (Get-Item -Path $PSScriptRoot).Parent.Parent.Parent.FullName
$tempRoot = Join-Path $env:TEMP "monaco-editor"
Comment thread doc/devdocs/common/monaco-editor.md Outdated

Monaco is embedded into PowerToys' WinUI 3 applications using WebView2. This integration allows PowerToys to leverage Monaco's web-based capabilities within desktop applications.

The [`FilePreviewCommon`](/src/common/FilePreviewCommon/FilePreviewCommon.csproj) project downloads the monaco editor source code and adds it to [`/src/Monaco/MonacoSRC`] before the build step.
@noraa-junker

Copy link
Copy Markdown
Collaborator Author

Copilot Apply your suggested fixes. Move the generation to monaco.props and only make it download if MonacoSRC does not exist yet

Co-authored-by: noraa-junker <58633848+noraa-junker@users.noreply.github.com>

Copilot AI commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Copilot Apply your suggested fixes. Move the generation to monaco.props and only make it download if MonacoSRC does not exist yet

Implemented in d5958c5. Monaco generation now runs from src/Monaco.props, downloads only when src/Monaco/monacoSRC is missing, and Monaco files are added in-target so clean builds include assets correctly. I also removed the project-level workaround references, fixed the temp-directory race in downloadMonaco.ps1 with a GUID temp path, and updated the Monaco docs path/casing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Product-General Refers to general PowerToys functionality Product-Registry Preview Refers to the Registry Preview PowerToy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants