1e41f4b71Sopenharmony_ci# HPM Part Reference 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciThis section describes the HPM Part division rules, HPM Part types, HPM Part composition, metadata fields, and common CLI commands. 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci### HPM Part Division Rules 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciIn principle, HPM Parts should be grouped at a fine-grained granularity to achieve maximum reuse. The following factors are taken into account: 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci- Independence: HPM Parts provide relatively independent features and can be independently built. Each HPM Part is capable of providing its own APIs and services for external systems. 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci- Coupling: If an HPM Part must depend on another one to provide services, they can be coupled to one HPM Part. 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci- Correlation: If a group of HPM Parts jointly implement a feature, and if other HPM Parts never depend on them, the group of HPM Parts can be combined into one HPM Part. 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci### HPM Part Type 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ciHPM Parts are introduced for reuse purposes. 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci **Table 1** HPM Part types 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci| Item| Description| 25e41f4b71Sopenharmony_ci| -------- | -------- | 26e41f4b71Sopenharmony_ci| source | Distributed in the form of source code. It is depended by the target project, and can be compiled independently.| 27e41f4b71Sopenharmony_ci| binary | Distributed in binary mode. It does not contain source code, such as build tools.| 28e41f4b71Sopenharmony_ci| code-segment | Distributed in the form of code snippets and cannot be compiled independently. After the installation, it is restored to the specified directory and participates in other code build in the target project.| 29e41f4b71Sopenharmony_ci| distribution | Distributed as a distribution and dependent on other HPM Parts. It does not contain source code (except build scripts). The build output is system images.| 30e41f4b71Sopenharmony_ci| template | Distributed as a template and used by the **hpm init** command to create a template.| 31e41f4b71Sopenharmony_ci| plugin | Distributed as a plugin of hpm-cli to provide more functions.| 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci 34e41f4b71Sopenharmony_ci### HPM Part Composition 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ciAn HPM Part contains the following: 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci- **src** directory for storing code files or code library of the HPM Part. 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci- **ohos_bundles** folder for storing dependent HPM Parts. The folder is automatically generated during HPM Part installation and does not need to be committed to the code library. 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci- **README.md** file for describing the HPM Part. 43e41f4b71Sopenharmony_ci 44e41f4b71Sopenharmony_ci- **bundle.json** file for declaring metadata of the HPM Part. 45e41f4b71Sopenharmony_ci 46e41f4b71Sopenharmony_ci- LICENSE file for open-source code. 47e41f4b71Sopenharmony_ci 48e41f4b71Sopenharmony_ci ``` 49e41f4b71Sopenharmony_ci my-bundle 50e41f4b71Sopenharmony_ci |_ohos_bundles 51e41f4b71Sopenharmony_ci |_headers 52e41f4b71Sopenharmony_ci |_src 53e41f4b71Sopenharmony_ci |_bundle.json 54e41f4b71Sopenharmony_ci |_README.md 55e41f4b71Sopenharmony_ci |_LICENSE 56e41f4b71Sopenharmony_ci ``` 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci### src Source Code 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ciHPM Part code files are the same as those in a common code directory. The only difference lies in the open APIs (declared in header files) provided by HPM Parts, which will be referenced by other HPM Parts and must be declared in **dirs** of **bundle.json**. 62e41f4b71Sopenharmony_ci 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci### README File 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ciTo help consumers find your HPM Part on [DevEco Marketplace](https://repo.harmonyos.com) and use it more conveniently, include a **README.md** file in the root directory of the HPM Part. 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci**README.md** is a file written using the markdown syntax. 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ciThe **README.md** file may include instructions on how to install, configure, and use the sample code in the HPM Part, as well as any other information helpful to the consumers. 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ciThe Readme file will be displayed on the homepage of the HPM Part on [DevEco Marketplace](https://repo.harmonyos.com). 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci## bundle.json File 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ciThe **bundle.json** file describes the metadata of an HPM Part. Each HPM Part has its own **bundle.json** file. The file content is as follows: 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci``` 81e41f4b71Sopenharmony_ci{ 82e41f4b71Sopenharmony_ci "name": "@myorg/demo-bundle", 83e41f4b71Sopenharmony_ci "version": "1.0.0", 84e41f4b71Sopenharmony_ci "license": "MIT", 85e41f4b71Sopenharmony_ci "description": "bundle description", 86e41f4b71Sopenharmony_ci "keywords": ["hos"], 87e41f4b71Sopenharmony_ci "tags": ["applications", "drivers"], 88e41f4b71Sopenharmony_ci "author": {"name":"","email":"","url":""}, 89e41f4b71Sopenharmony_ci "contributors":[{"name":"","email":"","url":""},{"name":"","email":"","url":""}], 90e41f4b71Sopenharmony_ci "homepage": "http://www.foo.bar.com", 91e41f4b71Sopenharmony_ci "repository": "https://git@gitee.com:foo/bar.git", 92e41f4b71Sopenharmony_ci "private": false, 93e41f4b71Sopenharmony_ci "publishAs": "code-segment", 94e41f4b71Sopenharmony_ci "segment":{ 95e41f4b71Sopenharmony_ci "destPath":"/the/dest/path" 96e41f4b71Sopenharmony_ci }, 97e41f4b71Sopenharmony_ci "dirs": { 98e41f4b71Sopenharmony_ci "src": ["src/**/*.c"], 99e41f4b71Sopenharmony_ci "headers": ["headers/**/*.h"], 100e41f4b71Sopenharmony_ci "bin": ["bin/**/*.o"] 101e41f4b71Sopenharmony_ci }, 102e41f4b71Sopenharmony_ci "scripts": { 103e41f4b71Sopenharmony_ci "build": "make" 104e41f4b71Sopenharmony_ci }, 105e41f4b71Sopenharmony_ci "envs": {}, 106e41f4b71Sopenharmony_ci "ohos": { 107e41f4b71Sopenharmony_ci "os": "2.0.0", 108e41f4b71Sopenharmony_ci "board": "hi3516", 109e41f4b71Sopenharmony_ci "kernel": "liteos-a" 110e41f4b71Sopenharmony_ci }, 111e41f4b71Sopenharmony_ci "rom": "10240", 112e41f4b71Sopenharmony_ci "ram": "1024", 113e41f4b71Sopenharmony_ci "dependencies": { 114e41f4b71Sopenharmony_ci "@myorg/net":"1.0.0" 115e41f4b71Sopenharmony_ci } 116e41f4b71Sopenharmony_ci} 117e41f4b71Sopenharmony_ci``` 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ciEach **bundle.json** file has the following fields: 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci- **name**: an HPM Part name, which starts with the at sign (@) and is separated with the organization name by the slash (/), for example, **\@myorg/mybundle**. 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci- **version**: version of the HPM Part, for example, 1.0.0. The version must comply with the Semantic Versioning Specification (SemVer) standards. 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci- **description**: a brief description of the HPM Part. 126e41f4b71Sopenharmony_ci 127e41f4b71Sopenharmony_ci- **dependencies**: dependent HPM Parts. 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci- **envs**: parameters required for building the HPM Part, including global parameters and dependency parameters. 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci- **scripts**: commands executable to the HPM Part, such as commands for compiling, building, testing, and burning. 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci- **publishAs**: HPM Part publishing type, which can be **source**, **binary**, **distribution**, or **code-segment**. 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci- **segment**: destination path of the code-segment HPM Part, that is, the destination path of the files contained in the HPM Part after the HPM Part is installed. 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci- **dirs**: directory structure (such as the header file) generated for publishing. 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci- **ram** and **rom**: statistical information about the estimated read-only memory (ROM) and random access memory (RAM) usage. 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci- **ohos**: mappings among OpenHarmony versions, development boards, and kernels, separated by commas (,). 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci- Extended information: author, home page, code repository, license, tags, and keywords. 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ci- For a distribution-level HPM Part, you can define the inheritance relationship and use the **base** field to describe the basic distribution and version that are inherited from. 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci- **private**: indicates whether an HPM Part is private. A private HPM Part cannot be found by other organizations. The default value is **false**. 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci## HPM CLI Commands 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ciYou can use the hpm-cli tool to manage the lifecycle of an HPM Part. The following table describes available hpm-cli commands. You can run the **hpm -h** command to get the command details. 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci **Table 2** Commands available on hpm-cli 155e41f4b71Sopenharmony_ci 156e41f4b71Sopenharmony_ci| Command Type| Command Line| Description| 157e41f4b71Sopenharmony_ci| -------- | -------- | -------- | 158e41f4b71Sopenharmony_ci| Querying version information| **hpm -V** or **hpm --version**| Displays the version of the hpm-cli tool.| 159e41f4b71Sopenharmony_ci| Querying help information| **hpm -h** or **hpm --version**| Displays the command list and help information.| 160e41f4b71Sopenharmony_ci|| hpm -h | Displays command help information.| 161e41f4b71Sopenharmony_ci| Creating a project| hpm init bundle | Creates an HPM Part project.| 162e41f4b71Sopenharmony_ci|| hpm init -t template | Creates a scaffolding project from a template.| 163e41f4b71Sopenharmony_ci| Installing HPM Parts| **hpm install** or **hpm i**| Installs dependent HPM Parts in the bundle.json file.| 164e41f4b71Sopenharmony_ci|| hpm install bundle\@version | Installs HPM Parts of a specified version.| 165e41f4b71Sopenharmony_ci| Uninstalling HPM Parts| hpm uninstall bundle | Uninstalls dependent HPM Parts.| 166e41f4b71Sopenharmony_ci|| **hpm remove** or **hpm rm bundlename**| Uninstalls dependent HPM Parts.| 167e41f4b71Sopenharmony_ci| Viewing information| **hpm list** or **hpm ls**| Displays the dependency tree of the HPM part.| 168e41f4b71Sopenharmony_ci|| hpm dependencies | Generates the dependency relationship data of the HPM Part. (This command is also integrated in the **hpm ui** command. After you run the hpm ui command, a hpm UI is displayed with the dependencies.)| 169e41f4b71Sopenharmony_ci| Searching for HPM Parts| hpm search name | Searches for HPM Parts. **--json** is used to specify the search result in JSON format, and **-type** is used to set the target type, which can be **part**, **distribution**, or **code-segment**.| 170e41f4b71Sopenharmony_ci| Setting HPM configuration items| hpm config set key value | Sets configuration items, such as the server address and network proxy.| 171e41f4b71Sopenharmony_ci|| hpm config delete key | Deletes configurations.| 172e41f4b71Sopenharmony_ci| Updating HPM Part versions| hpm update | Updates the versions of dependent HPM Parts.| 173e41f4b71Sopenharmony_ci|| hpm check-update | Checks whether version updates are available to dependent HPM Parts.| 174e41f4b71Sopenharmony_ci| Building| hpm build | Builds an HPM Part.| 175e41f4b71Sopenharmony_ci|| hpm dist | Builds a distribution. The build depends on the **dist** script in **scripts** of **bundle.json**.| 176e41f4b71Sopenharmony_ci| Packing | hpm pack | Packs dependencies of local HPM Parts.| 177e41f4b71Sopenharmony_ci| Burning| hpm run flash | Burns the firmware. The firmware burning depends on the **flash** script in **scripts** of **bundle.json**.| 178e41f4b71Sopenharmony_ci| Publishing| hpm publish | Publishes an HPM Part, which must be unique in the repository and has a unique version. (An account is required for login.)| 179e41f4b71Sopenharmony_ci| Running of extended commands| hpm run | Runs the commands in **scripts** defined in **bundle.json**. Multiple commands can be executed at a time by using **&&**.| 180e41f4b71Sopenharmony_ci| Decompressing| hpm extract | Decompresses files in zip, tar, tgz, or .tar.gz format.| 181e41f4b71Sopenharmony_ci| Starting UI| hpm ui | Starts the hpm UI locally. You can use the **-p** parameter to specify a port. On the Windows platform, the default browser is used to open the HPM UI.| 182e41f4b71Sopenharmony_ci| Changing language| hpm lang | Alternates between Chinese and English on the CLI and UI.| 183e41f4b71Sopenharmony_ci| Converting to HPM format| hpm x2h | Converts a Maven or npm package to an HPM Part and publishes it on the HPM platform.| 184e41f4b71Sopenharmony_ci| Code segment restoration or cleanup| hpm code clean\|restore | Clears or restores the dependent code segment, which is equivalent to copying or deleting the code segment based on **segment.destPath**.| 185e41f4b71Sopenharmony_ci| Generating a key| hpm gen-keys | Generates a public-private key pair and configures the public key on [DevEco Marketplace](https://repo.harmonyos.com), which enables password-free hpm-cli login for HPM Part publishing.| 186e41f4b71Sopenharmony_ci| Generation of the third-party open source notice| hpm gen-notice | Generates a file providing the notice on third-party open source by combining the description of each HPM Part.| 187e41f4b71Sopenharmony_ci 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci## About Dependency 190e41f4b71Sopenharmony_ci 191e41f4b71Sopenharmony_ciHPM Part dependencies are classified as mandatory and optional dependencies. 192e41f4b71Sopenharmony_ci 193e41f4b71Sopenharmony_ci- Mandatory dependency: If HPM Part A must depend on HPM Part B to implement a feature (the APIs or services specific to HPM Part B must be called), HPM Part B is a mandatory dependency of HPM Part A. 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci- Optional dependency: If either HPM Part C or D is required for HPM Part A to implement a feature, and if HPM Parts C and D are interchangeable, HPM Parts C and D are optional dependencies of HPM Part A. 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ci 198e41f4b71Sopenharmony_ci``` 199e41f4b71Sopenharmony_ci"dependencies": { 200e41f4b71Sopenharmony_ci "@myorg/core":"1.0.0", 201e41f4b71Sopenharmony_ci "?@myorg/plugin1":"1.0.0", 202e41f4b71Sopenharmony_ci "?@myorg/plugin2":"1.1.0" 203e41f4b71Sopenharmony_ci } 204e41f4b71Sopenharmony_ci``` 205e41f4b71Sopenharmony_ci 206e41f4b71Sopenharmony_ciHPM Part dependencies can also be classified as compilation and development dependencies. 207e41f4b71Sopenharmony_ci 208e41f4b71Sopenharmony_ci- Compilation dependency: dependency required for runtime. 209e41f4b71Sopenharmony_ci 210e41f4b71Sopenharmony_ci- Development dependency: dependency required in non-runtime scenarios, such as static check, build, packing, test, and formatting tools. 211e41f4b71Sopenharmony_ci 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ci``` 214e41f4b71Sopenharmony_ci"dependencies": { 215e41f4b71Sopenharmony_ci "@myorg/core":"1.0.0" 216e41f4b71Sopenharmony_ci }, 217e41f4b71Sopenharmony_ci"devDependencies": { 218e41f4b71Sopenharmony_ci "@myorg/tool":"1.0.0" 219e41f4b71Sopenharmony_ci } 220e41f4b71Sopenharmony_ci``` 221e41f4b71Sopenharmony_ci 222e41f4b71Sopenharmony_ci Tags can be defined to group dependent HPM Parts. You can obtain the path of a group of dependent HPM Parts based on their tag. A tag starts with a number sign (#) and is defined as follows: 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ci``` 225e41f4b71Sopenharmony_ci{ 226e41f4b71Sopenharmony_ci "dependencies": { 227e41f4b71Sopenharmony_ci "#tool": { 228e41f4b71Sopenharmony_ci "first_bundle": "1.0.0", 229e41f4b71Sopenharmony_ci "second_bundle": "1.0.0" 230e41f4b71Sopenharmony_ci }, 231e41f4b71Sopenharmony_ci "#drivers": { 232e41f4b71Sopenharmony_ci "xx_bundle": "1.0.0", 233e41f4b71Sopenharmony_ci "yy_bundle": "1.0.0" 234e41f4b71Sopenharmony_ci } 235e41f4b71Sopenharmony_ci } 236e41f4b71Sopenharmony_ci} 237e41f4b71Sopenharmony_ci``` 238e41f4b71Sopenharmony_ci 239e41f4b71Sopenharmony_ciHPM Part dependencies (including indirect dependencies) can be displayed by running the **hpm list** command or on the hpm UI, which is started by running the **hpm ui** command. 240e41f4b71Sopenharmony_ci 241e41f4b71Sopenharmony_ci 242e41f4b71Sopenharmony_ci``` 243e41f4b71Sopenharmony_ci$ hpm list 244e41f4b71Sopenharmony_ci+--demo@1.0.0 245e41f4b71Sopenharmony_ci| +--@example/media@1.0.2 246e41f4b71Sopenharmony_ci| +--@demo/sport_hi3518ev300_liteos_a@1.0.0 247e41f4b71Sopenharmony_ci| | +--@demo/app@4.0.1 248e41f4b71Sopenharmony_ci| | | +--@demo/build@4.0.1 249e41f4b71Sopenharmony_ci| | | +--@demo/arm_harmonyeabi_gcc@4.0.0 250e41f4b71Sopenharmony_ci| | +--@demo/liteos_a@4.0.0 251e41f4b71Sopenharmony_ci| | | +--@demo/third_party_fatfs@4.0.0 252e41f4b71Sopenharmony_ci| | | +--@demo/arm_harmonyeabi_gcc@4.0.0 253e41f4b71Sopenharmony_ci| | +--@demo/init@4.0.0 254e41f4b71Sopenharmony_ci| | +--@demo/dist_tools@4.0.0 255e41f4b71Sopenharmony_ci``` 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci 258e41f4b71Sopenharmony_ci## About Environment Variables 259e41f4b71Sopenharmony_ci 260e41f4b71Sopenharmony_ciDuring HPM Part building, system-provided environment variables are required to define the output and link the required binary files. 261e41f4b71Sopenharmony_ci 262e41f4b71Sopenharmony_ciThese variables are injected into the context for executing scripts based on service requirements. 263e41f4b71Sopenharmony_ci 264e41f4b71Sopenharmony_ciTherefore, their values can be directly obtained from the scripts. The following environment variables are available: 265e41f4b71Sopenharmony_ci 266e41f4b71Sopenharmony_ci**Built-in environment variables** 267e41f4b71Sopenharmony_ci 268e41f4b71Sopenharmony_ci- **DEP_OHOS_BUNDLES**: path of the **ohos_bundles** folder 269e41f4b71Sopenharmony_ci 270e41f4b71Sopenharmony_ci- **DEP_BUNDLE_BASE**: path of the outermost HPM Part 271e41f4b71Sopenharmony_ci 272e41f4b71Sopenharmony_ci**Global environment variables** 273e41f4b71Sopenharmony_ci 274e41f4b71Sopenharmony_ciGlobal environment variables are defined by the **envs** attribute in **bundle.json**. You can obtain the values of global environment variables from all independent HPM Parts. 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci 277e41f4b71Sopenharmony_ci``` 278e41f4b71Sopenharmony_ci{ 279e41f4b71Sopenharmony_ci "envs": { 280e41f4b71Sopenharmony_ci "compileEnv": "arm" 281e41f4b71Sopenharmony_ci } 282e41f4b71Sopenharmony_ci} 283e41f4b71Sopenharmony_ci``` 284e41f4b71Sopenharmony_ci 285e41f4b71Sopenharmony_ciDifferent parameters can be passed to HPM Parts when introducing dependencies so that the compilation of dependent HPM Parts can meet the requirements of the current HPM Part. The parameters defined in the dependencies can be obtained from the context for executing the corresponding scripts. 286e41f4b71Sopenharmony_ci 287e41f4b71Sopenharmony_ci 288e41f4b71Sopenharmony_ci``` 289e41f4b71Sopenharmony_ci{ 290e41f4b71Sopenharmony_ci "dependencies": { 291e41f4b71Sopenharmony_ci "my-bundle": { 292e41f4b71Sopenharmony_ci "version": "1.0.0", 293e41f4b71Sopenharmony_ci "mode": "debug" 294e41f4b71Sopenharmony_ci } 295e41f4b71Sopenharmony_ci } 296e41f4b71Sopenharmony_ci} 297e41f4b71Sopenharmony_ci``` 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ciWhen linking to a binary file, the HPM Part needs to know the file path regarding the dependencies. Therefore, you need to pass the path as an environment variable to the HPM Part for building. 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ciThe passed environment variable is in **DEP\_BundleName** format, where **BundleName** indicates the name of the dependent HPM Part, for example, **DEP\_first\_bundle**. 302e41f4b71Sopenharmony_ci 303e41f4b71Sopenharmony_ci 304e41f4b71Sopenharmony_ci## About Naming and Version Number 305e41f4b71Sopenharmony_ci 306e41f4b71Sopenharmony_ci1. The name must be lowercase letters or digits and can be separated by underscores (\_), for example, **bundle**, **my\_bundle**, and **json2**. 307e41f4b71Sopenharmony_ci 308e41f4b71Sopenharmony_ci2. Name of an HPM Part published to [DevEco Marketplace](https://repo.harmonyos.com) must start with the at sign (@) and is separated with the organization name by a slash (/), for example, **@my_org/part_name**. 309e41f4b71Sopenharmony_ci 310e41f4b71Sopenharmony_ci3. The organization name and part name must be unique and distinguishably different with other names. 311e41f4b71Sopenharmony_ci 312e41f4b71Sopenharmony_ci4. Names should be easy to understand. 313e41f4b71Sopenharmony_ci 314e41f4b71Sopenharmony_ci5. An HPM Part version must be in the format of ***majorVersion***.***minorVersion***.***revisionVersion*** or ***majorVersion***.***minorVersion***.***revisionVersion***-***pre-releaseVersion***, for example, **1.0.0** and **1.0.0-beta**. For details, see [https://semver.org](https://semver.org/). 315