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