File Layout
daggle uses a fixed directory structure for configuration, DAG definitions, and run data.
Directory structure
~/.config/daggle/
dags/ # Global DAG definitions
my-pipeline.yml
nightly-etl.yml
projects.yaml # Registered project directories
~/.local/share/daggle/
runs/ # Run data, organized by DAG and date
<dag>/
<YYYY-MM-DD>/
run_<id>/
meta.json # Run metadata (params, start time, status)
events.jsonl # Append-only event log (see Event Schema)
<step>.stdout.log # Step stdout (includes output markers)
<step>.stderr.log # Step stderr
<step>.inline.R # Rendered inline R code (for r_expr steps)
proc/
scheduler.pid # Scheduler daemon PID file
.daggle/ # Project-local DAG definitions (repo root)
my-dag.yml
DAG discovery order
When resolving a DAG by name, daggle searches in this order:
--dags-dirflag (if provided)DAGGLE_DAGS_DIRenvironment variable (if set).daggle/in the current working directory (project-local)~/.config/daggle/dags/(global)
The first match wins.
Run directory contents
Each run gets its own directory under runs/<dag>/<date>/run_<id>/.
| File | Description |
|---|---|
meta.json |
Run metadata: DAG name, parameters, start/end timestamps, final status. |
events.jsonl |
Append-only event log. See Event Schema. |
<step>.stdout.log |
Captured stdout for each step. Includes raw output markers. |
<step>.stderr.log |
Captured stderr for each step. |
<step>.inline.R |
Rendered R source for r_expr steps (useful for debugging). |
Overriding directories
| Mechanism | Config dir | Data dir | DAGs dir |
|---|---|---|---|
| CLI flags | – | --data-dir |
--dags-dir |
| Environment variables | DAGGLE_CONFIG_DIR |
DAGGLE_DATA_DIR |
DAGGLE_DAGS_DIR |
| XDG fallback | $XDG_CONFIG_HOME/daggle |
$XDG_DATA_HOME/daggle |
– |
| Default | ~/.config/daggle |
~/.local/share/daggle |
(discovery order) |
Priority is top to bottom: CLI flags override environment variables, which override XDG, which override defaults.