Package Definition#
Code |
PKG.DEF.001 |
|---|---|
Validator |
Not yet implemented |
Compatibility |
|
Tags |
Summary#
Each package MUST have exactly one valid package definition with a globally unique, case-insensitive, immutable identity, placed at the package root alongside a .metadata/ folder
Description#
Definition File#
Each package MUST have exactly one package definition identified by the canonical name com.nvidia.simready.packaging.json. The file MUST be placed at the package root; the package root is the parent directory of this file. Metadata files MUST be stored in the .metadata/ folder at the package root. Consumers discover metadata files by looking for expected file names in .metadata/.
Required Fields#
The package definition MUST include format_version (string, “major.minor” format), package_id (string), and license (string). It SHOULD include content_hash (hash object) and package_hash (hash object) for integrity verification. It MAY include description (string) and metadata (array). The license field SHOULD use an SPDX license identifier (e.g., Apache-2.0, MIT, LicenseRef-Proprietary). The description field SHOULD NOT exceed 500 characters; detailed information SHOULD be provided through metadata files. Additional fields MAY be present; implementations MUST ignore unknown fields during processing and MUST preserve them when reading and writing, ensuring that tools which do not understand a field do not remove it during transport, mirroring, or re-publication.
Metadata Entries#
Each entry in the metadata array MUST include name (file name identifying the metadata type) and hash (content hash object for integrity verification). Each entry MAY include data (inline embedded content). The referenced metadata files MUST NOT be modified after package creation, as they are included in the package hash.
Package Identity#
The package_id MUST be a non-empty UTF-8 string of at most 255 characters. It MUST NOT contain control characters (U+0000–U+001F, U+007F–U+009F), whitespace, or any of <>:"/\|?*. The package_id MUST be globally unique across all registries; reverse domain name notation is recommended (e.g., com.acme.assets.vegetation.20260115). Package identifiers MUST be treated as case-insensitive: two values differing only in letter case MUST be considered identical. Once published, everything covered by the package_hash MUST NOT be modified; new changes require publishing under a new package_id.
Why is it required?#
Every tool that reads a package needs a single, well-known entry point and a predictable directory layout
A globally unique, immutable identifier ensures that a
package_idalways refers to exactly the same content, regardless of where or when it is consumed
Examples#
// Valid: minimal package definition with required fields
{
"format_version": "1.0",
"package_id": "com.acme.assets.vegetation.oak_tree.20260115",
"license": "Apache-2.0"
}
// Valid: package definition with optional fields and declared conformance
{
"format_version": "1.0",
"package_id": "com.acme.assets.vegetation.oak_tree.20260115",
"license": "Apache-2.0",
"description": "Photorealistic oak tree for outdoor scenes",
"content_hash": { "sha256": "a1b2c3d4e5f6..." },
"package_hash": { "sha256": "f6e5d4c3b2a1..." },
"metadata": [
{
"name": "com.nvidia.simready.conformance.Prop-Robotics-Physx@1.0.0.json",
"hash": { "sha256": "1234abcd..." }
}
]
}
// Invalid: missing required fields (no license)
{
"format_version": "1.0",
"package_id": "com.acme.assets.vegetation.oak_tree.20260115"
}
// Invalid: package_id with forbidden characters
{
"format_version": "1.0",
"package_id": "com.acme/assets:oak tree",
"license": "Apache-2.0"
}
How to comply#
Place
com.nvidia.simready.packaging.jsonat the package root with a.metadata/folder alongside itInclude
format_version(major.minor),package_id, andlicenseas required fieldsUse an SPDX license identifier; keep
descriptionunder 500 charactersPreserve unknown fields when reading and writing (round-trip safety)
Use reverse domain name notation for
package_id; treat identifiers as case-insensitiveList immutable metadata files in the
metadataarray withnameandhashNever modify published package content; publish changes as a new package