Alloy

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:

FileLoaded byPurpose
edge-manager.yamlalloy-edge managerCloud connection, device identity, and local process supervision
edge-sync.yamlalloy-edge syncFolder 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-config

edge-manager.yaml

Top-level fields

FieldPurpose
backend_urlAlloy backend endpoint. Use the value generated by Add device; ALLOY_BACKEND_URL overrides it.
state_dirManager state, credentials, and child configuration. Defaults to .alloy/state; ALLOY_STATE_DIR overrides it.
seed_stateBootstrap identity and transport used until the device is approved.
local_stateLocally owned tags and processes that cloud configuration cannot overwrite.

seed_state

FieldDefaultPurpose
api_keyProvisioning key used until approval. ALLOY_PROVISIONING_KEY overrides it before approval; ALLOY_API_KEY overrides the permanent key at runtime.
edge_idHostname, then generated UUIDStable device identifier reported to Alloy.
tags{}Free-form strings for grouping and filtering devices.
transport.http.poll_secs15Seconds 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

FieldDefaultPurpose
nameRequired process name used in logs and reported state.
commandRequired command to execute.
enabledtrueKeep the process declared but stopped when false.
restarton_failureRestart policy: always, on_failure, or never.
shellfalseRun through /bin/sh -c when shell expansion is required.
triggerStart on applyStart at boot, on a cron schedule, or when connectivity changes.
durationStop the process after a bounded duration.
requires_authfalseHold 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: true

edge-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: keep

Scanning and upload

FieldDefaultPurpose
input_dirRequired folder to scan.
file_pattern*.mcap,*.json,*.jsonlComma-separated file globs. .tmp entries are reserved and removed.
cycle_time1sFolder scan interval.
upload_delay30sMinimum age before a footer-less recording is eligible.
mcap_require_footerfalseRequire an MCAP footer instead of falling back to file age.
upload_typesigned_urlsigned_url, none, or feature-gated opendal.
bwlimitUnlimitedOutbound bandwidth limit.
max_concurrent_uploads1Number 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

FieldDefaultPurpose
max_folder_sizeUnboundedDelete oldest eligible files when the tracked folder exceeds this size.
max_file_ageDelete eligible files older than this duration.
max_file_countDelete oldest eligible files when the count exceeds this limit.
state_dir.alloy/stateHolds sync state and the shared device credentials.
txlog_pathDerived from state_dirOptional 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
FieldDefaultPurpose
<stage>.afterkeepkeep, delete, or move the stage output.
<stage>.move_toStage-specific dot-directoryDestination when after: move; relative paths resolve from input_dir.
<stage>.cleanup.include_in_storage_cleanuptrueInclude 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
FieldDefaultPurpose
enabledfalseEnable transformation for eligible files.
rules_fileRequired rules file when redaction is enabled.
on_rule_errorskip_recordskip_record, skip_file, or explicitly fail open with pass_original.
on_reader_errorskip_tailskip_tail, abort, or recover malformed MCAP data.
output_compressioninheritinherit, none, zstd, or lz4.
output_suffixredactedInfix inserted before the file extension.
audit.jsonl_pathOptional append-only audit sidecar.
audit.embed_in_mcaptrueEmbed 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.

On this page