See your application modernization journey, know what comes next, and keep GitHub Copilot aligned with the Modernize CLI workflow.
The Modernization Workflow Canvas is an interactive companion for the GitHub Copilot Modernize CLI. It turns the governed Assess → Plan → Execute lifecycle into a visual workspace for .NET, Java, and C++ application repositories.
Modernization produces reports, plans, tasks, code changes, and validation results across several commands. This canvas brings those signals together so you can:
- See the current Assess, Plan, and Execute stage at a glance.
- Generate commands from your source, technology, goal, and plan name.
- Detect .NET, Java, and C++ repository signals.
- Discover Modernize CLI artifacts under
.github/modernize/. - Track manual progress alongside artifact-derived progress.
- Switch between local execution and GitHub Copilot cloud-agent delegation.
- Use the reviewable workflow or the faster
modernize upgradepath. - Let Copilot configure, refresh, and update the workflow through canvas actions.
The canvas displays and copies commands; it does not execute them without you. Run copied commands in a terminal where you can review their output.
Important
This is a GitHub Copilot CLI/App canvas extension, not a VS Code extension. Your Copilot client must support extension canvases.
Before installing the canvas, make sure you have:
- A GitHub Copilot plan and a canvas-capable GitHub Copilot CLI/App.
- Git.
- GitHub CLI authenticated with
gh auth login. - The Modernize CLI available as
modernize. - A local application repository to assess and modernize.
Install the Modernize CLI with the platform-appropriate command:
| Platform | Command |
|---|---|
| Windows | winget install GitHub.Copilot.modernization.agent |
| macOS | brew tap microsoft/modernize https://github.com/microsoft/modernize-cli && brew trust microsoft/modernize && brew install modernize |
| Linux | curl -fsSL https://raw.githubusercontent.com/microsoft/modernize-cli/main/scripts/install.sh | sh |
Open a new terminal after installation, then confirm both tools are available:
gh auth status
modernize --help
The extension has no npm dependencies. Copilot supplies
@github/copilot-sdk when it loads the extension.
Run these commands in PowerShell:
git clone https://github.com/EmeaAppGbb/modernization-canvas.git
$source = Resolve-Path ".\modernization-canvas\extensions\modernization-workflow"
$copilotHome = if ($env:COPILOT_HOME) {
$env:COPILOT_HOME
} else {
Join-Path $HOME ".copilot"
}
$destination = Join-Path $copilotHome "extensions\modernization-workflow"
New-Item -ItemType Directory -Force $destination | Out-Null
Copy-Item "$source\*" $destination -Recurse -ForceRestart the GitHub Copilot App or CLI after copying the extension.
Run these commands in Terminal:
git clone https://github.com/EmeaAppGbb/modernization-canvas.git
COPILOT_HOME="${COPILOT_HOME:-$HOME/.copilot}"
mkdir -p "$COPILOT_HOME/extensions/modernization-workflow"
cp -R modernization-canvas/extensions/modernization-workflow/. \
"$COPILOT_HOME/extensions/modernization-workflow/"Restart the GitHub Copilot App or CLI after copying the extension.
Run these commands in your shell:
git clone https://github.com/EmeaAppGbb/modernization-canvas.git
COPILOT_HOME="${COPILOT_HOME:-$HOME/.copilot}"
mkdir -p "$COPILOT_HOME/extensions/modernization-workflow"
cp -R modernization-canvas/extensions/modernization-workflow/. \
"$COPILOT_HOME/extensions/modernization-workflow/"Restart GitHub Copilot CLI after copying the extension.
To share the canvas with everyone working in one repository, copy the
extensions/modernization-workflow folder into:
<application-repository>/.github/extensions/modernization-workflow/
The resulting folder must contain extension.mjs directly:
.github/
└── extensions/
└── modernization-workflow/
├── extension.mjs
├── copilot-extension.json
└── lib/
Project-scoped extensions take precedence over a global extension with the same name.
After this plugin is approved and listed in the Awesome Copilot marketplace, the installation command will be:
copilot plugin install modernization-workflow@awesome-copilot
Until the listing is published, use one of the source installation methods above.
Start Copilot in an application repository and ask:
List the installed extensions and their canvases.
You should see:
modernization-workflow — running
Canvas: modernization-workflow
If it is not listed, confirm that the installed folder contains
extension.mjs directly, then restart Copilot.
Start GitHub Copilot from the repository you want to modernize. The working directory is the default source for the workflow.
Ask Copilot:
Open the Modernization Workflow canvas for this repository.
Use the Workflow setup panel to choose:
| Setting | Purpose |
|---|---|
| Technology | Auto-detect, .NET, Java, or C++ |
| Execution | Run locally or delegate supported work to a cloud agent |
| Source | Local path, Git URL, or Modernize CLI repository configuration |
| Modernization goal | The outcome used to create the plan |
| Upgrade target | Optional target for the modernize upgrade fast path |
| Plan name | Stable name for plan and task artifacts |
You can also ask Copilot to configure it:
Configure the Modernization Workflow for a .NET 10 upgrade, using the current
repository and a plan named dotnet10-modernization.
Copy the Assess command from the canvas and run it in your terminal:
modernize assess --source .The default assessment output is .github/modernize/assessment/. Select
Refresh artifacts when the command finishes. The canvas automatically marks
Assess complete when it finds assessment output.
Review the assessment findings, then run the generated plan command:
modernize plan create "modernize this application for Azure" \
--source . \
--plan-name modernization-planReview and edit the generated files before execution:
.github/modernize/modernization-plan/plan.md
.github/modernize/modernization-plan/tasks.json
The canvas marks Plan complete after it finds both files.
Run the plan after it has been reviewed:
modernize plan execute \
--source . \
--plan-name modernization-planDuring execution, the Modernize CLI applies transformations, validates builds, scans for CVEs, commits changes, and generates a summary. Refresh the canvas to load the resulting progress and summary artifacts.
For an end-to-end runtime or framework upgrade that does not require a separate plan-review checkpoint:
modernize upgrade ".NET 10" --source .Use the full Assess, Plan, and Execute path when governance, review, or plan customization is important.
Local execution is the default and supports local application paths.
Cloud delegation requires a github.com repository URL:
modernize assess \
--source https://github.com/organization/application.git \
--delegate cloud \
--waitThe canvas warns when cloud execution is selected with a local path or an unsupported Git provider.
The canvas detects common C++ signals such as CMakeLists.txt, Makefiles,
.cpp files, and Visual C++ project files.
Note
The current Modernize CLI reference documents explicit --language values for
Java and .NET only. C++ commands therefore rely on CLI auto-detection. Verify
C++ support against your installed Modernize CLI version and available
modernization skills before executing a plan.
Canvas state is stored in the application repository:
.github/modernize/canvas-<stateId>.json
This lets progress survive canvas reloads and Copilot restarts. Add the state file to your repository if the team should share progress, or ignore it if the workflow is personal.
The canvas derives progress from these Modernize CLI artifacts:
| Stage | Detected artifacts |
|---|---|
| Assess | Assessment JSON, Markdown, or HTML reports |
| Plan | <plan-name>/plan.md and <plan-name>/tasks.json |
| Execute | Summary, progress, or result files under the plan folder |
| Problem | Resolution |
|---|---|
| Canvas is not listed | Confirm extension.mjs is directly inside the installed extension folder, then restart Copilot. |
| Technology is not detected | Select .NET, Java, or C++ manually in Workflow setup. |
| Progress does not update | Select Refresh artifacts and confirm the CLI wrote output under .github/modernize/. |
| Cloud delegation warning | Use a https://github.com/... source URL or switch execution to Local. |
| A command does not match your CLI | Run modernize <command> --help; CLI options can evolve independently of the canvas. |
Remove the installed extension folder and restart Copilot.
Windows:
$copilotHome = if ($env:COPILOT_HOME) { $env:COPILOT_HOME } else { Join-Path $HOME ".copilot" }
Remove-Item (Join-Path $copilotHome "extensions\modernization-workflow") -RecursemacOS and Linux:
COPILOT_HOME="${COPILOT_HOME:-$HOME/.copilot}"
rm -rf "$COPILOT_HOME/extensions/modernization-workflow"For a project-scoped installation, remove
.github/extensions/modernization-workflow/ from that repository instead.
The distributable plugin is defined by plugin.json; reusable extension source
lives in extensions/modernization-workflow/.
To submit this repository to Awesome Copilot:
- Make the GitHub repository public.
- Create an immutable semantic-version release tag, such as
v1.0.0. - Record the release tag and full 40-character commit SHA.
- Submit the external plugin issue form in
github/awesome-copilot, using/as the plugin path. - Address any
vally lint, canvas-structure, or install smoke-test findings.
Do not edit plugins/external.json directly. Approved submissions are added by
the Awesome Copilot review automation.
See CONTRIBUTING.md for development guidance.
- Modernize CLI
- Modernization agent overview
- Modernize CLI command reference
- Awesome Copilot contribution guide
Licensed under the MIT License.
