generate-ppmplugin-manifest

Validates and stages the manifest.json descriptor for a .ppmplugin native extension bundle.

808|167|Updated Jan 21, 2026
One-click install
npx skills add https://github.com/microsoft/power-platform-skills --skill generate-ppmplugin-manifest
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: generate-ppmplugin-manifest
Source: https://github.com/microsoft/power-platform-skills/tree/main/plugins/power-apps-mobile-extension/skills/generate-ppmplugin-manifest
Command: npx skills add https://github.com/microsoft/power-platform-skills --skill generate-ppmplugin-manifest

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Building a .ppmplugin bundle for Power Apps mobile native extensions requires a precisely formatted manifest.json that the wrap runtime and upload service accept. Hand-authoring it risks name-regex violations, reserved module names, mismatched entrypoints, and dispatch failures that only surface at upload or on device.

Core Features & Use Cases

  • Validate-and-stage mode: Reads the committed ./manifest.json authored by /generate-native-extension, runs upload-compatibility checks locally (name regex, canonical prefix, known incompatible names, method and identifier shapes), reconciles entrypoints to the chosen target platform(s), and writes the gitignored staged copy ppmplugin/staging/manifest.json.
  • Author-from-source fallback: When no committed manifest exists, derives every field from the Android Kotlin module and iOS Objective-C source (class name, getName(), ReactPackage FQN, @ReactMethod list) and writes both the committed and staged manifests.
  • Target-aware reconciliation: Confirms Android-only, iOS-only, or Both via a structure preflight, trims entrypoints accordingly, and records state in .extension-state.md for re-runs.
  • Use Case: After scaffolding a native extension with /generate-native-extension, run this skill to pre-flight the manifest before invoking /build-android-binary or /assemble-ppmplugin, catching upload failures without any toolchain.

Quick Start

Ask the assistant to validate and stage the ppmplugin manifest for the current native extension repo targeting Android.

Frequently Asked Questions about generate-ppmplugin-manifest

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a manifest.json for a .ppmplugin bundle?

Run this skill in a third-party-control repo with an android/ or ios/ native module. It reads the committed ./manifest.json if one exists, or derives every field from the native module source (class name, getName(), ReactPackage, @ReactMethod annotations) and writes both the committed and staged copies.

How do I validate a ppmplugin manifest before uploading?

The skill runs local pre-flight checks from the ppmplugin-format spec: kebab-case name regex, canonical prefix match on nativeModule, reserved and known-incompatible name blocking, method count and identifier shapes, and absence of SDK-era JS-layer fields. Any failure stops with a BLOCKED message and a concrete fix.

Does the manifest skill support both Android and iOS targets?

Yes. A structure preflight checks which platforms are complete, then you confirm Android-only, iOS-only, or Both. The staged manifest's entrypoints are trimmed to the chosen targets, declaring dex/packageClass for Android and framework/moduleClass for iOS.

Why does manifest validation fail on names like DeviceInfo?

DeviceInfo, AuthenticationHelper, NetworkClient, DataverseOfflineProvider, and IntuneMAM are known incompatible exact names blocked by the upload service. Rename the module's getName() with a Module suffix or vendor prefix, then re-derive nativeModule to match.

What are the limitations of this manifest staging skill?

It performs no compilation, zipping, or binary verification — those belong to /build-android-binary, /build-ios-binary, and /assemble-ppmplugin. Its incompatible-name list is a non-exhaustive local subset, so passing locally does not guarantee upload acceptance.