Modernize your application.Validate the result.

Use GitHub Copilot and Azure to modernize an existing application or reshape its architecture. Deliver a running upgrade or a complete rebuilt application.

Start with the change you need

A Java or .NET app can take either route. Discovery may recommend a smaller refactor.

Replatform / refactor

Upgrade runtimes and dependencies or move to managed Azure services while preserving core behavior.

Deliver a running modernized application and show that required behavior still works.

GitHub Copilot Modernization CLI

Rearchitect / rebuild

Change business workflows or architecture when a runtime upgrade alone is not enough.

Deliver a reviewed architecture and a complete rebuilt app on Azure. Choose an app small enough for the event.

Agentic Modernization plugin

Prerequisites

These tools support the upgrade tracks. For a rebuild, follow the plugin setup guide; you do not need the Modernization CLI.

VS Code
Required for the GitHub Copilot Modernization extension workflow
Docker Desktop
Required for Dev Containers, local image builds, or running Oracle locally. Use Azure Container Registry for cloud image builds instead.
GitHub Copilot Modernization
Install the VS Code extension from the Marketplace, or use the modernize CLI below
GitHub CLI (gh) v2.45.0+
Required by the modernization CLI — authenticate with gh auth login
Azure CLI + Terraform
Active Azure subscription with permissions for Container Apps, SQL, Service Bus, and Blob Storage
Install Modernization CLI bash
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/microsoft/modernize-cli/main/scripts/install.sh | sh
source ~/.bashrc
 
# Windows
winget install GitHub.Copilot.modernization.agent
 
# Authenticate and launch
gh auth login
modernize
Clone with Submodules bash
git clone --recurse-submodules \
https://github.com/<org>/<repo>.git
 
# Verify submodules are populated
git submodule status
✓ a3f8c... Student/Resources/java/PhotoAlbum-Java
✓ 9d2e1... Student/Resources/dotnet/dotnet-migration...
 
# Verify CLI is ready
modernize --version
modernize v1.x.x

See modernization in action.

Two demos follow legacy applications through modernization and deployment to Azure. Open a speaker guide alongside the site for setup, live commands, talking points, and troubleshooting. Each demo runs for 55 minutes; complete provisioning before presenting.

Replatform / refactor

Bring a real customer-owned application. Assess, modernize, and deploy your workload to Azure with the Modernization CLI. Start your application upgrade. The three sample tracks below are optional practice, not substitutes for customer delivery. For deeper architecture changes, choose rearchitect / rebuild.

☕ Java Track
00
Setup CH — 00

Prerequisites
(Java)

Set up GitHub Copilot Modernization CLI, Docker, Azure CLI, Terraform, and GitHub CLI. Initialise the PhotoAlbum submodule. You can also deploy the legacy app to an Azure VM.

01
Assess CH — 01

Assess the Java App

Run modernize assess on PhotoAlbum. Identify Spring Boot 2→3 blockers, Oracle JDBC issues, and cloud-readiness gaps.

02
Modernize CH — 02

Modernize the Java App

Upgrade PhotoAlbum from Spring Boot 2.7 and Java 8 to Spring Boot 3.x and Java 25. Replace Oracle with PostgreSQL and Azure Blob Storage. Migrate javax to jakarta and update the SQL dialect.

03
Deploy CH — 03

Containerize & Deploy (Java)

Build a PhotoAlbum container image, push it to Azure Container Registry, and deploy it to Azure Container Apps with Terraform. Provision PostgreSQL Flexible Server and Blob Storage.

04
Data Migration CH — 04

Migrate the Database to PostgreSQL

Move PhotoAlbum data from Oracle to Azure Database for PostgreSQL Flexible Server and check that the rows match and the app works after cutover.

05
Observe & Secure CH — 05

Observe & Secure

Add monitoring with the Application Insights Java agent. Manage secrets with Azure Key Vault and Managed Identity.

06
Stretch · AI CH — 06

Add AI to PhotoAlbum

Generate captions, alt text, and tags for each uploaded photo with Azure OpenAI gpt-4.1-mini (vision). Use Managed Identity to authenticate.

🔷 .NET Track
00
Setup CH — 00

Prerequisites
(.NET)

Set up GitHub Copilot Modernization CLI, Docker, Azure CLI, Terraform, and GitHub CLI. Initialise the ContosoUniversity submodule. You can also deploy the legacy app to a Windows VM.

01
Assess CH — 01

Assess the .NET App

Run modernize assess on ContosoUniversity. Identify MSMQ, System.Web, and cloud-readiness blockers before changing code.

02
Modernize CH — 02

Modernize the .NET App

Upgrade ContosoUniversity from .NET Framework 4.8 and ASP.NET MVC 5 to .NET 10 and ASP.NET Core. Replace MSMQ with Azure Service Bus and add Blob Storage. Remove System.Web and convert to SDK-style csproj.

03
Deploy CH — 03

Containerize & Deploy (.NET)

Build a ContosoUniversity container image, push it to Azure Container Registry, and deploy it to Azure Container Apps with Terraform. Provision Azure SQL, Service Bus, and Blob Storage.

04
Data Migration CH — 04

Migrate the Database to Azure SQL

Move ContosoUniversity data from LocalDB or SQL Express to Azure SQL Database, then verify the deployed app reads the migrated rows.

05
Observe & Secure CH — 05

Observe & Secure

Add monitoring with the Application Insights SDK. Manage secrets with Azure Key Vault and Managed Identity.

06
Stretch · AI CH — 06

Add AI to ContosoUniversity

Suggest course descriptions, learning objectives, and accessible alt text in the Course Create/Edit flow with Azure OpenAI gpt-4.1-mini (vision). Use Managed Identity to authenticate.

🔷 .NET 8 Track (eShopOnWeb)
00
Setup CH — 00

Prerequisites
(.NET 8)

Install the .NET 10 SDK and check that GitHub Copilot Modernization CLI, Docker, Azure CLI, and Terraform work. Initialise the eShopOnWeb submodule.

01
Assess CH — 01

Assess eShopOnWeb

Run modernize assess on eShopOnWeb. Check all 5 projects for Swashbuckle removal, target framework (TFM) blockers, and EF Core 10 changes.

02
Modernize CH — 02

Modernize to .NET 10

Upgrade all 5 projects to net10.0 via Directory.Packages.props. Replace Swashbuckle with Microsoft.AspNetCore.OpenApi and Scalar. Fix EF Core 10 and Blazor WASM breaking changes.

03
Deploy CH — 03

Containerize & Deploy (eShopOnWeb)

Use Azure Service Bus for order events and Azure Blob Storage for product images. Update Dockerfiles to .NET 10 base images. Deploy Web and PublicApi to Azure Container Apps with Terraform.

04
Data Migration CH — 04

Migrate the Database to Azure SQL

Apply EF Core migrations for both CatalogContext and AppIdentityDbContext against Azure SQL. Check the seed data and test the end-to-end order flow.

05
Observe & Secure CH — 05

Observe & Secure

Trace requests across Web and PublicApi with Application Insights. Use Azure Key Vault and Managed Identity to avoid plaintext secrets.

06
Stretch · AI CH — 06

Add AI to eShopOnWeb

Generate product descriptions, tags, and accessible alt text in the catalog admin with Azure OpenAI gpt-4.1-mini (vision). Use Managed Identity to authenticate.

Rearchitect / rebuild

Follow the prompts from discovery to Azure deployment. Review the package, choose direct, Matt Pocock, or Spec Kit delivery, then rebuild, review, and secure the complete app. Allow two days and choose an app small enough to finish and validate. Discovery may favor a smaller refactor.

00
PrepareREBUILD · 00

Define the goal and scope

Choose an app small enough to rebuild completely. Define required functionality, desired changes, and decision owners. Gather evidence before selecting the target stack.

PlanREBUILD · 01

Assess the app and plan the changes

Recover functional specs, choose an Azure architecture, plan infrastructure, and estimate costs. One planning workflow produces all nine artifacts.

ReviewREBUILD · 02

Review the architecture and costs

Check the documented behavior, alternatives, architecture, costs, diagrams, and migration assumptions. Request specific corrections and save the reviewed version.

ChooseREBUILD · 03

Choose the implementation workflow

Switch to Opus 5.5. Choose direct implementation, Matt Pocock skills, or Spec Kit. Check the build/test baseline and prepare only your workflow's required spec, tickets, or tasks.

RebuildREBUILD · 04

Rebuild the application

Implement all required workflows on Opus 5.5 and test the complete app. Matt's implementation path uses up to two concurrent subagents.

ReviewREBUILD · 05

Review the app and fill the gaps

Run /review and exercise every required workflow. Implement missing behavior, add regression checks, and review the fixes.

FrontendREBUILD · 06

Refine the frontend with Impeccable

Implement approved frontend improvements and verify layout, color, and realistic states. Preserve working behavior; avoid changes without a demonstrated need. Skip only when the app has no UI.

SecureREBUILD · 07

Review security and fix findings

Run /security-review over the complete rebuilt app, including frontend changes. Fix confirmed findings, rerun regression checks, and re-review before deployment.

DeployREBUILD · 08

Run and deploy to Azure

Run locally, deploy with the provided target-specific infrastructure, and validate the Azure endpoint, integrations, and telemetry. Hand off recovery and cleanup responsibilities.

Coach guide

Facilitation notes, expected outputs, and common problems for each challenge. Toggle with Shift+C.

Rebuild Route — Coach Materials
☕ Java Track — Coach Notes
00
Setup COACH — 00

Prerequisites
Coach Notes

Check the environment, Oracle Docker RAM requirements (4 GB), submodules, and modernize CLI installation.

01
Assess COACH — 01

Assess — Coach Notes

Expected assessment findings for Spring Boot 2 to 3 blockers, Oracle JDBC, and BLOB columns, with debrief questions and talking points.

02
Modernize COACH — 02

Modernize — Coach Notes

Guidance on pom.xml changes, javax to jakarta migration, the PostgreSQL dialect, and the Azure Blob SDK. Includes common student errors and how to address them.

03
Deploy COACH — 03

Deploy — Coach Notes

Terraform checklist for PostgreSQL Flexible Server, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.

04
Data Migration COACH — 04

Migrate the Database — Coach Notes

Oracle and PostgreSQL differences, the Ora2Pg workflow, troubleshooting, and a reference implementation with an ora2pg.conf template.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

A Dockerfile snippet for the Application Insights Java agent and setup steps for Key Vault and Managed Identity.

06
Stretch · AI COACH — 06

Add AI — Coach Notes

Terraform examples for Azure OpenAI and RBAC, azure-ai-openai snippets, common problems, and a working end-to-end implementation in Coach/Solutions/java/.

🔷 .NET Track — Coach Notes
00
Setup COACH — 00

Prerequisites
Coach Notes

Check setup and confirm that the modernize CLI is on PATH. Understand the expected .NET Framework 4.8 build failure on Linux/macOS.

01
Assess COACH — 01

Assess — Coach Notes

Expected findings for MSMQ, System.Web, packages.config, Global.asax, Web.config, and local file storage, with debrief questions.

02
Modernize COACH — 02

Modernize — Coach Notes

Convert to SDK-style csproj, remove System.Web, move Global.asax startup to Program.cs, replace MSMQ with Service Bus and local file storage with Blob Storage, and adopt EF Core. Includes common problems.

03
Deploy COACH — 03

Deploy — Coach Notes

Terraform checklist for Azure SQL, Service Bus, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.

04
Data Migration COACH — 04

Migrate the Database — Coach Notes

DMS setup, policy exemptions, SQL authentication caveats for the target database, and help with common migration problems.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

Application Insights SDK setup and guidance on Key Vault and Managed Identity for the .NET track.

06
Stretch · AI COACH — 06

Add AI — Coach Notes

Terraform examples for Azure OpenAI and RBAC, Azure.AI.OpenAI snippets, common problems, and a working end-to-end implementation in Coach/Solutions/dotnet/.

CLI Customer Track — Coach Notes
🔷 .NET 8 Track — Coach Notes
00
Setup COACH — 00

Prerequisites
Coach Notes

Check the environment, .NET 10 SDK, and submodule pin (NimblePros/eShopOnWeb @ a34eda5), then discuss the difference between global.json and Directory.Packages.props.

01
Assess COACH — 01

Assess — Coach Notes

Expected findings for the critical Swashbuckle blocker, target framework (TFM) updates, and dependent package changes. Includes Central Package Management risks and debrief questions.

02
Modernize COACH — 02

Modernize — Coach Notes

A suggested modernize plan goal, a version table for Directory.Packages.props, a snippet for replacing Swashbuckle with OpenAPI and Scalar, and common problems.

03
Deploy COACH — 03

Deploy — Coach Notes

Guidance on Docker build context, the Service Bus singleton pattern, and Blob SAS URLs. Includes a Terraform checklist for Container Apps, SQL, Storage, and Service Bus.

04
Data Migration COACH — 04

Migrate the Database — Coach Notes

Reference dotnet ef database update commands for both DbContexts, expected seed row counts, and common Azure SQL firewall problems.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

Application Insights setup, Terraform snippets for Key Vault and Managed Identity, an explanation of the DefaultAzureCredential chain, and role propagation wait times.

06
Stretch · AI COACH — 06

Add AI — Coach Notes

Terraform examples for Azure OpenAI and RBAC, a CatalogItemAiService implementation with graceful degradation, common problems, and an optional Blazor Web App migration.