Distribute and grow
Distribute and grow

Oculus platform utility reference

Updated: Jan 15, 2026
The Oculus platform utility is a command-line tool that enables you to upload builds to your release channels much faster than using the developer dashboard web interface, and it enables larger upload packages. It also allows you to incorporate automated uploads into your existing build system.
The Oculus platform utility uploads builds faster because it analyzes your build and only uploads the parts that have changed since your last upload.
This topic contains the following sections:

Download and install the utility

  1. Select the appropriate download for your system:
  2. Copy the utility to the directory of your choice.
  3. For Mac and Linux, you will need to change the access permissions of the utility for it to execute:
    • Change directories (cd) to the location of the file
    • At the command prompt, type: chmod +x ./ovr-platform-util
    • Run the utility by typing ./ovr-platform-util and a command

Obtain credentials to use the utility

You will need the app ID, app secret or user token, and build ID to complete some of the commands. Note that commands accept an app secret or user token to verify access to the app. You can access the app secret or user token on the Developer Dashboard.

Generate your user token

Use the following process to get these values:
  1. Go to the Meta Horizon Developer Dashboard.
  2. Navigate to the Account settings page from the Account dropdown in the left hand navigation panel.
  3. Select your platform, if it’s different from the one you are currently using, and click Generate token.

Obtain build ID

To download an existing build, you must first obtain its build ID. You can acquire the build ID in two ways:
  • After successfully uploading an app build with the utility, the build ID will appear in the output.
  • Alternatively, you can find the build ID on the Developer Dashboard by following these steps:
To get the build ID for an app in the Developer Dashboard:
  1. Go to the Meta Horizon Developer Dashboard.
  2. Select your app.
  3. In the Recently uploaded builds section of the main panel, in the Build column, click on the desired build version to get more details.
    The Build ID is displayed on the Details tab of the selected app version.

Use the Oculus platform tool for Unity or Unreal Engine

Oculus offers a UI integration of the Oculus Platform Utility for Unity and Unreal Engine.

Command quick reference

The utility supports Meta Quest uploads and downloads. In addition, there are commands to manage the utility and get help. The following is a list of commands for the utility:

Manage the utility and get user tokens

TaskCommand
Get help with the utility
Get the version of the Oculus platform utility
Update the Oculus platform utility
The following commands help you manage apps that target a Rift headset.
TaskCommand
Upload a Rift build
Download a Rift build
Clone an existing Rift build
Move build to a different release channel
Upload an add-on files such as DLC or IAP

Manage Meta Quest builds

The following commands help you manage apps that target Meta Quest devices.
TaskCommand
Upload a Meta Quest build
Download a Meta Quest build
Upload debug symbols for an existing build
Move build to a different release channel
Upload an add-on files such as DLC or IAP

Get help with the utility

Use the following command to get a list of commands and other help for the utility.
$ ovr-platform-util.exe help

Check the utility version

You can check what version of the utility you have by using the version command
$ ovr-platform-util version
This will generate output like the following:
Oculus Platform Command Line Utility - 1.54.0.000001 (Built on Tue Jul 28 2020)

Configure the utility to self update

You can configure the utility to self update using the self-update command.
$ ovr-platform-util self-update
This will result in output like the following:
Checking for the latest version
Already running the latest version 1.54.0.000001

Upload a Link PC-VR build

Following is the syntax and parameters for uploading a Rift app to the Rift store.

Syntax


$ ovr-platform-util upload-rift-build -a <AppID>  --app-secret <App-Secret> --token <User-Token> -d <BuildPath> -l <LaunchFile>
-c <ReleaseChannel> -v <Number> -n <Text> --assets-dir <assset-dir> --asset-files-config <config.json>  --language-packs-dir [-p <Arguments>] [-L <2DLaunchFile>] [-P <2DArguments>]
[-r <RedistID>[,]...] [-f {true|false}] [--help  {true|false}] [--clean  {true|false}] [--inherit-assets  {true|false}]

Parameters

SyntaxDescription
-d <buildPath>
--build-dir <buildPath>
Required. Specifies the full path to the directory containing your build files.
-a <ID>
--app-id <ID>
Required. Specifies the ID of your app. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-s <app-secret>
--app-secret <app-secret>
Required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.
-c <releaseChannel>
--channel <ReleaseChannel>
Required. Specifies the release channel for uploading the build. Use store for the "Production (AppLab)" or "Production (Store)" channels. Release channel names are not case-sensitive.
-v <version-number>
--version <version-number>
Required. Specifies the version number shown to users.
-l <launchFile>
--launch-file <launchFile>
Required. Specifies the relative path from the the build directory to the executable that launches your app.
-n <text>
--notes <text>
Optional. Specifies the release note text shown to users. Enclose the text in quotation marks. Encodes double quotes as \". Encode newlines as \n.
-p <arguments>
--launch-params <arguments>
Optional. Specifies any arguments passed to the launcher.

--assets-dir <dirPath>
Optional Specifies the path to the directory with DLCs for this build.

--asset-files-config <filePath>
Optional. Specifies the path to the file that configures required assets or associates DLC assets with in-app purchases.

--language-packs-dir <file-path>
Optional. The path to the directory that contains language packs.
-L <2DLaunchFile>
--launch-file-2d <2DLaunchFile>
Optional. Specifies the relative path from the build directory to the executable that launches your app in 2D mode.
-P <2DArguments>
--launch-params-2d <2DArguments>
Optional. Specifies any arguments passed to the launcher in 2D mode.
-r <redistID>,<redistID2>...
--redistributables <redistID>,<redistID2>....
Optional. Specifies one or more redistributable IDs. Enclose the IDs with quotation marks. Separate multiple redistributable IDs with commas. Example - “RedistID1,RedistID2”.
See the Redistributable section for a complete list of redistributables and their IDs
-f {true/false}
--firewall-exceptions {true/false}
Optional. Specifies if a Windows Firewall exception is required. True or False. Default is false.
-g <option>
--gamepad-emulation <option>
Optional. Allow for gamepad emulation via Touch (Options as “OFF”, “TWINSTICK”, “RIGHT_D_PAD”, and “LEFT_D_PAD”).
For the full syntax and parameter descriptions, see the Oculus Platform Command Line Utility page.
Syntax
Description
--help
Optional. Show help for the command
--draft
Optional. Uploads as a draft which can be later published on the Developer Dashboard.
--clean
Optional. Skips the caching layer and performs a fresh upload. Use this if you want to force the tool to start over and recompute the checksums of an interrupted upload session instead of continuing where it left off.
--config
Optional. Provides the JSON file with configuration parameters
--inherit-asset-files
Optional. A boolean that indicates whether to inherit asset files from the previous build. The default is false.
--exclude-addons
Optional. A boolean that indicates whether to exclude the add-ons associated with this app. The default is false.
--disable-progress-bar
Optional. A boolean that indicates whether to disable progress bar.

Examples

This upload example uses the fictitious app “Rabbit Hole” and assumes the following sample parameters. Note that the example shows Windows file syntax.
  • App ID: 10001234
  • Token: 1234abcd
  • Build Directory: C:\Rabbit Hole
  • Launch File: C:\Rabbit Hole\bin\badrabbits.exe
  • New version: 1.1
  • Release Note: Fixes the rabbit spawn bug.
*Simple Rift Upload Example**
To upload version 1.1 of Rabbit Hole to the RC release channel, enter:
$ ovr-platform-util upload-rift-build --app-id 10001234 --token 1234abcd
-d "C:\Rabbit Hole" -l "bin\badrabbits.exe"
-n "Fixes the rabbit spawn bug." -v 1.1 -c rc
Upload with redistributables example
If the app requires .NET Framework 3.5 and Visual C++ 2013 x86 redistributable files, enter:
$ ovr-platform-util upload-rift-build --app-id 10001234 --app-secret 1234abcd -d "C:\Rabbit Hole" -l "bin\badrabbits.exe" -n "Fixes the rabbit spawn bug."
-v 1.1 -c rc -r "606493776156948, 910524935693407"
2D mode with firewall exception example
If the app requires a Windows Firewall exception, Windows 10 as a minimum version, and has a 2D mode executable file and argument string of badrabbits2d.exe -force2dfix, enter:
$ ovr-platform-util upload-rift-build --app-id 10001234 --token 1234abcd
-d "C:\Rabbit Hole" -l "bin\badrabbits.exe"
-n "Fixes the rabbit spawn bug." -v 1.1  -c rc -L badrabbits2d.exe
-P '-force2dfix' -f -w "10"
Multi-line release note example
If you have a multi-line release note, enter:
$ ovr-platform-util upload-rift-build --app-id 10001234 --token 1234abcd -d "C:\Rabbit Hole" -l "bin\badrabbits.exe"
-n  "Carrots now available as in-app purchases.\nBlue rabbits no longer \"glitch\" and get stuck in terrain.\nSpawn sound spatialization adjusted for realism."
-v 1.1 -c rc

Download a Link PC-VR build

The syntax to download a Rift app from the Rift store is as follows:

Syntax

$ ovr-platform-util download-rift-build -b <BuildID> -d <Directory>

Parameters

SyntaxDescription
-b <buildID>
--build-id <buildID>
Required. Specifies the build ID you want to download. You can obtain this from the CLI output after successfully uploading an app build with the command line tool.
-d <directory>
--output-dir <directory>
Required. Specifies the directory you want to download the build to.
-t <token>
--token <token>
Required. A user token obtained from the Developer Dashboard.

Options

Syntax
Description
--help
Optional. Show help for the command
-c
--concurrency
Optional. An integer indicuating how many segments to download at a time. Default is 10.
Rift download example
To download the app build with build ID 3141592653589793 to “C:\Pie Thrower”:
  1. Enter:
    $ ovr-platform-util download-rift-build -b 3141592653589793 -d "C:\Pie Thrower"
    
  2. Provide the email address and password of an Oculus user authorized to download the app.
  3. The build should download to the specified directory.

Add the entitlement check to an executable

Add Oculus Platform Entitlement Check to specified executables.

Syntax

$ ovr-platform-util add-entitlement-check -b <BuildID> -d <Directory>

Parameters

SyntaxDescription
-d <buildPath>
--build-dir <buildPath>
Required. Specifies the full path to the directory containing your build files.
-d <directory>
--output-dir <directory>
Required. Specifies the directory you want to download the build to.

Clone a Link PC-VR build

This command will clone an existing Rift build to create a new build. You can optionally modify any of the metadata for the build. The new build will be placed in the release channel specified by the destination_channel parameter. The build to be cloned can either be picked from another channel by using the source_channel or specified explicitly by using the build_id parameter.

Syntax

ovr-platform-util clone-rift-build --app-id <AppID>  --app-secret <App-Secret> --token <User-Token> --source-channel <Channel> --destination-channel <Channel> [OPTIONS]

Parameters

SyntaxDescription
-a <ID>
--app-id <ID>
Required. Specifies the ID of your app. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-s <app-secret>
--app-secret <app-secret>
Either app secret or user token required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.

--destination-channel <channel>
Required. Specifies the release channel to be updated.

--source-channel <channel>
Optional. If specified, the build from this channel will be copied to the destination channel.
-b <buildID>
--build-id <buildID>
Optional. Specifies the build ID you want to download. You can obtain this from the CLI output after successfully uploading an app build with the command line tool.
-v <version-number>
--version <version-number>
Required. Specifies the version number shown to users.
-l <launchFile>
--launch-file <launchFile>
Required. Specifies the relative path from the the build directory to the executable that launches your app.
-n <text>
--notes <text>
Optional. Specifies the release note text shown to users. Enclose the text in quotation marks. Encodes double quotes as \". Encode newlines as \n.
-p <arguments>
--launch-params <arguments>
Optional. Specifies any arguments passed to the launcher.
-L <2DLaunchFile>
--launch-file-2d <2DLaunchFile>
Optional. Specifies the relative path from the build directory to the executable that launches your app in 2D mode.
-P <2DArguments>
--launch-params-2d <2DArguments>
Optional. Specifies any arguments passed to the launcher in 2D mode.
-r <redistID>,<redistID2>...
--redistributables <redistID>,<redistID2>....
Optional. Specifies one or more redistributable IDs. Enclose the IDs with quotation marks. Separate multiple redistributable IDs with commas. Example - “RedistID1,RedistID2”.
See the Redistributable section for a complete list of redistributables and their IDs
-f {true/false}
--firewall-exceptions {true/false}
Optional. Specifies if a Windows Firewall exception is required. True or False. Default is false.
-w {"7SP1"/8.1/10}
--windows-min-version {"7SP1"/8.1/10}
Optional. Specifies the minimum required Windows version. The versions that can be specified are “7SP1”, 8.1, 10. The default is “7SP1”.
-g <option>
--gamepad-emulation <option>
Optional. Allow for gamepad emulation via Touch (Options as “OFF”, “TWINSTICK”, “RIGHT_D_PAD”, and “LEFT_D_PAD”).
Clone Link PC-VR build example
ovr-platform-util clone-rift-build --app-id 10001234 --app-secret 1234abdc --source-channel alpha --destination-channel beta --launch-params "server=beta"

Redistributable ID reference

Following is a list of redistributable packages and their associated IDs.
NameRedistributable ID
.NET Framework 3.5
606493776156948
.NET Framework 4.0
133610290311340
.NET Framework 4.5.1
1617306711884127
.NET Framework 4.7.1
1667821599930345
DirectX (June 2010)
822786567843179
OpenAL 1.1
1147517301974655
Visual C++
20051604897159783747
Visual C++
2008118440348500045
Visual C++
2010532320330249657
Visual C++
2010 x861008652072555515
Visual C++
20121683508698536289
Visual C++
2012 x861002692246447245
Visual C++
20131675031999409058
Visual C++
2013 x86910524935693407
Visual C++
2015 Update 31183534128364060
Visual C++
2015 x86 Update 31113033105419344
Visual C++
20171315322525257173
Visual C++
2017 x861064693870299984
Visual C++
20192657209094360789
Visual C++
2019 x862556834837738356
Vulkan Runtime
1.0.65.11824471960899274
Vulkan Runtime
1.1.73.01941020095932382

Upload Meta Quest build

Following is the syntax and parameters for uploading a Meta Quest app to the Meta Horizon store. You must identify the intended age group for your app. For more information, see Age Group Self-Certification and Youth Requirements.

Syntax

ovr-platform-util upload-quest-build --age-group {TEENS_AND_ADULTS | MIXED_AGES | CHILDREN} --app_id <ID>  --app_secret <app-secret> --token <user-token> --apk <path/to/Your.apk> --obb <path/to/Your.obb> --assets-dir <path/to/DLCs/dir> --channel <ReleaseChannel> --notes <ReleaseNotes>  --asset-files-config <config.json>  --language-packs-dir <path>  --debug_symbols_dir <DirPath> --debug-symbols-pattern <FilenamePattern> [--help  {true|false}]  [--inherit-assets  {true|false}]
 [--exclude-addons  {true|false}]

Parameters

SyntaxDescription
--age-group
Required. (If not specified, the upload will go into “draft” status, rather than failing.) Age group of the build. This can be TEENS_AND_ADULTS, MIXED_AGES, or CHILDREN. For more information, see Age Group Self-Certification and Youth Requirements.
-a <ID>
--app-id <ID>
Required. Specifies the ID of your app. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-s <app-secret>
--app-secret <app-secret>
Either app secret or user token required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.

--apk <filePath>
Required. Specifies the path to the APK file to upload.

--assets-dir <dirPath>
Optional Specifies the path to the directory with DLCs for this build.

--asset-files-config <filePath>
Optional. Specifies the path to the file that configures required assets or associates DLC assets with in-app purchases.

--obb <filePath>
Optional. Specifies the path to the Expansion file (OBB) to upload.
-c <releaseChannel>
--channel <ReleaseChannel>
Required. Specifies the release channel for uploading the build. Use store for the "Production (AppLab)" or "Production (Store)" channels. Release channel names are not case-sensitive.
-n <text>
--notes <text>
Optional. Specifies the release note text shown to users. Enclose the text in quotation marks. Encodes double quotes as \". Encode newlines as \n.

--language-packs-dir <file-path>
Optional. The path to the directory that contains language packs.
--debug-symbols-dir <dirPath>
Optional. The path to the directory that contains debug symbol files.
--debug-symbols-pattern <filenamePattern>
Optional. A pattern sequence that can match the filenames of all the debug symbol files. An asterisk may be used to indicate a wildcard, for example, *.sym.so.

Options

Syntax
Description
--help
Optional. Show help for the command
--draft
Optional. Uploads as a draft which can be later published on the Developer Dashboard.
--config
Optional. Provides the JSON file with configuration parameters
--inherit-asset-files
Optional. A boolean that indicates whether to inherit asset files from the previous build. The default is false.
--exclude-addons
Optional. A boolean that indicates whether to exclude the add-ons associated with this app. The default is false.
--disable-progress-bar
Optional. A boolean that indicates whether to disable progress bar.

Examples

This upload example uses the fictitious app “Rabbit Hole”. Note that these examples show syntax used on Windows.
  • Age Group: Mixed ages (under 13 and 13+)
  • App ID: 10001234
  • App User Token: 1234abcd
  • APK Path: C:\Rabbithole.apk
Example upload command:
$ ovr-platform-util upload-quest-build --age-group MIXED_AGES --app-id 10001234 --token 1234abcd --apk C:\RabbitHole.apk --channel alpha --notes "Fixes the rabbit spawn bug."

Download Meta Quest build

Following is the syntax and parameters for downloading a Meta Quest app from the Meta Horizon store.

Syntax

ovr-platform-util download-quest-build -b <BuildID> -d <Directory>

Parameters

SyntaxDescription
-b <buildID>
--build-id <buildID>
Required. Specifies the build ID you want to download. You can obtain this from the CLI output after successfully uploading an app build with the command line tool.
-d <directory>
--output-dir <directory>
Required. Specifies the directory you want to download the build to.
-t <token>
--token <token>
Required. A user token obtained from the Developer Dashboard.
Download example
The following example shows how to download the app build with build ID 3141592653589793 to “C:\Pie Thrower”.
For Meta Quest enter:
$ ovr-platform-util download-quest-build -b 3141592653589793 -d "C:\Pie Thrower"

Upload debug symbolics for an existing build

The following are the syntax and parameters for uploading debug symbol files to a Meta Quest app build previously uploaded to a release channel.

Syntax

ovr-platform-util upload-debug-symbols --parent <BuildID> --app-id <ID>  --app-secret <App-Secret> --token <User-Token> --debug-symbols-dir <DirPath> --debug-symbols-pattern <FilenamePattern>

Parameters

SyntaxDescription
-p <buildID>
--parent <buildID>
Required. Specifies the build ID of the binary to attach debug symbol files to. You can obtain the build ID from the CLI output after successfully uploading an app build. Or, you can obtain it from the Details page in Developer Center by clicking the version number of an uploaded binary.
-a <ID>
--app-id <ID>
Required. Specifies the ID of your app. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-s <app-secret>
--app-secret <app-secret>
Either app secret or user token required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.
--debug-symbols-dir <dirPath>
Required. The path to the directory that contains debug symbol files.
--debug-symbols-pattern <filenamePattern>
Required. A pattern sequence that can match the filenames of all the debug symbol files. An asterisk may be used to indicate a wildcard, for example, *.sym.so.

Options

Syntax
Description
--help
Optional. Show help for the command
--disable-progress-bar
Optional. A boolean that indicates whether to disable progress bar.
Example
The following example shows how to attach the debug symbol files in /myProject/obj/local/armeabi-v7a/ that end with the filename extension *.so to the build with build ID 1234567890123456.
$ ovr-platform-util  upload-debug-symbols --parent 1234567890123456 -a 1234567890123456 -t <user-token> --debug-symbols-dir /myProject/obj/local/armeabi-v7a/  --debug-symbols-pattern *.so
</oc-docs-device>

Set a release channel

Syntax

ovr-platform-util set-release-channel-build --age-group {TEENS_AND_ADULTS | MIXED_AGES | CHILDREN} --app-id <AppID>  --app-secret <App-Secret> --token <User-Token> --source-channel <Channel> --destination-channel <Channel>

Parameters

SyntaxDescription
--age-group
Required. Age group of the build. This can be TEENS_AND_ADULTS, MIXED_AGES, or CHILDREN. For more information, see Age Group Self-Certification and Youth Requirements.
-d <buildPath>
--build-dir <buildPath>
Required. Specifies the full path to the directory containing your build files.
-s <app-secret>
--app-secret <app-secret>
Either app secret or user token required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.

--destination-channel <channel>
Required. Specifies the release channel to be updated.
-b <buildID>
--build-id <buildID>
Optional. Specifies the build ID you want to download. You can obtain this from the CLI output after successfully uploading an app build with the command line tool.

--source-channel <channel>
Optional. If specified, the build from this channel will be copied to the destination channel.
Release channel example
The following example shows how to set the release channel for a build from Beta to RC
$ ovr-platform-util set-release-channel-build --age-group TEENS_AND_ADULTS --app-id 10001234 --app-secret 1234abcd  --source-channel beta --destination-channel rc

Manage add-ons

The utility enables you to manage add-ons such as downloadable content (DLC) and in-app purchases (IAP) with the upload-add-on command. For more information, see Add-ons.

Syntax

$ ovr-platform-util.exe upload-add-on --app-id <AppID> --app-secret <App-Secret> --token <User-Token> --file <file> --sku <sku> --min-version-code <min-version>

Parameters

SyntaxDescription
-a <ID>
--app-id <ID>
Required. Specifies the ID of your app. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-s <app-secret>
--app-secret <app-secret>
Either app secret or user token required. Specifies the app secret. Obtained from the API tab of your app in the Meta Horizon Developer Dashboard.
-t <token>
--token <token>
Either app secret or user token required. A user token obtained from the Developer Dashboard.
-f <file-path>
--file <file-path>
Required. The path to the asset file to upload.
-p <SKU>
--sku <SKU>
Required. The SKU associated with the add-on item.
-v <version-code>
--min-version-code <version-code>
Required. The minimum build number of the app to associate this add-on item with.
--metadata
Optional. Arbitrary metadata for developer to attach to the asset

Options

Syntax
Description
--help
Optional. Show help for the command
--disable-progress-bar
Optional. A boolean that indicates whether to disable progress bar.
Add-on example
The following examples show how to upload the add-on “carrot”.
  • App ID: 10001234
  • App Secret: 1234abcd
  • File: C:\rabbit-hole-d
  • Sku: carrot
$ ovr-platform-util upload-add-on   --app-id 10001234  --app-secret 1234abcd  --file C:\rabbit-hole\dlc\  --sku carrot
Did you find this page helpful?
Thumbs up icon
Thumbs down icon