Amazon Developer

as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
Ring
AWS
Documentation
Support
Contact Us
My Cases
Get Started
Design and Develop
Publish
Reference
Support
Skip to main content
Vega Packaging Tool (VPT) manages Vega app packages. Use it to create, examine, manage, and validate .vpkg files (Vega’s standard package format). To get started with VPT, install the Vega Software Development Kit (SDK), which includes two main command-line tools:
  • VPT: Manages package operations like creation and validation
  • Vega CLI: Handles the overall app development workflow, including building and deploying apps
While Vega CLI uses VPT during app builds, you can also run VPT directly to:
  • Examine packages
  • Validate content
  • Add custom signatures to your apps

Package contents and filtering

When you run vega exec vpt pack, VPT reads only the folders that Vega OS mounts at runtime. It drops build artifacts that have no runtime purpose on a device. Starting with VPT 1.2.18, VPT also drops files from lib/ that aren’t shared libraries. If you upgrade from an earlier Vega SDK version, files that your app previously shipped in lib/ might no longer be packaged. This filtering runs inside vega exec vpt pack, which every build path uses. It applies to React Native for Vega apps and native apps alike, including builds you start with vega build.

Folders that VPT packages

VPT reads manifest.toml and the following folders from your source directory: lib/, bin/, assets/, bundle/, config/, shared/lib/, and shared/assets/. VPT doesn’t package any other top-level folder, and it gives no warning when it ignores one. The following table lists what VPT keeps and drops in each folder. shared/lib/ and shared/assets/ follow the same rules as lib/ and assets/. A CMake build can stage shared artifacts into that separate tree, and VPT filters both trees the same way. A dropped file doesn’t fail your build. The warning looks like the following example.
After each of these warnings, VPT pauses for 10 seconds. A build that stages several non-runtime files in lib/ or bin/ takes noticeably longer as a result. To get that time back, remove the files from your build. To confirm what a built package contains, run show-contents or unpack.

How VPT filters the lib folder

VPT decides what to keep in lib/ by filename, not by file format. A file stays in the package when its name ends in .so or contains .so.. VPT drops every other file, including static libraries, scripts, JSON files, and files that have no extension. Three more rules apply to lib/:
  • VPT checks the .debug suffix first. A debug symbol file named libfoo.so.debug is dropped, even though its name contains .so..
  • VPT judges a symlink by the symlink’s own name, so libfoo.so -> libfoo.so.1 is packaged as a symlink. A symlink that points to a missing file causes an error.
  • VPT flattens subfolders under lib/. Each file that VPT keeps lands at lib/<arch>/<filename> in the package.
For guidance on bundling native libraries and linking against system libraries, see Manage native libraries with linker namespacing.

Where to put files that aren’t shared libraries

Put runtime files that aren’t shared libraries in assets/raw/. VPT doesn’t filter assets/ by file type, so scripts, JSON files, certificates, and archives are packaged as they are. At runtime, these files are read-only at /pkg/assets/raw/<filename>. Subfolders keep their paths, so assets/raw/scripts/main.lua is available at /pkg/assets/raw/scripts/main.lua. To change one of these files at runtime, copy it to /data first.

Commands

VPT provides the following command categories. For a complete list of commands and their latest options, use vega exec vpt --help.

Package information

These commands view package details and contents.

info

Shows package information, including ID, title, and build details.
Example:
Example output:

show-contents

Lists all files in the package.
Example:
Example output:

Package creation and extraction

These commands create and modify packages.

pack

Creates a package from source directories. You can specify package name, version, and build number. For the folders that pack reads and the files it drops, see Package contents and filtering.
Example:
Example output:

unpack

Extracts all package files to a destination path.
Example:
Example output:

dump

Extracts a file from the package. Prints to stdout, or saves to the destination path you specified.
Example:
Example output:

extract-locales

Extracts localization files from a package as JSON or text.
Example:
Example output:

Package signature and verification

These commands handle security and validation.

pull

Extracts digest and signature files from the package. A digest file lists cryptographic checksums for all files in the VPKG. A signature file contains a detached cryptographic signature that verifies the digest file’s authenticity. Use --json-digest to extract the digest file in JSON format, or --json-signature to extract the signature file in JSON format.
Example:
Example output:

push

Adds a signature file to the package. Use --json-signature to insert a JSON-formatted signature file that corresponds to the package’s digest.
Example:
Example output:

sign

Signs a message using a private key and certificate.
Example:
Example output:

verify

Verifies a message’s signature using specified certificates.
Example:
Example output:

checksum

Calculates the package checksum.
Example:
Example output:

generate-csr

Creates a certificate signing request (CSR) from a configuration file.
Example:
Example output:

Package analysis

These commands validate package structure and contents.

validate

Runs validation checks for AppStore submission requirements:
  1. Validates the package manifest for required configurations and syntactical correctness. See the manifest user guide.
  2. Validates whether the bundled libraries or declared dependencies for your app’s native code meet Vega’s ABI requirements.
Example:
Example output:

Create a custom signature for your package

  1. Pull the signature file from the package:
    Example output:
  2. Update the signature file using your private key and certificate:
    Example output:
  3. Push the updated signature file back to the package:
    Example output:

Last modified on October 20, 2026