The repository descriptor stays compatible with every supported engine version. Distribution packages use copied descriptors with the target engine version.
Run the packager from the repository root:
python3 Tools/Packaging/package_fab.pyOn Windows, the Python launcher can run the same script:
py -3 Tools/Packaging/package_fab.pyThe default command writes source-only archives for Unreal Engine 5.6, 5.7, and 5.8 under Build/Fab. Each archive contains one DirectiveUtilities folder and can compile on Win64, Mac, or Linux. The current Fab layout is intentional and already accepted: it omits README.md, CHANGELOG.md, LICENSE, unused source artwork, and empty local directories, while retaining the empty Content directory required for code plugins. Keep those exclusions when preparing Fab uploads.
Build one engine version with:
python3 Tools/Packaging/package_fab.py --engine 5.8Validate the source without writing an archive:
python3 Tools/Packaging/package_fab.py --checkThe local release gate also extracts every generated archive and compiles that extracted plugin with its matching Unreal Engine version. This checks the uploaded bytes while leaving the accepted archive layout unchanged.
The packager rejects missing source notices, unsupported module platform lists, paths over Fab's 170-character limit, and local build directories. It sets EngineVersion and Installed only in the copied descriptor.
Upload the archive itself for each Fab engine-version entry. A repository or release page is not a project-file download link.
The completed listing fields are kept in Fab technical information.
GitHub releases keep the prebuilt packages for each engine and host platform. The Fab archives do not replace those downloads.