Developing Blueprints¶
A blueprint is a small directory of YAML files that completely defines a build environment. Write it once, use it anywhere: natively on Linux, in a VM, in a Docker image, on CI.
What a blueprint contains¶
my-arm-env/
├── manifest.yml # required: name, version, variables, task order
├── variables.yml # optional: shared variable definitions
├── 00-system.yml # task file: base OS packages
├── 10-toolchain.yml # task file: ARM GCC toolchain
├── 20-environment.yml # task file: env vars and config
└── alloy.lock.yml # generated: pinned URLs and SHA256 checksums
The provisioner reads manifest.yml to know the order, then executes each task file in sequence. Task files are independent, idempotent, and re-runnable.
Getting started¶
The recommended way to create a blueprint is to clone an existing one from Alloy Hub and modify it. The hub has community blueprints for a wide range of boards and toolchains. Starting from one saves you from writing boilerplate and gives you a working, tested baseline.
-
Clone from Alloy Hub (recommended)
Find a community blueprint that is close to what you need, clone it locally, and customize it for your project. The fastest path: you get a working, tested environment as your starting point.
-
Write from scratch
No suitable blueprint exists on the hub? Define your environment from the ground up using the step-by-step guide.
The blueprint development lifecycle¶
flowchart LR
Write["Write / extend blueprint"] --> Test["Test locally\n(alloy-host or native)"]
Test --> Fix["Fix issues"]
Fix --> Test
Test --> Resolve["Resolve lockfile\nalloy-host resolve"]
Resolve --> Commit["Commit blueprint\n+ lockfile"]
Commit --> Publish["Open PR to alloy-catalog\n→ published on Alloy Hub"]
- Write your manifest and task files.
- Test by provisioning into a local VM or running alloy-provisioner natively.
- Resolve the lockfile to pin toolchain URLs and checksums.
- Commit the blueprint and lockfile to your repo.
- Publish by opening a PR to the alloy-catalog repo; automated checks run, and on merge it appears on Alloy Hub.
In this section¶
| Page | What you'll learn |
|---|---|
| Blueprint Structure | manifest.yml, task files, run_order, lockfile |
| Variables & Configuration | Manifest vars, variables.yml, .env files, required_env |
| The Layers Approach | How to split a blueprint into maintainable layers |
| Extend from Alloy Hub | Start from an existing blueprint and customize |
| Write from Scratch | Step-by-step: manifest → task files → test → publish |
| Publishing to Alloy Hub | PR to alloy-catalog → availability on Alloy Hub |