Skip to content
Development
Skill

/migrate-bootstrap

Migrates a non-SPA (classic) Power Pages site from Bootstrap 3 to Bootstrap 5. Downloads the site, runs the pac pages bootstrap-migrate engine, reviews the change report, applies AI-assisted fixes for the residual hierarchy/CSS changes the engine only flags, uploads the migrated

From plugin
power-platform-skills
1.1k110 skills25 agents5 MCP

Claude Code

$ npx -y skills add microsoft/power-platform-skills --skill migrate-bootstrap --agent claude-code

SKILL.md

migrate-bootstrap.SKILL.md
name: migrate-bootstrap
description: >-
  Migrates a non-SPA (classic) Power Pages site from Bootstrap 3 to Bootstrap 5. Downloads the
  site, runs the pac pages bootstrap-migrate engine, reviews the change report, applies
  AI-assisted fixes for the residual hierarchy/CSS changes the engine only flags, uploads
  the migrated site (which auto-enables the Bootstrap 5 runtime flag), verifies the flag,
  and validates. Use when the user wants to upgrade an older Bootstrap-3 portal to
  Bootstrap 5. NOT for SPA sites (React/Vue/Angular/Astro) โ€” those are never Bootstrap-3.
user-invocable: true
argument-hint: Optional website name or local site folder path
allowed-tools: Read, Write, Edit, Bash, Grep, Glob, AskUserQuestion, Skill, Task, TaskCreate, TaskUpdate, TaskList
model: opus

> **Plugin check**: Run `node "${PLUGIN_ROOT}/scripts/check-version.js"` โ€” if it outputs a message, show it to the user before proceeding.

Migrate a Non-SPA Power Pages Site from Bootstrap 3 to Bootstrap 5

Guide the user through migrating a **non-SPA / native** Power Pages site from Bootstrap 3 to Bootstrap 5. Follow a systematic approach: verify tooling, acquire and back up the site, assess scope, run the `pac pages bootstrap-migrate` engine, review the change report, apply the residual fixes the engine can only flag, upload (which auto-enables the runtime flag), verify, and validate.

Core Principles

  • **Non-SPA sites only**: This skill targets non-SPA Power Pages sites (Liquid web templates,

`*.webtemplate.source.html`, `*.html/.aspx/.ascx`, `*.css`, `sitesetting.yml`). It does **NOT** apply to SPA sites (React/Vue/Angular/Astro) โ€” they are never Bootstrap-3-based. If the target is a SPA site, stop and tell the user this skill doesn't apply.

  • **The engine does the bulk; you do the residual**: `pac pages bootstrap-migrate` deterministically

applies the well-known class renames. The skill's value is assisting with the **hierarchy / CSS changes the engine only logs** (see [references/bootstrap-v5-manual-fixes.md](references/bootstrap-v5-manual-fixes.md)).

  • **Non-destructive, with a restore point**: The engine writes a **new `<folder>V5`** copy and never

edits the source in place. Still, snapshot the source folder (git) before doing anything.

  • **Assist and flag โ€” never silently rewrite**: Residual fixes are Liquid-aware and can break layouts.

Apply them with per-category consent; when a case is ambiguous (e.g. Liquid conditionals), flag it for the user instead of guessing.

  • **Verify the runtime flag flip via `pac-log.txt`**: `pac pages upload` flips the server-side

Bootstrap 5 flag automatically, but **flip outcomes are logged and swallowed** by the CLI. Never trust the upload exit code alone. The authoritative record is the PAC diagnostic log (`pac telemetry status` โ†’ `pac-log.txt`); grep it for `BootstrapV5UploadPostProcessor`. The flip **requires an active portal** โ€” a website record with no provisioned site logs `no portal found` and skips.

  • **Use TaskCreate/TaskUpdate**: Create the todo list upfront with all 8 phases before starting work.

**Initial request:** $ARGUMENTS

---

Phase 1: Verify Prerequisites

**Goal**: Ensure PAC CLI is installed, the user is authenticated, the target environment is confirmed, and the required commands are available.

**Actions**:

1. Create the todo list with all 8 phases (see [Progress Tracking](#progress-tracking)). 2. Run `pac help` to confirm PAC CLI is installed and on PATH. If missing, point the user to `https://aka.ms/PowerPlatformCLI` (`dotnet tool install --global Microsoft.PowerApps.CLI.Tool`) and re-verify. <!-- not-a-gate: data-gathering โ€” free-text environment URL when PAC CLI isn't authenticated; the prompt itself writes nothing -->

3. Run `pac auth who`. If not authenticated, ask for the environment URL via `AskUserQuestion`, then `pac auth create --environment "<URL>"` and re-verify. Capture the environment name, URL, and ID.

<!-- gate: migrate-bootstrap:1.confirm-env | category=consent | cancel-leaves=nothing -->

> ๐Ÿšฆ **Gate (consent ยท migrate-bootstrap:1.confirm-env):** Confirm the target environment before any download, migration, or upload. Running the migration against the wrong environment is destructive, so this confirmation is mandatory.

4. Confirm the target environment with the user (`AskUserQuestion`: use this environment / choose another via `pac org list` + `pac org select`). 5. **Probe command availability** โ€” both verbs are required:

   pac pages help

Confirm `bootstrap-migrate` and `upload` appear in the verb list. If either is missing (feature not enabled in this CLI build / tenant), stop and tell the user the migration can't proceed until those commands are available. 6. **Locate the PAC diagnostic log** โ€” capture the path now; you will need it in Phase 7 to verify the flag flip:

   pac telemetry status

It prints `The diagnostic logs can be found at: <โ€ฆ>\logs\pac-log.txt`. This is a **rolling log across all `pac` runs** and is the **authoritative record of the Bootstrap V5 flag flip**. Note: `pac pages upload` writes **no per-folder log** โ€” `pac-log.txt` is the only place its post-processor records the flip result. Set `PAC_LOG = <that path>`.

**Output**: PAC CLI verified, authenticated session, confirmed environment, `bootstrap-migrate` and `upload` confirmed available, `PAC_LOG` path captured.

---

Phase 2: Acquire the Site & Back Up

**Goal**: Get a local copy of the non-SPA site to migrate, and establish a restore point.

**Actions**:

2.1 Locate or download the site

  • **If the user provided a local site folder path** (or `$ARGUMENTS` names one): verify it exists

and looks like a downloaded non-SPA site (contains `website.yml` and `sitesetting.yml`). Use it as `SITE_FOLDER`.

  • **Otherwise**: list available websites and download the chosen one.
  pac pages list

<!-- gate: migrate-bo

Read more
@microsoft
Ships withpower-platform-skills

Plugins from Microsoft that teach AI assistants, such as GitHub Copilot and Claude Code, to build on Power Platform.

1.1k110 skills25 agents5 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.1k
Star history of microsoft/power-platform-skills on GitHub, a chart by star-history.com

Other skills on power-platform-skills.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, orโ€ฆ

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills13d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android โ€” semantic ARIA roles and labels,โ€ฆ

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commitsโ€ฆ

react4d252k
@facebook@facebookInstall Skill

Questions about migrate-bootstrap.

Which coding agents can use migrate-bootstrap?
migrate-bootstrap installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.