> ## 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.

# Create a symbol bundle manually

> Learn how to manually create and upload a symbol bundle when automatic symbol bundling isn't available.

MakePkg and Submission Validator normally create the symbol bundle automatically when you package or upload a title. Use this procedure only as a fallback when automatic symbol bundling isn't available or doesn't produce the required bundle.

## Before you begin

Before you create the bundle, collect the following information and files:

* The package full name (`PackageFullName`).
* The title ID (`TitleId`).
* The `Identity` `Name` value from *MicrosoftGame.config*.
* The exact layout file that was passed to MakePkg by using `/f`.
* The packaged EXE and DLL files.
* The exact matching PDB file for each packaged EXE and DLL.

If you created the package without `/f`, use [`makepkg genmap`](/build/core-features/common/packaging/deployment/makepkg#genmap) to create a layout file. Rebuild the package by passing that file to `makepkg pack /f`, and then use the same layout file in the symbol bundle.

> \[!IMPORTANT]
> Each PDB must exactly match the binary from the packaged build. A PDB from a different build can't provide symbols for that binary.

## Create the bundle

1. Create a root directory named `<PackageFullName>_<TitleId>`.

2. In the root directory, create a file named `game.txt` with the following JSON. Replace the placeholder values with the identity name and package full name for your package.

   ```json theme={null}
   {
     "Title": "<IdentityName>",
     "Version": "<PackageFullName>"
   }
   ```

3. Copy the exact layout file that was passed to MakePkg into the root directory. For example, copy `layout.xml`.

4. Re-create the packaged directory path for each EXE and DLL under the root directory.

5. At the location of each packaged EXE or DLL, create a directory named exactly after the binary, including its `.exe` or `.dll` extension.

6. Copy the binary and its exact matching PDB file into that directory.

7. Verify the bundle structure. For example, a package with `MyGame.exe` at the package root and `Resources\MyDll.dll` has the following structure:

   ```text theme={null}
   <PackageFullName>_<TitleId>\
   |-- game.txt
   |-- layout.xml
   |-- MyGame.exe\
   |   |-- MyGame.exe
   |   `-- MyGame.pdb
   `-- Resources\
       `-- MyDll.dll\
           |-- MyDll.dll
           `-- MyDll.pdb
   ```

   <img src="https://mintcdn.com/microsoft-4404708b/5dcGPrKRKcrgaGe7/images/packaging/symbol-bundle-folder-structure.png?fit=max&auto=format&n=5dcGPrKRKcrgaGe7&q=85&s=c2ba7549a824cbe4bfbfa16c5a8a3aa8" alt="Windows File Explorer views of the symbol bundle, with each binary beside its matching PDB in a folder named for the binary." width="581" height="328" data-path="images/packaging/symbol-bundle-folder-structure.png" />

8. Create a ZIP archive that contains `<PackageFullName>_<TitleId>` as its top-level directory.

9. In Partner Center, upload the ZIP archive as the symbol bundle for the matching title and package.


## Related topics

- [Submission Validator introduction](/build/core-features/common/packaging/subval/submissionvalidator.md)
- [Make package (makepkg.exe)](/build/core-features/common/packaging/deployment/makepkg.md)
- [Bundles](/publishing/game-publishing/concepts/bundle.md)
- [Bundles and Season Passes](/publishing/xstore-commerce/xstore-bundles-season-passes.md)
- [Create Command](/build/core-features/common/game-streaming/tak-command-line-tool/game-streaming-tak-command-line-create-command.md)
