Zones
Declaring a zone. Add an entry under zones with rows, then set a button’s display to the zone’s key. position orders buttons inside the zone, and on the zone itself orders it among the other items of its bar. Try changing rows or display:
name: myapp
root: ~/Projects/myapp
services:
web: npm run dev
zones:
mobile:
rows: 2 # 1, 2 or 3 rows of the bar tall
label: Mobile # shown in menus; defaults to the key
display: header # header (default) or footer
actions:
ios:
cmd: make ios
label: iOS
display: mobile # the zone's key puts the button inside
position: 1 # order inside the zone
android:
cmd: make android
label: Android
display: mobile
position: 2
testflight:
cmd: make testflight
label: TestFlight
display: mobile
position: 3
Layers. A zone can hold several sets of buttons and slide between them with dots under its frame. List them under layers and point each button at one with layer; a button without one lands in the first layer. Zones work in a repo’s .lpm.yml too, so the whole team gets the same layout:
zones:
build:
rows: 2
layers: # button sets, switched with the dots
mobile:
label: Mobile # shown left of the dots
position: 1
release:
label: Release
position: 2
actions:
ios:
cmd: make ios
label: iOS
display: build
layer: mobile
android:
cmd: make android
label: Android
display: build
layer: mobile
testflight:
cmd: make testflight
label: TestFlight
display: build
layer: mobile
tag:
cmd: ./scripts/tag-release.sh
label: Tag release
display: build
layer: release
confirm: true
Good to know
collapsed: true folds a zone into a single button that shows the rest on hover. Zones live in your project file, .lpm.yml, or global.yml — not in templates or a duplicate’s own file. Only top-level actions sit in a zone, and a button whose display names a zone that doesn’t exist shows in the header.
The quickest way to build one is to ask your agent: “Put the iOS and Android builds in a two-row zone in the footer.”