# Building the First ArkTS Application in Stage Model > **NOTE** > > In this document, DevEco Studio 4.0 Beta2 is used. You can download it [here](../../release-notes/OpenHarmony-v4.0-beta2.md#version-mapping). ## Creating an ArkTS Project The procedure for creating a project varies, depending on whether the API version is later than 9 or not. The following describes how to create the OpenHarmony projects of API 10 and API 9. ### Creating a Project of API Version 10 1. If you are opening DevEco Studio for the first time, click **Create Project**. If a project is already open, choose **File** > **New** > **Create Project** from the menu bar. 2. On the **Choose Your Ability Template** page, select **Application** (or **Atomic Service**, depending on your project), select **Empty Ability** as the template, and click **Next**. ![createProject](figures/createProject.png) 3. On the project configuration page, set **Compile SDK** to **3.1.0(API 9)** and retain the default values for other parameters. The **Node** parameter sets the Node.js version to use for the project. You can use an existing version or download a new one. ![chooseStageModel](figures/chooseStageModel.png) > **NOTE** > > You can use the low-code development mode apart from the traditional coding approach. > > On the low-code development pages, you can design your application UI in an efficient, intuitive manner, with a wide array of UI editing features. > > To use the low-code development mode, turn on **Enable Super Visual** on the page shown above. 4. Click **Finish**. DevEco Studio will automatically generate the sample code and resources that match your project type. Wait until the project is created. 5. After the project is created, in the project-level **build-profile.json5** file (at the same directory level as **entry**), move the **compileSdkVersion** and **compatibleSdkVersion** fields from under **app** to under the current **products**. You can identify the current **products** by clicking the ![en-us_image_0000001609333677](figures/en-us_image_0000001609333677.png) icon in the upper right corner of the editing area. ![changeToAPI10](figures/changeToAPI10.png) 6. Change the value of **targetSdkVersion** from **9** to **10** and set **runtimeOS** to **OpenHarmony**. ![targetSdkVersion](figures/targetSdkVersion.png) 7. Delete the **runtimeOS** configuration from the **targets** field in the module-level **build-profile.json5** files. ![deleteRuntimeOS](figures/deleteRuntimeOS.png) 8. Click **Sync Now** and wait until the synchronization is complete. A project of API version 10 is now created. ### Creating a Project of API Version 9 1. If you are opening DevEco Studio for the first time, click **Create Project**. If a project is already open, choose **File** > **New** > **Create Project** from the menu bar. 2. On the **Choose Your Ability Template** page, select **Application** (or **Atomic Service**, depending on your project), select **Empty Ability** as the template, and click **Next**. ![createProject](figures/createProject.png) 3. On the project configuration page, set **Compile SDK** to **3.1.0(API 9)** and retain the default values for other parameters. The **Node** parameter sets the Node.js version to use for the project. You can use an existing version or download a new one. ![chooseStageModel](figures/chooseStageModel.png) > **NOTE** > > You can use the low-code development mode apart from the traditional coding approach. > > On the low-code development pages, you can design your application UI in an efficient, intuitive manner, with a wide array of UI editing features. > > To use the low-code development mode, turn on **Enable Super Visual** on the page shown above. 4. Click **Finish**. DevEco Studio will automatically generate the sample code and resources that match your project type. Wait until the project is created. 5. In the module-level **entry** > **build-profile.json5** file, set **runtimeOS** in **targets** to **OpenHarmony**. 6. Click **Sync Now** and wait until the synchronization is complete. A project of API version 9 is now created. ## ArkTS Project Directory Structure (Stage Model, API Version 10) ![project](figures/project.png) - **AppScope > app.json5**: application-level configuration information. - **entry**: OpenHarmony project module, which can be built into an ability package (HAP). - **src > main > ets**: a collection of ArkTS source code. - **src > main > ets > entryability**: entry to your application/service. - **src > main > ets > pages**: pages included in your application/service. - **src > main > resources**: a collection of resource files used by your application/service, such as graphics, multimedia, character strings, and layout files. For details about resource files, see [Resource Categories and Access](resource-categories-and-access.md#resource-categories). - **src > main > module.json5**: module configuration file. This file describes the global configuration information of the application/service, the device-specific configuration information, and the configuration information of the HAP file. For details, see [module.json5 Configuration File](module-configuration-file.md). - **build-profile.json5**: current module information and build configuration options, including **buildOption** and **targets**. - **hvigorfile.ts**: module-level build script. You can customize related tasks and code implementation in this file. - **oh_modules**: third-party library dependency information. For details about how to adapt a historical npm project to ohpm, see [Manually Migrating Historical Projects](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/project_overview-0000001053822398-V3#section108143331212). - **build-profile.json5**: application-level configuration information, including the **signingConfigs** and **products** configuration. The **runtimeOS** field in **products** indicates the runtime OS. Its default value is **HarmonyOS**. If you are developing an OpenHarmony application, change the value to **OpenHarmony**. - **hvigorfile.ts**: application-level build script. ## ArkTS Project Directory Structure (Stage Model, API Version 9) ![project](figures/project.png) - **AppScope > app.json5**: application-level configuration information. - **entry**: OpenHarmony project module, which can be built into an ability package (HAP). - **src > main > ets**: a collection of ArkTS source code. - **src > main > ets > entryability**: entry to your application/service. - **src > main > ets > pages**: pages included in your application/service. - **src > main > resources**: a collection of resource files used by your application/service, such as graphics, multimedia, character strings, and layout files. For details about resource files, see [Resource Categories and Access](resource-categories-and-access.md#resource-categories). - **src > main > module.json5**: module configuration file. This file describes the global configuration information of the application/service, the device-specific configuration information, and the configuration information of the HAP file. For details, see [module.json5 Configuration File](module-configuration-file.md). - **build-profile.json5**: current module information and build configuration options, including **buildOption** and **targets**. The **runtimeOS** field in **targets** indicates the runtime OS. Its default value is **HarmonyOS**. If you are developing an OpenHarmony application, change the value to **OpenHarmony**. - **hvigorfile.ts**: module-level build script. You can customize related tasks and code implementation in this file. - **oh_modules**: third-party library dependency information. For details about how to adapt a historical npm project to ohpm, see [Manually Migrating Historical Projects](https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/project_overview-0000001053822398-V3#section108143331212). - **build-profile.json5**: application-level configuration information, including the **signingConfigs** and **products** configuration. - **hvigorfile.ts**: application-level build script. ## Building the First Page 1. Use the **\** component. After the project synchronization is complete, choose **entry** > **src** > **main** > **ets** > **pages** in the **Project** window and open the **Index.ets** file. You can see that the file contains a **\** component. The sample code in the **Index.ets** file is shown below: ```ts // Index.ets @Entry @Component struct Index { @State message: string = 'Hello World' build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) } .width('100%') } .height('100%') } } ``` 2. Add a **\