FAQ
Questions development and release teams ask first.
Licensing, build-agent dependencies, signing, and how this differs from the capture-first route built for legacy applications.
Is this the same thing as your legacy application capture?
No, and the distinction matters. Capture-first packaging exists for applications whose installer is lost, so the running application becomes the source of truth. This route assumes the opposite: you have a healthy build folder and you want it packaged, signed, and validated as a pipeline step. The two share the same signing, validation, and Intune delivery path at the end, which is why estates with both bought-in and self-built software can use one route for both.
Do we need a licence to use it in our pipeline?
Not for the makeappx-compatible verbs. Packing, unpacking, bundling, unbundling, validating, and resource indexing are licence-free, so forge_msix works as a true drop-in replacement for makeappx.exe with nothing to buy. The value-added workflows, which are creating from a manifest, signing, testing, assessment, certificate management, and the developer registration verbs, require an active EtherApps Forge licence.
Does the build agent need the Windows SDK installed?
No. The CLI calls the Windows packaging API directly, and that engine is an operating system component rather than an SDK dependency, so packages get the same schema enforcement, block map, and layout that makeappx produces. The agent needs Windows 10 version 1709 or later, or Windows 11, on x64. Deployment is a folder you copy and put on PATH, with no installer.
How should we handle code signing in CI?
Sign from a certificate store by thumbprint or subject rather than from a PFX file on disk, so no password is written into a build definition. Add an RFC 3161 timestamp server so signatures stay valid after the certificate expires. Set the publisher in your manifest to the exact certificate subject and leave the publisher mode strict, so a mismatch stops the build rather than quietly changing the identity your customers have already installed.
How do we fail the build when the package is wrong?
Run the validation verb with JSON output and branch on the exit code. It distinguishes an analysed-but-invalid package from an operational failure, which is the difference between a broken package and a broken agent. Keep the switches that allow a build to continue past validation or semantic errors out of release pipelines; they are diagnostic tools for working out why a package will not build, not settings to leave enabled.
Can we still package our own build if it needs container fix-ups?
Yes. Applications written before MSIX often assume behaviour the container does not allow, such as writing next to their own executable or expecting a fixed installation path. Forge stages the Package Support Framework so those cases are corrected with file and registry redirection and working-directory fix-ups, with no change to your source code. For your own software you may prefer to fix the behaviour at source, but the framework means a release is not blocked while you do.
What about updates for customers who sideload rather than use a store?
Generate an app installer manifest from the signed package, which derives the identity from the package itself and is bundle aware. Publish the package and that manifest to an HTTPS location, and installed copies can update themselves from there. That gives sideloaded and enterprise customers an update path without a store listing or a manual reinstall.
Can we fix a package we have already shipped without rebuilding it?
Yes. A package can be extracted into a working directory, edited surgically, validated, and repacked: manifest values, capabilities, payload files, and the package virtual registry can all be changed, and every manifest edit is validated before it is written so a malformed change is rejected rather than saved. Repacking changes the content hash, so the package has to be signed again afterwards.