Configuration — v0.7.x
Advanced edge-manager.yaml and edge-sync.yaml reference for Alloy Edge v0.7
This reference targets the latest v0.7 patch, v0.7.6. Do not add
version: 1 or v0.8 pipeline fields to these files.
The v0.7 Track Folder flow uses two YAML files:
| File | Loaded by | Purpose |
|---|---|---|
edge-manager.yaml | alloy-edge manager | Cloud connection, device identity, and local process supervision |
edge-sync.yaml | alloy-edge sync | Folder watching, uploads, flat cleanup limits, redaction, and lifecycle |
Durations use Go-style strings such as 5s, 1m, and 72h. Sizes and bandwidth
limits use values such as 500MB, 10GB, and 5MB.
Print the complete commented templates shipped with the installed binary:
alloy-edge manager sample-config
alloy-edge sync sample-configedge-manager.yaml
Top-level fields
| Field | Purpose |
|---|---|
backend_url | Alloy backend endpoint. Use the value generated by Add device; ALLOY_BACKEND_URL overrides it. |
state_dir | Manager state, credentials, and child configuration. Defaults to .alloy/state; ALLOY_STATE_DIR overrides it. |
seed_state | Bootstrap identity and transport used until the device is approved. |
local_state | Locally owned tags and processes that cloud configuration cannot overwrite. |
seed_state
| Field | Default | Purpose |
|---|---|---|
api_key | — | Provisioning key used until approval. ALLOY_PROVISIONING_KEY overrides it before approval; ALLOY_API_KEY overrides the permanent key at runtime. |
edge_id | Hostname, then generated UUID | Stable device identifier reported to Alloy. |
tags | {} | Free-form strings for grouping and filtering devices. |
transport.http.poll_secs | 15 | Seconds between desired-state checks. |
processes | [] | Bootstrap processes used before the first successful cloud sync. Prefer local_state.processes for locally owned processes. |
local_state.processes
| Field | Default | Purpose |
|---|---|---|
name | — | Required process name used in logs and reported state. |
command | — | Required command to execute. |
enabled | true | Keep the process declared but stopped when false. |
restart | on_failure | Restart policy: always, on_failure, or never. |
shell | false | Run through /bin/sh -c when shell expansion is required. |
trigger | Start on apply | Start at boot, on a cron schedule, or when connectivity changes. |
duration | — | Stop the process after a bounded duration. |
requires_auth | false | Hold the process until Alloy approves the device. Set this for alloy-edge sync. |
files | {} | Inline configuration files attached to the process. |
A locally owned Track Folder sync process has this shape:
local_state:
processes:
- name: edge-sync
command: alloy-edge sync -c /data/recordings/.alloy/edge-sync.yaml
enabled: true
restart: on_failure
trigger: boot
requires_auth: trueedge-sync.yaml
v0.7 uses the unstamped configuration schema. Only input_dir is required.
Disk cleanup is disabled until you set one of the top-level limits.
input_dir: /data/recordings
file_pattern: "*.mcap,*.json,*.jsonl"
upload_delay: 30s
max_folder_size: 10GB
max_file_age: 72h
max_file_count: 1000
lifecycle:
original:
after: keepScanning and upload
| Field | Default | Purpose |
|---|---|---|
input_dir | — | Required folder to scan. |
file_pattern | *.mcap,*.json,*.jsonl | Comma-separated file globs. .tmp entries are reserved and removed. |
cycle_time | 1s | Folder scan interval. |
upload_delay | 30s | Minimum age before a footer-less recording is eligible. |
mcap_require_footer | false | Require an MCAP footer instead of falling back to file age. |
upload_type | signed_url | signed_url, none, or feature-gated opendal. |
bwlimit | Unlimited | Outbound bandwidth limit. |
max_concurrent_uploads | 1 | Number of files uploaded in parallel. |
metadata | {} | Free-form metadata included in upload requests. |
scan_exclude | [] | Subdirectory basenames to skip; dot-directories are always skipped. |
Cleanup and upload state
| Field | Default | Purpose |
|---|---|---|
max_folder_size | Unbounded | Delete oldest eligible files when the tracked folder exceeds this size. |
max_file_age | — | Delete eligible files older than this duration. |
max_file_count | — | Delete oldest eligible files when the count exceeds this limit. |
state_dir | .alloy/state | Holds sync state and the shared device credentials. |
txlog_path | Derived from state_dir | Optional path for append-only upload bookkeeping. |
Files currently uploading or open by another process are not removed by cleanup.
Lifecycle
Lifecycle controls the original and redacted artifact independently:
lifecycle:
original:
after: keep
cleanup:
include_in_storage_cleanup: true
redacted:
after: move
move_to: .alloy-redacted
cleanup:
include_in_storage_cleanup: true| Field | Default | Purpose |
|---|---|---|
<stage>.after | keep | keep, delete, or move the stage output. |
<stage>.move_to | Stage-specific dot-directory | Destination when after: move; relative paths resolve from input_dir. |
<stage>.cleanup.include_in_storage_cleanup | true | Include moved files in the global size, age, and count limits. |
The cleanup default above is an important v0.7 behavior. It changes to false in
v0.8.
Redaction
v0.7 configures transformation through one flat redaction block:
redaction:
enabled: true
rules_file: .alloy/redaction.yaml
on_rule_error: skip_record
on_reader_error: skip_tail
output_compression: inherit
output_suffix: redacted
audit:
jsonl_path: .alloy/state/redaction-audit.jsonl
embed_in_mcap: true| Field | Default | Purpose |
|---|---|---|
enabled | false | Enable transformation for eligible files. |
rules_file | — | Required rules file when redaction is enabled. |
on_rule_error | skip_record | skip_record, skip_file, or explicitly fail open with pass_original. |
on_reader_error | skip_tail | skip_tail, abort, or recover malformed MCAP data. |
output_compression | inherit | inherit, none, zstd, or lz4. |
output_suffix | redacted | Infix inserted before the file extension. |
audit.jsonl_path | — | Optional append-only audit sidecar. |
audit.embed_in_mcap | true | Embed the audit record into the transformed MCAP. |
Unlike v0.8, v0.7 has no version: 1, structured cleanup: block,
lifecycle.transform, or ordered pipeline:. Use lifecycle.redacted and the
flat redaction: block described in the
Redaction guide.
For complete transform-rule syntax, use the Redaction reference.