Skip to content

Commit 6f41b20

Browse files
authored
Merge pull request #3496 from muchzill4/topo-projects
Update Topo Learning Paths for Project terminology and current CLI
2 parents b77b70d + 5e1c40b commit 6f41b20

22 files changed

Lines changed: 394 additions & 450 deletions

File tree

content/learning-paths/cross-platform/create-your-own-topo-templates/_index.md renamed to content/learning-paths/cross-platform/create-your-own-topo-project/_index.md

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
---
2-
title: Create and deploy a custom Topo Template
2+
title: Create and deploy a custom Topo Project
33

4-
description: Understand how to create and modify Topo Templates, allowing you to deploy your projects as containerized workloads to Arm-based Linux targets over SSH.
4+
aliases:
5+
- /learning-paths/cross-platform/create-your-own-topo-templates/
6+
7+
description: Understand how to create and modify Topo Projects, allowing you to deploy your projects as containerized workloads to Arm-based Linux targets over SSH.
58

69
minutes_to_complete: 30
710

8-
who_is_this_for: This is an introductory topic for embedded, edge, and cloud software developers who want to create their own Topo Templates projects to be natively deployed with Topo.
11+
who_is_this_for: This is an introductory topic for embedded, edge, and cloud software developers who want to create their own Topo Projects to be natively deployed with Topo.
912

1013
learning_objectives:
11-
- Explain the purpose and structure of a Topo Template
12-
- Clone and deploy an existing Topo Template and modify it by adding new clone-time arguments
13-
- Create a new Topo Template from a Docker Compose project
14-
- Add x-topo metadata for configurable arguments, deployment guidance, and hardware requirements
15-
- Locate and install Agent Skills to assist with creating and reviewing Topo Templates
14+
- Explain the purpose and structure of a Topo Project
15+
- Clone and deploy an existing Topo Project and modify it by adding new clone-time parameters
16+
- Create a new Topo Project from a Docker Compose project
17+
- Add x-topo metadata for configurable parameters, deployment guidance, and hardware requirements
18+
- Locate and install Agent Skills to assist with creating and reviewing Topo Projects
1619

1720
prerequisites:
1821
- Completion of the [Deploy containerized workloads to Arm-based Linux targets with Topo](/learning-paths/cross-platform/deploy-containerized-workloads-with-topo/) Learning Path.
@@ -36,39 +39,39 @@ generated_summary_faq:
3639
faq_generated_at: '2026-07-02T19:10:34Z'
3740
faq_source_hash: 280ddbaed118073072407c7e43c743f4d090e153201401deeec4648f9fb0c4ba
3841
summary: >-
39-
You'll author and deploy Topo Templates to Arm-based
40-
Linux targets over SSH. First, you'll clone and run a starter template to confirm your setup, then edit
41-
its `compose.yaml` to add `x-topo` arguments that make the greeting emoji configurable at clone
42-
time. Next, you'll create a new template from an empty directory that serves a simple web page
43-
with configurable text and color while learning the core pieces of a template: standard Compose
42+
You'll author and deploy Topo Projects to Arm-based
43+
Linux targets over SSH. First, you'll clone and run a starter project to confirm your setup, then edit
44+
its `compose.yaml` to add `x-topo.parameters` entries that make the greeting emoji configurable at clone
45+
time. Next, you'll create a new project from an empty directory that serves a simple web page
46+
with configurable text and color while learning the core pieces of a project: standard Compose
4447
services, `x-topo` metadata, and build arguments for Arm Linux targets. You'll also see
4548
where to find optional Agent Skills to assist with creating or converting projects, and how
4649
to recognize a successful deployment by observing the configured behavior on the target.
4750
faqs:
48-
- question: What should I see after running `topo clone` on the Hello World template?
51+
- question: What should I see after running `topo clone` on the Hello World project?
4952
answer: >-
5053
You should see a new directory at the path you provided (for example, `~/topo-welcome`) and
5154
clone output that includes lines like `Copy files` and `Cloning into ...`. After cloning,
52-
the template’s services can be deployed to the Arm-based Linux target as shown in the steps.
55+
the project’s services can be deployed to the Arm-based Linux target as shown in the steps.
5356
- question: Where do I add a new clone-time argument such as a greeting emoji?
5457
answer: >-
55-
Add it under the `x-topo` args section in `compose.yaml`, alongside the existing `GREETING_NAME`
56-
argument. Define the argument name and metadata there so Topo can surface it during cloning.
58+
Add it under the `x-topo` parameters section in `compose.yaml`, alongside the existing `GREETING_NAME`
59+
parameter. Define the parameter name and metadata there so Topo can surface it during cloning.
5760
- question: How do I confirm that my new argument is being used?
5861
answer: >-
59-
Clone and deploy the updated template, then check the running service’s behavior for your
62+
Clone and deploy the updated project, then check the running service’s behavior for your
6063
change. For example, the Hello World greeting should include the emoji you configured, or
6164
the sample webpage should reflect your chosen text and color.
62-
- question: What are the essential parts of a minimal Topo Template I create from scratch?
65+
- question: What are the essential parts of a minimal Topo Project I create from scratch?
6366
answer: >-
64-
Include a `compose.yaml` with standard Compose services, an `x-topo` metadata block, and build
65-
arguments exposed as Topo clone-time parameters. The container image should be built for
67+
Include a `compose.yaml` with standard Compose services, an `x-topo` metadata block, and project
68+
parameters wired to Docker build arguments when needed. The container image should be built for
6669
Arm Linux targets.
67-
- question: When should I use Agent Skills, and which ones are available for templates?
70+
- question: When should I use Agent Skills, and which ones are available for projects?
6871
answer: >-
6972
Use Agent Skills as optional aids when you want help creating or converting a project into
70-
a Topo Template. The specification provides `topo-template-context` for reference about `x-topo`
71-
and CLI behavior and `topo-template-bootstrap` to help convert a repository into a Topo Template.
73+
a Topo Project. Topo provides `topo-project-context` for reference about `x-topo`
74+
and CLI behavior and `topo-project-bootstrap` to help convert a repository into a Topo Project.
7275
# END generated_summary_faq
7376

7477
author: Tomas Agustin Gonzalez Orlando
@@ -102,8 +105,8 @@ shared_between:
102105

103106
further_reading:
104107
- resource:
105-
title: Topo Template format
106-
link: https://github.com/arm/topo-template-format
108+
title: Topo Project specification
109+
link: https://github.com/arm/topo/tree/main/docs/project-specification
107110
type: documentation
108111
- resource:
109112
title: Topo repository

content/learning-paths/cross-platform/create-your-own-topo-templates/_next-steps.md renamed to content/learning-paths/cross-platform/create-your-own-topo-project/_next-steps.md

File renamed without changes.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
title: Use Agent Skills to author Topo Projects
3+
description: Install and use Topo Project Agent Skills to help create, review, and refine Topo Projects.
4+
weight: 6
5+
6+
### FIXED, DO NOT MODIFY
7+
layout: learningpathall
8+
---
9+
10+
## Skills for authoring Topo Projects
11+
12+
If you already have a Docker Compose project and want to convert it to a Topo Project, you can do so with an Agent Skill. You can also use a skill to create your own Topo Project from scratch. These skills are optional authoring aids.
13+
14+
[Topo](https://github.com/arm/topo) currently provides the following skills:
15+
16+
- `topo-project-context`: provides Topo and Topo Project reference context for questions about x-topo metadata, schema, docs, and CLI project behavior.
17+
- `topo-project-bootstrap`: converts a repository into a Topo Project by adding or improving `compose.yaml` and `x-topo` metadata.
18+
- `topo-project-lint`: reviews an existing Topo Project for correctness, consistency, and authoring best practices.
19+
- `topo-project-optimize-deployment`: optimizes feedback loop by measuring and applying the highest-leverage Docker build improvement.
20+
21+
For the most up-to-date list of the available Topo skills, see [Topo Skills](https://github.com/arm/topo/tree/main/skills).
22+
23+
## Install the skills
24+
25+
Install the Topo skills with [npx skills](https://github.com/vercel-labs/skills):
26+
27+
{{% notice Note %}}
28+
`npx` requires Node.js. If you don't have Node.js installed on your machine, install it before running the following command.
29+
{{% /notice %}}
30+
31+
```bash
32+
npx skills add arm/topo
33+
```
34+
35+
Restart your AI coding agent after installing or updating skills to make sure new skills are loaded for use.
36+
37+
## Use the skills
38+
39+
After installing skills, you can prompt your agent to use a skill.
40+
41+
For example, to create a Topo Project from an existing project:
42+
43+
```text
44+
Use the topo-project-bootstrap skill to convert this repository into a Topo Project.
45+
```
46+
47+
## What you've accomplished
48+
49+
You've now learned how you can install and use Agent Skills to help author Topo Projects.
50+
51+
You can now create, modify, and deploy Topo Projects to Arm-based Linux targets. To find more projects to clone and modify, explore the [Topo Catalog](https://github.com/arm/topo-project-catalog/blob/main/data/catalog.json).

content/learning-paths/cross-platform/create-your-own-topo-templates/creating-a-new-template.md renamed to content/learning-paths/cross-platform/create-your-own-topo-project/creating-a-new-project.md

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: Create a new Topo Template from an empty directory
3-
description: Create a Topo Template from a Docker Compose project with x-topo metadata, clone-time arguments, and an Arm Linux container image.
2+
title: Create a new Topo Project from an empty directory
3+
description: Create a Topo Project from a Docker Compose project with x-topo metadata, clone-time parameters, and an Arm Linux container image.
44
weight: 5
55

66
### FIXED, DO NOT MODIFY
@@ -9,9 +9,9 @@ layout: learningpathall
99

1010
## Create a web page with configurable text and color
1111

12-
You've already cloned and modified an existing Topo Template. In this section, you'll create a new template from an empty directory.
12+
You've already cloned and modified an existing Topo Project. In this section, you'll create a new project from an empty directory.
1313

14-
The template serves a small web page with configurable text and color, and demonstrates the core parts of a Topo Template:
14+
The project serves a small web page with configurable text and color, and demonstrates the core parts of a Topo Project:
1515

1616
- A `compose.yaml` file with standard Compose services
1717
- An `x-topo` metadata block
@@ -20,14 +20,14 @@ The template serves a small web page with configurable text and color, and demon
2020

2121
### Create the project directory
2222

23-
Create a new directory for the template:
23+
Create a new directory for the project:
2424

2525
```bash
2626
mkdir -p ~/topo-message-card
2727
cd ~/topo-message-card
2828
```
2929

30-
A Topo Template is a normal project directory. At minimum, it needs to contain a `compose.yaml` file. Most Topo Templates also include a `Dockerfile` and application source code.
30+
A Topo Project is a normal project directory. At minimum, it needs to contain a `compose.yaml` file. Most Topo Projects also include a `Dockerfile` and application source code.
3131

3232
By the end of this section, the directory you created will have the following structure:
3333

@@ -108,15 +108,15 @@ FROM nginx:alpine
108108
COPY src/index.html /usr/share/nginx/html/index.html
109109

110110
ARG CARD_TITLE="Hello from Topo"
111-
ARG CARD_MESSAGE="This page was created from a Topo Template."
111+
ARG CARD_MESSAGE="This page was created from a Topo Project."
112112
ARG ACCENT_COLOR="#0091bd"
113113

114114
RUN sed -i "s|__CARD_TITLE__|${CARD_TITLE}|g" /usr/share/nginx/html/index.html
115115
RUN sed -i "s|__CARD_MESSAGE__|${CARD_MESSAGE}|g" /usr/share/nginx/html/index.html
116116
RUN sed -i "s|__ACCENT_COLOR__|${ACCENT_COLOR}|g" /usr/share/nginx/html/index.html
117117
```
118118

119-
Topo passes configuration values to Topo Templates through Docker build arguments. The `ARG` lines define the values consumed during the image build.
119+
Topo passes configuration values to Topo Projects through Docker build arguments. The `ARG` lines define the values consumed during the image build.
120120

121121
`sed` is a command-line text replacement tool. The `sed` commands replace placeholder text in `index.html` during the image build. This way, each cloned project can customize the web page without manually editing the source file.
122122

@@ -125,36 +125,35 @@ Topo passes configuration values to Topo Templates through Docker build argument
125125
Create `compose.yaml` in the `topo-message-card` directory with the following content:
126126

127127
```yaml
128-
# yaml-language-server: $schema=https://raw.githubusercontent.com/arm/topo-template-format/refs/heads/main/schema/topo-template-format.json
128+
# yaml-language-server: $schema=https://raw.githubusercontent.com/arm/topo/refs/heads/main/docs/project-specification/schema/topo-project-specification.json
129129
services:
130130
message-card:
131131
platform: linux/arm64
132132
build:
133133
context: .
134134
args:
135135
CARD_TITLE: "Hello from Topo"
136-
CARD_MESSAGE: "This page was created from a Topo Template."
136+
CARD_MESSAGE: "This page was created from a Topo Project."
137137
ACCENT_COLOR: "#0091bd"
138138
ports:
139139
- "8088:80"
140140

141141
x-topo:
142142
name: "Message Card"
143143
description: |
144-
A minimal web application template that shows a configurable title,
144+
A minimal web application project that shows a configurable title,
145145
message, and accent color.
146-
type: "application"
147-
deploy_success_message: |
146+
deployment_success_message: |
148147
Message Card is running on port 8088.
149-
args:
148+
parameters:
150149
CARD_TITLE:
151150
description: "The title to show on the message card"
152151
required: true
153152
example: "Hello from Arm"
154153
CARD_MESSAGE:
155154
description: "The message to show below the title"
156155
required: false
157-
default: "This page was created from a Topo Template."
156+
default: "This page was created from a Topo Project."
158157
example: "Built once and deployed with Topo"
159158
ACCENT_COLOR:
160159
description: "The CSS color used for the card accent"
@@ -163,40 +162,39 @@ x-topo:
163162
example: "#00a3a3"
164163
```
165164
166-
This file is both a Compose file and a Topo Template definition.
165+
This file is both a Compose file and a Topo Project definition.
167166
168167
The `services` section is standard Compose. The service builds the local `Dockerfile`, publishes the web server on port `8088`, and sets `platform: linux/arm64` so the service targets Arm-based Linux systems.
169168

170169
The `x-topo` section is the Topo metadata block:
171170

172-
- `name` gives the template a human-readable name.
173-
- `description` explains what the template does.
174-
- `type` identifies this as an application template.
175-
- `deploy_success_message` prints a useful hint after deployment.
176-
- `args` defines the values Topo prompts for when someone clones the template.
171+
- `name` gives the project a human-readable name.
172+
- `description` explains what the project does.
173+
- `deployment_success_message` prints a useful hint after deployment.
174+
- `parameters` defines the values Topo prompts for when someone clones the project.
177175

178-
The argument names in `x-topo.args` match the keys under `services.message-card.build.args`. When Topo resolves the arguments, it writes the selected values into the build arguments.
176+
The argument names in `x-topo.parameters` match the keys under `services.message-card.build.args`. When Topo resolves the parameters, it writes the selected values into the build arguments.
179177

180-
The same argument name appears in three places: `x-topo.args` defines what Topo asks for, `build.args` passes the value to Docker, and the Dockerfile `ARG` consumes it.
178+
The same name appears in three places: `x-topo.parameters` defines what Topo asks for, `build.args` passes the value to Docker, and the Dockerfile `ARG` consumes it.
181179

182-
### Clone the local Topo Template
180+
### Clone the local Topo Project
183181

184-
Clone your local Topo Template into a new project directory.
182+
Clone your local Topo Project into a new project directory.
185183

186-
You can choose to answer interactive prompts for the arguments:
184+
You can choose to answer interactive prompts for the project parameters:
187185
```bash
188186
topo clone dir:$HOME/topo-message-card $HOME/message-card-demo
189187
```
190188

191-
Alternatively, you can include the arguments in the command:
189+
Alternatively, you can include the project parameters in the command:
192190
```bash
193191
topo clone dir:$HOME/topo-message-card $HOME/message-card-demo \
194192
CARD_TITLE="Hello from Arm" \
195-
CARD_MESSAGE="Created from a new Topo Template" \
193+
CARD_MESSAGE="Created from a new Topo Project" \
196194
ACCENT_COLOR="#00a3a3"
197195
```
198196

199-
After using one of the commands to clone the template, inspect the generated project:
197+
After using one of the commands to clone the project, inspect the generated project:
200198

201199
```bash
202200
cd ~/message-card-demo
@@ -213,7 +211,7 @@ services:
213211
context: .
214212
args:
215213
CARD_TITLE: "Hello from Arm"
216-
CARD_MESSAGE: "Created from a new Topo Template"
214+
CARD_MESSAGE: "Created from a new Topo Project"
217215
ACCENT_COLOR: "#00a3a3"
218216
```
219217

@@ -239,7 +237,7 @@ ssh -L 8088:localhost:8088 user@my-target
239237

240238
Then open `http://localhost:8088/` in your browser.
241239

242-
![Screenshot of the new Topo Template - a web page with the text "Hello from Arm" as the title. This confirms successful deployment and provides a visual reference for the expected result.#center](new_template.png "Hello from Arm web page")
240+
![Screenshot of the new Topo Project - a web page with the text "Hello from Arm" as the title. This confirms successful deployment and provides a visual reference for the expected result.#center](new_project.png "Hello from Arm web page")
243241

244242
Confirm that the container is running:
245243

@@ -251,38 +249,37 @@ The output includes the `message-card` service and port `8088`.
251249

252250
## (Optional) Add hardware requirements
253251

254-
Add `features` only when your Topo Template needs specific Arm hardware features. For example, a SIMD benchmark that requires SVE can declare that it needs SVE:
252+
Add `features` only when your Topo Project needs specific Arm hardware features. For example, a SIMD benchmark that requires SVE can declare that it needs SVE:
255253

256254
```yaml
257255
x-topo:
258256
name: "SIMD Visual Benchmark"
259257
description: |
260258
Visual demonstration of SIMD performance benefits on Arm processors.
261-
type: "application"
262259
features:
263260
- "SVE"
264261
```
265262

266-
Topo can use these feature requirements when listing templates against a target.
263+
Topo can use these feature requirements when listing projects against a target.
267264

268-
## Share the Topo Template
265+
## Share the Topo Project
269266

270-
To share your Topo Template, publish the template directory as a Git repository. Other users can then clone it with Topo:
267+
To share your Topo Project, publish the project directory as a Git repository. Other users can then clone it with Topo:
271268

272269
```bash
273270
topo clone https://github.com/<user-or-org>/topo-message-card.git
274271
```
275272

276-
If you want the template to be reused by the wider Topo community, include:
273+
If you want the project to be reused by the wider Topo community, include:
277274

278275
- `compose.yaml`
279276
- Any Dockerfiles and source files required by the services
280277
- A `README.md` with usage instructions
281278
- A license file
282-
- Clear `x-topo` metadata and argument descriptions
279+
- Clear `x-topo` metadata and parameter descriptions
283280

284281
## What you've accomplished and what's next
285282

286-
You've now created a complete Topo Template from scratch. You created the web page HTML, added a Compose file, described the template with `x-topo` metadata, supplied clone-time arguments, and deployed the generated project to an Arm-based Linux target.
283+
You've now created a complete Topo Project from scratch. You created the web page HTML, added a Compose file, described the project with `x-topo` metadata, supplied clone-time parameters, and deployed the generated project to an Arm-based Linux target.
287284

288-
Next, you'll learn where to find Agent Skills that can help you create, modify, and review Topo Templates.
285+
Next, you'll learn where to find Agent Skills that can help you create, modify, and review Topo Projects.

0 commit comments

Comments
 (0)