Skip to content

Application YAML (v3)

The canonical Application format used by edgible stack deploy. One YAML document describes one application; multiple documents in a single file are separated by ---.

apiVersion: v3
kind: Application
metadata: { ... }
spec: { ... }
FieldRequiredTypeNotes
apiVersionyesv3The only supported value today.
kindyesApplicationThe only supported value today.
metadatayesobjectSee Metadata.
specyesobjectSee Spec.
metadata:
name: my-app
organization: <org-id>
dependsOn: [other-app-name] # optional
FieldRequiredTypeNotes
nameyesstringUnique within the organization. Lowercase, alphanumeric, hyphens.
organizationyesstringYour organization ID. Find with edgible config list.
dependsOnnostring[]Names of other applications that must be deployed before this one.
spec:
placement: { ... }
workloads: [ ... ]
storage: [ ... ] # optional
access: [ ... ] # optional but typical
placement:
strategy: serving-device
deviceSelector:
deviceName: my-first # OR
deviceId: dev_a1b2c3d4
gateway: # optional — pin to a specific gateway
deviceName: eu-gateway
FieldRequiredTypeNotes
strategyyesenumserving-device is the only supported value today (the cloud strategy is on the roadmap).
deviceSelector.deviceNameone ofstringPin to a device by its name.
deviceSelector.deviceIdone ofstringPin to a device by its ID. Mutually exclusive with deviceName.
gatewaynoobjectOverride the automatic gateway choice. Same selector shape as deviceSelector.

A list of one or more workloads. Common fields apply to every type:

workloads:
- name: api
type: compose | docker | managed-process | vm | pre-existing
ports: [ ... ]
storage: [ ... ] # optional
env: { ... } # optional
dependsOn: [ ... ] # optional, names of other workloads
FieldRequiredTypeNotes
nameyesstringUnique within the application.
typeyesenumOne of compose, docker, managed-process, vm, pre-existing.
portsusuallyarrayPorts the workload listens on.
storagenoarrayStorage volumes from spec.storage to mount.
envnomapEnvironment variables, string keys to string values.
dependsOnnostring[]Names of other workloads to start first.
- name: api
type: compose
composeFile: ./api.compose.yml
FieldRequiredTypeNotes
composeFileyesstringPath to a Docker Compose file, relative to the application YAML.
- name: redis
type: docker
image: redis:7-alpine
FieldRequiredTypeNotes
imageyesstringA pullable image reference.
- name: worker
type: managed-process
command: ["./bin/worker"]
workingDir: /opt/app
logFile: /var/log/edgible/worker.log
FieldRequiredTypeNotes
commandyesstring[]argv. No shell expansion.
workingDirnostringCWD for the process. Defaults to the agent’s working directory.
logFilenostringWhere stdout/stderr are written.
- name: legacy
type: vm
vmBackend: qemu
diskImage: /var/lib/edgible/vms/legacy.qcow2
memory: 2048
cpus: 2
FieldRequiredTypeNotes
vmBackendyesenumqemu today.
diskImageyesstringPath on the device to a qcow2 disk image.
memoryyesnumberMiB.
cpusyesnumberVirtual CPUs.
- name: legacy-svc
type: pre-existing
hostPort: 8080
FieldRequiredTypeNotes
hostPortyesnumberA port already listening on 127.0.0.1 on the device.
ports:
- { name: http, containerPort: 8080, protocol: tcp }
FieldRequiredTypeNotes
nameyesstringUsed by access entries to reference this port.
containerPortyesnumberThe port number the workload listens on.
protocolnoenumtcp (default) or udp.
storage:
- { name: pgdata, type: persistent, size: 20Gi, mobility: device-bound }
FieldRequiredTypeNotes
nameyesstringReferenced by workloads[].storage[].name.
typenoenumpersistent (default) or ephemeral.
sizenostringA size like 20Gi, 500Mi.
mobilitynoenumdevice-bound (default). Cloud-class mobility on the roadmap.
access:
- name: public
type: https | http | tcp | udp
target: { workload: <workload-name>, port: <port-name> }
hostname: { generated: true } | { custom: <fqdn-or-list> }
tls: { managedBy: edgible }
listenPort: 443 # optional override
publish: true # optional, defaults to true
policies:
auth: { mode: none | org | api-key | short-code }
FieldRequiredTypeNotes
nameyesstringUnique within the application.
typeyesenumhttps, http, tcp, udp.
target.workloadyesstringA name from spec.workloads[].
target.portyesstringA port name from that workload.
hostnamehttps onlyobject{ generated: true } or { custom: <fqdn> } or { custom: [<fqdn>, ...] }.
tlshttps onlyobject{ managedBy: edgible } is the only supported value today.
listenPortnonumberOverride the default port (443 for https, 80 for http).
publishnoboolIf false, the route is configured but not exposed publicly. Defaults to true.
policies.auth.modenoenumOne of the four modes documented in Authentication modes.

You can put several Applications in one file, separated by ---:

apiVersion: v3
kind: Application
metadata:
name: db
organization: <org-id>
spec: { ... }
---
apiVersion: v3
kind: Application
metadata:
name: api
organization: <org-id>
dependsOn: [db]
spec: { ... }

edgible stack deploy -f all.yml deploys both, in dependsOn order.