> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Make package (makepkg.exe)

> Make package (makepkg.exe)

Creates app packages, uploads packages to Partner Center, and performs related packaging operations. `makepkg` supports the XVC, MSIXVC, and MSIXVC2 package formats. Use the `/msixvc2` option to generate packages in the MSIXVC2 format.

```text theme={null}
makepkg <command> [options]
```

## Global options

| Option     | Description                            |
| ---------- | -------------------------------------- |
| `/v`       | Enables verbose output to the console. |
| `/?`, `/h` | Shows help and usage information.      |

## Commands

* [pack](#pack) - Creates a new app package from files on disk.
* [upload](#upload) - Uploads a package or a directory of files to Partner Center.
* [genkey](#genkey) - Generates an encryption key for use with `pack /lk`.
* [genid](#genid) - Converts between a Product ID GUID and a Store ID.
* [genmap](#genmap) - Generates a mapping XML file based on content on disk.
* [validate](#validate) - Runs validation without creating a package.
* [updatesubval](#updatesubval) - Updates SubmissionValidator.dll without running another operation.
* [localize](#localize) - Generates a Resources.pri file based on content on disk.

## pack

Creates a new app package from files on disk.

```text theme={null}
makepkg pack [options]
```

**Sample usage:**

```text theme={null}
makepkg pack /msixvc2 /f layout.xml /d <sourcedir> /pc /pd <destinationdir>
```

### Options

| Option                              | Description                                                                                                                                                                                                                                                                                                          |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/msixvc2`                          | Generates a package in the MSIXVC2 package format. Without this option, an MSIXVC package is generated.                                                                                                                                                                                                              |
| `/updcompat 3`                      | Uses subfile content update granularity for XVC and MSIXVC packages. The only supported value is `3`.                                                                                                                                                                                                                |
| `/d <sourcedir>`                    | **(Required)** Specifies the source directory that contains the content to package.                                                                                                                                                                                                                                  |
| `/pd <destinationdir>`              | **(Required)** Specifies the destination directory for the generated package.                                                                                                                                                                                                                                        |
| `/f <mapfile>`                      | Specifies the mapping file to use for packaging. If omitted, a default single-chunk layout is generated.                                                                                                                                                                                                             |
| `/compress <method>`                | Compresses the output. Available methods are `Automatic` (default) and `None`. `Automatic` uses Brotli for MSIXVC2 packages and no compression for XVC or MSIXVC packages.                                                                                                                                           |
| `/pc`                               | Generates a package for use on PC.                                                                                                                                                                                                                                                                                   |
| `/contentid <contentid>`            | Specifies the content ID to which this package belongs.                                                                                                                                                                                                                                                              |
| `/gameos <gameos>`                  | Specifies the game OS file to embed in the package.                                                                                                                                                                                                                                                                  |
| `/l`                                | Encrypts the package with a unique content license. When submitting an XVC or MSIXVC package to certification, use `/l` or `/lk` unless the Certification team directs you otherwise.                                                                                                                                |
| `/lk <key.lekb>`                    | Encrypts the package with a content license by using a specified key file. Use `genkey` to generate the key file. When submitting an XVC or MSIXVC package to certification, use `/l` or `/lk` unless the Certification team directs you otherwise.                                                                  |
| `/productid <productid>`            | Specifies the product ID to which this package belongs.                                                                                                                                                                                                                                                              |
| `/maxencryptionfragments <count>`   | Specifies the number of encryption fragments to reserve in the package metadata. This option applies only to XVC and MSIXVC packages.                                                                                                                                                                                |
| `/priorpackage <OldPackage.msixvc>` | Specifies an XVC, MSIXVC, or MSIXVC2 package from a prior pack operation for content update size comparison.                                                                                                                                                                                                         |
| `/loggable`                         | Suppresses output containing control characters that aren't suitable for a log file.                                                                                                                                                                                                                                 |
| `/symbolpaths <symbolpaths>`        | Specifies additional paths for symbol resolution lookup during symbol bundling. Separate paths with semicolons.                                                                                                                                                                                                      |
| `/skipsymbolbundling`               | Skips symbol bundling.                                                                                                                                                                                                                                                                                               |
| `/skipvalidation`                   | Skips Submission Validator. Don't use this option for builds that might be submitted to certification.                                                                                                                                                                                                               |
| `/validationcritical`               | Treats Submission Validator failures as critical failures for the `makepkg` process.                                                                                                                                                                                                                                 |
| `/openvalidationlog`                | Opens the Submission Validator log file in the default XML application after validation.                                                                                                                                                                                                                             |
| `/validationlanguage <lang>`        | Specifies an additional language for the Submission Validator log file.                                                                                                                                                                                                                                              |
| `/validationpath <path>`            | Specifies the directory from which to load SubmissionValidator.dll.                                                                                                                                                                                                                                                  |
| `/updatesubval`                     | Downloads the latest SubmissionValidator.dll before validation unless the installed version is current. Use `/validationpath` to select a different location. If the update fails, packaging or validation continues with the installed DLL. To update without another operation, use [updatesubval](#updatesubval). |

### Remarks

By default, `makepkg pack` encrypts XVC or MSIXVC packages by using a well-known encryption key recognized by all development kits for testing. These packages aren't cryptographically protected.

For additional upload protection, XVC and MSIXVC packages can use `/l` or `/lk`. Packages that use `/l` can't be installed on a development kit or PC before upload. Packages that use `/lk` can be installed on a development kit before upload. Regardless of the upload encryption mode, the XBOX service encrypts the package for distribution with Microsoft-managed encryption keys.

MSIXVC2 packages don't use client-side upload encryption. The XBOX service handles encryption for distribution.

For information about the mapping file schema, see [Deployment package schema](/build/core-features/common/packaging/deployment/atoc-deployment-schema).

## upload

Uploads a package to Partner Center. For MSIXVC2 only, the `upload` command can also package loose files and upload them in one operation when `/d` is specified. Loose file upload requires the `/msixvc2` option.

If a branch or flight isn't specified, the package is uploaded to the `main` branch.

The EKB file and Submission Validator log file should be in the same directory as the package and are uploaded automatically. A symbol bundle is also uploaded when present. The Store ID is extracted from the package, but it can be provided when the package was generated without one.

```text theme={null}
makepkg upload [options]
```

**Sample usage (upload a prebuilt package):**

```text theme={null}
makepkg upload /pd <package_directory> /branch <branch> /auth CacheableBrowser
```

**Sample usage (package and upload loose files):**

```text theme={null}
makepkg upload /d <sourcedir> /msixvc2 /pc /branch <branch>
```

### Package source options

| Option                    | Description                                                                                                                       |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `/pd <package_directory>` | Specifies the package file or its directory. If the directory contains more than one package, specify the full package file name. |
| `/d <sourcedir>`          | Specifies the source directory to package and upload in one operation.                                                            |
| `/f <mapfile>`            | Specifies the mapping file to use with `/d`.                                                                                      |
| `/msixvc2`                | Generates an MSIXVC2 package when used with `/d`.                                                                                 |
| `/compress <method>`      | Compresses the output. Available methods are `Automatic` (default) and `None`.                                                    |
| `/pc`                     | Generates a PC package when used with `/d`.                                                                                       |
| `/productid <productid>`  | Specifies the product ID to which this package belongs.                                                                           |

### Destination options

| Option               | Description                                                                                        |
| -------------------- | -------------------------------------------------------------------------------------------------- |
| `/storeid <storeId>` | Specifies the Store ID. If omitted, the Store ID is extracted from the package.                    |
| `/branch <branch>`   | Specifies the branch to upload to. Defaults to `main` if neither a branch nor flight is specified. |
| `/flight <flight>`   | Specifies the flight to upload to. This option can't be used with `/branch`.                       |
| `/market <market>`   | Specifies the market to upload to. Defaults to `default`.                                          |
| `/disclayout <path>` | Specifies a disc layout file for a package that ships on more than one disc.                       |

### Authentication options

| Option                         | Description                                                                                                                                                                                                                                                                                                              |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `/auth <method>`               | Specifies the authentication method. The default is `CacheableBrowser`. Multiple methods are available only for MSIXVC2 uploads. XVC and MSIXVC uploads can use only `CacheableBrowser`. For advanced authentication with those formats, use [Package Uploader](/build/core-features/common/packaging/package-uploader). |
| `/tenantid <tenantId>`         | Specifies the tenant to upload to. If omitted, the user's default tenant is used.                                                                                                                                                                                                                                        |
| `/clientid <clientId>`         | Specifies the client ID. Required for `ManagedIdentity`, `ClientCertificate`, and `ClientSecret`.                                                                                                                                                                                                                        |
| `/clientsecret <secret>`       | Specifies the client secret. Requires `/auth ClientSecret`.                                                                                                                                                                                                                                                              |
| `/certthumbprint <thumbprint>` | Specifies the certificate thumbprint for `ClientCertificate`.                                                                                                                                                                                                                                                            |
| `/certstore <store>`           | Specifies the certificate store name. Defaults to `My`.                                                                                                                                                                                                                                                                  |
| `/certlocation <location>`     | Specifies the certificate location, such as `CurrentUser` or `LocalMachine`. Defaults to `CurrentUser`.                                                                                                                                                                                                                  |
| `/certpassword <password>`     | Specifies the password for a password-protected certificate file.                                                                                                                                                                                                                                                        |
| `/resourceid <resourceId>`     | Specifies the Azure resource ID for `ManagedIdentityFederated`.                                                                                                                                                                                                                                                          |

### Validation and symbol options

| Option                       | Description                                                                                             |
| ---------------------------- | ------------------------------------------------------------------------------------------------------- |
| `/skipvalidation`            | Skips Submission Validator.                                                                             |
| `/validationcritical`        | Treats Submission Validator failures as critical failures.                                              |
| `/validationlanguage <lang>` | Specifies an additional language for the Submission Validator log file.                                 |
| `/validationpath <path>`     | Specifies the directory from which to load SubmissionValidator.dll.                                     |
| `/updatesubval`              | Downloads the latest SubmissionValidator.dll before validation. See [pack](#pack) for failure behavior. |
| `/symbolpaths <symbolpaths>` | Specifies additional symbol resolution paths separated by semicolons.                                   |
| `/skipsymbolbundling`        | Skips symbol bundling.                                                                                  |

### Authentication methods

| Method                     | Description                                                                                 |
| -------------------------- | ------------------------------------------------------------------------------------------- |
| `CacheableBrowser`         | Opens a browser for interactive sign-in and caches credentials. This method is the default. |
| `Browser`                  | Opens a browser for interactive sign-in without caching credentials.                        |
| `AzureCli`                 | Uses Azure CLI credentials.                                                                 |
| `AzurePipelines`           | Uses the Azure Pipelines service connection.                                                |
| `ManagedIdentity`          | Uses an Azure managed identity. Requires `/clientid`.                                       |
| `ManagedIdentityFederated` | Uses a federated managed identity. Requires `/clientid` and `/resourceid`.                  |
| `ClientSecret`             | Uses a client ID and secret. Requires `/clientid` and `/clientsecret`.                      |
| `ClientCertificate`        | Uses a client certificate. Requires `/clientid` and `/certthumbprint`.                      |
| `Environment`              | Uses credentials from environment variables.                                                |
| `Default`                  | Tries multiple authentication methods in sequence.                                          |

## genkey

Generates a local escrowed key blob (LEKB) for use with `pack /lk`.

```text theme={null}
makepkg genkey [options]
```

| Option           | Description                                                                                                                                   |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `/ekb <ekbfile>` | Specifies the path for the generated LEKB file. Use the `.lekb` extension to distinguish it from the `.ekb` file generated by `makepkg pack`. |

Provide the LEKB file to `makepkg pack /lk` to use a stable encryption key during package creation. This key:

1. Allows `packageutil compare` to generate accurate update-size estimates.
2. Enables secure delta uploads to Partner Center by using the same algorithm that consoles and PCs use to download content updates.
3. Produces packages that can be installed on development kits.
4. Uses secure encryption key material that can only be decrypted in specific environments.

The LEKB file contains lightly obfuscated encryption key material. Anyone who has both the LEKB file and the package can decrypt the package, so secure access to the file.

## genid

Converts between a Product ID GUID and a Store ID.

```text theme={null}
makepkg genid [options]
```

| Option                   | Description                               |
| ------------------------ | ----------------------------------------- |
| `/storeid <storeId>`     | Specifies the Store ID to convert.        |
| `/productid <productId>` | Specifies the Product ID GUID to convert. |

## genmap

Generates a mapping XML file based on content on disk. The generated file contains one chunk and can be edited to split content into multiple chunks or add Intelligent Delivery tags.

```text theme={null}
makepkg genmap /f <mapfile> /d <contentdirectory>
```

| Option                  | Description                                                           |
| ----------------------- | --------------------------------------------------------------------- |
| `/f <mapfile>`          | Specifies the path for the generated mapping file.                    |
| `/d <contentdirectory>` | Specifies the directory whose contents are added to the mapping file. |

## validate

Runs package validation without creating a package. Use this command to verify content and configuration before a full pack operation.

```text theme={null}
makepkg validate [options]
```

The `validate` command accepts the same options as [pack](#pack).

## updatesubval

Downloads, verifies, and installs the latest SubmissionValidator.dll without creating, validating, or uploading a package.

```text theme={null}
makepkg updatesubval [/validationpath <path>]
```

### Options

| Option                   | Description                                                                                                                                                                             |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/validationpath <path>` | Specifies the directory that contains or should receive SubmissionValidator.dll. If omitted, the command checks the `makepkg` tool directory, followed by the `%GameDK%\bin` directory. |

### Remarks

If SubmissionValidator.dll is already the latest version, the command reports that it's current and exits successfully without downloading it. If the file is missing, the command installs it. On success, the command displays the version of SubmissionValidator.dll that's on disk.

Unlike the `/updatesubval` option used during packaging or validation, the standalone `updatesubval` command returns a nonzero exit code if the update fails. When used as an option, an update failure is non-fatal and the packaging or validation operation continues with the installed version of SubmissionValidator.dll.

## localize

Generates a Resources.pri file based on content on disk.

```text theme={null}
makepkg localize /d <sourcedir> [options]
```

| Option                 | Description                                                                                                            |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `/d <sourcedir>`       | **(Required)** Specifies the source directory that contains the content to localize.                                   |
| `/resw <reswdir>`      | Specifies a directory relative to the root directory that contains RESW files.                                         |
| `/pd <outputdir>`      | Specifies the output directory for Resources.pri. If omitted, the file is placed in the content directory.             |
| `/t <tempdir>`         | Specifies a temporary directory for converting Resources.pri to XML.                                                   |
| `/gc <gameconfigpath>` | Specifies the MicrosoftGame.config path when the file isn't at the base of the content directory or uses another name. |

For more information, see [MicrosoftGame.config localization](/build/core-features/common/game-config/MicrosoftGameConfig-Localization).

## Related topics

[MSIXVC2 packaging overview](/build/core-features/common/packaging/overviews/packaging-msixvc2-overview)

[Getting started with MSIXVC2 for PC](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2)

[Deployment package schema](/build/core-features/common/packaging/deployment/atoc-deployment-schema)

[XBOX Game Package Manager](/build/core-features/common/packaging/xgpm)

[Automating package uploading](/build/core-features/common/packaging/package-uploader)


## Related topics

- [packageutil.exe](/build/core-features/common/packaging/deployment/packageutil.md)
- [Deployment package schema](/build/core-features/common/packaging/deployment/atoc-deployment-schema.md)
- [Get started packaging PC titles with MSIXVC tools](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC.md)
- [Getting started with MSIXVC2 packaging for PC](/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)
- [Command-line tools for PC development](/tools/tools-pc/commandlinetools/gr-commandlinetools-toc.md)
