Configuration Reference
arrow uses a single arrow.yaml file at the root of your project. This reference describes every supported field.
Full Schema
yaml
# arrow.yaml - project configuration
# ====================================
# Schema version. Currently only "1" is supported.
# Required.
version: "1"
# Project metadata.
# Optional but recommended.
project:
# Human-readable project name
name: my-project
# Project language. Used for default templates.
# Options: node, python, go, rust, auto
language: node
# Custom variables accessible in step commands.
# Use {{ .var.NAME }} or $NAME syntax.
vars:
REGISTRY: docker.io/myorg
TAG: latest
# Environment variables available to all steps.
# Can reference shell env vars with {{ .env.NAME }}.
env:
NODE_ENV: production
# Hooks run before/after every pipeline execution.
hooks:
pre-run: echo "Starting..."
post-run: echo "Done."
# Pipeline definitions.
# Each pipeline is a named set of steps.
pipelines:
# Pipeline name (used with "arrow run <name>").
build:
# Optional description shown in "arrow pipe list"
description: Build and test the application
# Steps run in dependency order.
steps:
# Step name - must be unique within a pipeline.
- name: install
# Shell command to execute.
# Required.
run: npm install
# Working directory relative to project root.
# Optional. Defaults to project root.
dir: frontend
# Dependencies: steps that must complete first.
# Steps with no "needs" run in parallel.
# Optional.
needs: []
# Environment variables for this step only.
# Merged with top-level env and shell env.
# Optional.
env:
CI: "true"
# Cache configuration.
# Optional.
cache:
# Paths to cache (relative to project root).
paths:
- node_modules
- .next/cache
# Cache key template. Defaults to hash of
# the step command + all input files.
key: deps-{{ hashFiles("package-lock.json") }}
# Retry configuration for flaky steps.
# Optional.
retry:
# Max attempts (including first try).
attempts: 3
# Backoff strategy: fixed, exponential
backoff: exponential
# When to run this step.
# Options: always, success, failure
# Default: success
when: success
# Timeout for this step.
# Overrides the global --timeout flag.
# Optional.
timeout: 10m
- name: test
run: npm test
needs: [install]Conditional Steps
Steps can be conditional using the when field or environment-based conditionals:
yaml
steps:
- name: deploy
run: ./deploy.sh
# Only deploy on the main branch
when: "{{ eq .env.BRANCH "main" }}"
- name: notify
run: ./slack-notify.sh
# Always run, even if previous steps fail
when: always
- name: cleanup
run: rm -rf temp/
when: alwaysEnvironment Variable Overrides
Every configuration value can be overridden with environment variables using the ARROW_ prefix:
| Config Path | Env Variable | Example |
|---|---|---|
project.name | ARROW_PROJECT_NAME | export ARROW_PROJECT_NAME=my-app |
project.language | ARROW_PROJECT_LANGUAGE | export ARROW_PROJECT_LANGUAGE=go |
env.* | ARROW_ENV_* | export ARROW_ENV_NODE_ENV=production |
vars.* | ARROW_VARS_* | export ARROW_VARS_TAG=v1.2.0 |
Environment variable overrides take precedence over values in arrow.yaml. This is useful for CI/CD environments where you want to inject values without modifying the config file.
Validating Configuration
Use arrow config validate to check your configuration for errors:
terminal
$ arrow config validate
Configuration is valid
$ arrow config validate --file pipelines/deploy.yaml
Configuration is valid
Global CLI Flags
These flags apply to all arrow commands:
| Flag | Description |
|---|---|
--config | Path to config file (default: arrow.yaml) |
--log-level | Log verbosity: debug, info, warn, error (default: info) |
--no-color | Disable colored output |
--help | Show help for any command |
--version | Print version information |