Package structure

What's inside the ZIP MigrateTo gives you, file by file.

Top-level layout

portal-package/
├── manifest.json            ← package metadata, schema version
├── web-templates/           ← reusable Liquid blocks
│   ├── header.html
│   └── footer.html
├── page-templates/          ← top-level pages
│   ├── home.html
│   └── article.html
├── content-snippets/        ← named editable strings
│   └── snippets.json
├── web-files/               ← static assets (images, fonts)
│   ├── images/...
│   └── fonts/...
├── basic-forms/             ← form definitions
│   └── ...
└── pipelines/
    └── azure-devops.yml     ← reference pipeline (optional)

manifest.json

Schema-versioned. The Power Platform CLI reads this to determine what to upload. We pin schemaVersion: 1 for current packages.

web-templates

  • One file per Figma component you marked as reusable web template in the components panel.
  • Named with the kebab-case component name.
  • Included from page-templates with {% include 'header' %}.

page-templates

  • One file per top-level Figma page or designated landing frame.
  • Includes header/footer, runs FetchXML where you bound data, and uses Power Pages Web API for forms.

content-snippets

Any text layer marked editable on the canvas becomes a content snippet. Authors can change them in the Power Pages portal management app without redeploying.

web-files

Image fills exported from Figma plus any font files referenced by the design system. Filenames are content-hashed for cache-busting.

basic-forms

Each form frame with a bound table emits a Power Pages basic form definition with the right entity logical name and column mappings.

pipelines/azure-devops.yml

A reference pipeline that authenticates with a service connection, runs pac paportal upload, and posts the result back to your team. Edit before use — every tenant's auth flow differs.

Was this page helpful?Send feedback →