1# Building the First ArkTS Application in Stage Model 2 3 4> **NOTE** 5> 6> To use ArkTS, your DevEco Studio must be V3.0.0.900 Beta3 or later. 7> 8> For best possible results, use [DevEco Studio 3.1 Beta2](https://developer.harmonyos.com/cn/develop/deveco-studio) for your development. 9 10 11## Creating an ArkTS Project 12 131. 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. 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**. 14 15  16 172. On the project configuration page, set **Compile SDK** to **9**, **Model** to **Stage**, and retain the default values for other parameters. 18 19  20 21 > **NOTE** 22 > 23 > You can use the low-code development mode apart from the traditional coding approach. 24 > 25 > 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. 26 > 27 > To use the low-code development mode, turn on **Enable Super Visual** on the page shown above. 28 293. Click **Finish**. DevEco Studio will automatically generate the sample code and resources that match your project type. Wait until the project is created. 30 314. After the project is created, in the **entry** > **build-profile.json5** file, change **runtimeOS** under **targets** to **OpenHarmony**, and click **Sync Now** in the upper right corner to start development. 32 33 34## ArkTS Project Directory Structure (Stage Model) 35 36 37 38- **AppScope** > **app.json5**: global configuration of your application. 39- **entry**: OpenHarmony project module, which can be built into an OpenHarmony Ability Package ([HAP](../../glossary.md#hap)). 40 - **src > main > ets**: a collection of ArkTS source code. 41 - **src > main > ets > entryability**: entry to your application/service. 42 - **src > main > ets > pages**: pages included in your application/service. 43 - **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). 44 - **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). 45 - **build-profile.json5**: current module information and build configuration options, including **buildOption** and **targets**. Under **targets**, you can set **runtimeOS** to **HarmonyOS** (default) or **OpenHarmony**, depending on the OS of your application. 46 - **hvigorfile.ts**: module-level build script. You can customize related tasks and code implementation. 47- **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). 48- **build-profile.json5**: application-level configuration information, including the signature and product configuration. 49- **hvigorfile.ts**: application-level build script. 50 51 52## Building the First Page 53 541. Use the **\<Text>** component. 55 56 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 **\<Text>** component. The sample code in the **Index.ets** file is shown below: 57 58 ```ts 59 // Index.ets 60 @Entry 61 @Component 62 struct Index { 63 @State message: string = 'Hello World' 64 65 build() { 66 Row() { 67 Column() { 68 Text(this.message) 69 .fontSize(50) 70 .fontWeight(FontWeight.Bold) 71 } 72 .width('100%') 73 } 74 .height('100%') 75 } 76 } 77 ``` 78 792. Add a **\<Button>** component. 80 81 On the default page, add a **\<Button>** component to respond to user clicks and implement redirection to another page. The sample code in the **Index.ets** file is shown below: 82 83 ```ts 84 // Index.ets 85 @Entry 86 @Component 87 struct Index { 88 @State message: string = 'Hello World' 89 90 build() { 91 Row() { 92 Column() { 93 Text(this.message) 94 .fontSize(50) 95 .fontWeight(FontWeight.Bold) 96 // Add a button to respond to user clicks. 97 Button() { 98 Text('Next') 99 .fontSize(30) 100 .fontWeight(FontWeight.Bold) 101 } 102 .type(ButtonType.Capsule) 103 .margin({ 104 top: 20 105 }) 106 .backgroundColor('#0D9FFB') 107 .width('40%') 108 .height('5%') 109 } 110 .width('100%') 111 } 112 .height('100%') 113 } 114 } 115 ``` 116 1173. On the toolbar in the upper right corner of the editing window, click **Previewer**. Below is how the first page looks in the Previewer. 118 119  120 121 122## Building the Second Page 123 1241. Create the second page. 125 126 - Create the second page file: In the **Project** window, choose **entry** > **src** > **main** > **ets**. Right-click the **pages** folder, choose **New** > **ArkTS File**, name the page **Second**, and click **Finish**. Below is the structure of the **Second** folder. 127 128  129 130 > **NOTE** 131 > 132 > You can also right-click the **pages** folder and choose **New** > **Page** from the shortcut menu. In this scenario, you do not need to manually configure page routes. 133 - Configure the route for the second page: In the **Project** window, choose **entry** > **src** > **main** > **resources** > **base** > **profile**. In the **main_pages.json** file, set **pages/Second** under **src**. The sample code is as follows: 134 135 ```json 136 { 137 "src": [ 138 "pages/Index", 139 "pages/Second" 140 ] 141 } 142 ``` 143 1442. Add **\<Text>** and **\<Button>** components. 145 146 Add **\<Text>** and **\<Button>** components and set their styles, by referring to the first page. The sample code in the **Second.ets** file is shown below: 147 148 ```ts 149 // Second.ets 150 @Entry 151 @Component 152 struct Second { 153 @State message: string = 'Hi there' 154 155 build() { 156 Row() { 157 Column() { 158 Text(this.message) 159 .fontSize(50) 160 .fontWeight(FontWeight.Bold) 161 Button() { 162 Text('Back') 163 .fontSize(25) 164 .fontWeight(FontWeight.Bold) 165 } 166 .type(ButtonType.Capsule) 167 .margin({ 168 top: 20 169 }) 170 .backgroundColor('#0D9FFB') 171 .width('40%') 172 .height('5%') 173 } 174 .width('100%') 175 } 176 .height('100%') 177 } 178 } 179 ``` 180 181 182## Implementing Page Redirection 183 184You can implement page redirection through the [page router](../reference/apis/js-apis-router.md), which finds the target page based on the page URL. Import the **router** module and then perform the steps below: 185 1861. Implement redirection from the first page to the second page. 187 188 In the **index.ets** file of the first page, bind the **onClick** event to the **Next** button so that clicking the button redirects the user to the second page. The sample code in the **Index.ets** file is shown below: 189 190 ```ts 191 // Index.ets 192 // Import the router module. 193 import router from '@ohos.router'; 194 195 @Entry 196 @Component 197 struct Index { 198 @State message: string = 'Hello World' 199 200 build() { 201 Row() { 202 Column() { 203 Text(this.message) 204 .fontSize(50) 205 .fontWeight(FontWeight.Bold) 206 // Add a button to respond to user clicks. 207 Button() { 208 Text('Next') 209 .fontSize(30) 210 .fontWeight(FontWeight.Bold) 211 } 212 .type(ButtonType.Capsule) 213 .margin({ 214 top: 20 215 }) 216 .backgroundColor('#0D9FFB') 217 .width('40%') 218 .height('5%') 219 // Bind the onClick event to the Next button so that clicking the button redirects the user to the second page. 220 .onClick(() => { 221 router.pushUrl({ url: 'pages/Second' }) 222 }) 223 } 224 .width('100%') 225 } 226 .height('100%') 227 } 228 } 229 ``` 230 2312. Implement redirection from the second page to the first page. 232 233 In the **Second.ets** file of the second page, bind the **onClick** event to the **Back** button so that clicking the button redirects the user back to the first page. The sample code in the **Second.ets** file is shown below: 234 235 ```ts 236 // Second.ets 237 // Import the router module. 238 import router from '@ohos.router'; 239 240 @Entry 241 @Component 242 struct Second { 243 @State message: string = 'Hi there' 244 245 build() { 246 Row() { 247 Column() { 248 Text(this.message) 249 .fontSize(50) 250 .fontWeight(FontWeight.Bold) 251 Button() { 252 Text('Back') 253 .fontSize(25) 254 .fontWeight(FontWeight.Bold) 255 } 256 .type(ButtonType.Capsule) 257 .margin({ 258 top: 20 259 }) 260 .backgroundColor('#0D9FFB') 261 .width('40%') 262 .height('5%') 263 // Bind the onClick event to the Back button so that clicking the button redirects the user back to the first page. 264 .onClick(() => { 265 router.back() 266 }) 267 } 268 .width('100%') 269 } 270 .height('100%') 271 } 272 } 273 ``` 274 2753. Open the **Index.ets** file and click  in the Previewer to refresh the file. The display effect is shown in the figure below. 276 277  278 279 280## Running the Application on a Real Device 281 2821. Connect the development board running the OpenHarmony standard system to the computer. 283 2842. Choose **File** > **Project Structure...** > **Project** > **SigningConfigs**, and select **Automatically generate signature**. Wait until the automatic signing is complete, and click **OK**. See the following figure. 285 286  287 2883. On the toolbar in the upper right corner of the editing window, click . The display effect is shown in the figure below. 289 290  291 292Congratulations! You have finished developing your OpenHarmony application in ArkTS in the stage model. To learn more about OpenHarmony application development, see [Application Development Overview](../application-dev-guide.md). 293