profiles
Per-environment overrides selected at runtime with --profile <name> — one
rflow.yaml, many environments:
networks:
- name: ethereum
chain_id: 1
rpc: ${ETH_RPC}
constants:
treasury: "0x1111111111111111111111111111111111111111"
profiles:
staging:
networks: # replaces `ethereum` by name
- name: ethereum
chain_id: 11155111
rpc: ${SEPOLIA_RPC}
constants: # merged by key — profile wins
treasury: "0x2222222222222222222222222222222222222222"
config:
port: 4000 # engine settings a profile may overriderflow validate --profile staging # validates the MERGED view
rflow start --profile staging # boots the MERGED viewMerge semantics
Applied after ${VAR} env substitution, before validation — so
validate --profile sees exactly what start --profile boots.
| Section | Behaviour |
|---|---|
networks | Replace-by-name: a profile network replaces the base network with the same name; new names are appended; unmentioned base networks are kept. |
constants | Merged by key — the profile value wins, other base constants are kept. |
config | Individual settings override (port today). |
An unknown profile name is a hard error that lists what is available:
unknown profile 'production' - available profiles: local, stagingEditor autocomplete for rflow.yaml
rflow ships a JSON Schema for the whole config surface. Point
yaml-language-server
(VS Code's YAML extension, Neovim's yamlls, ...) at it with a modeline at the
top of your rflow.yaml:
# yaml-language-server: $schema=https://rflow.xyz/rflow.schema.json
rflow_version: 1or generate it locally (it's also committed at
documentation/docs/public/rflow.schema.json):
rflow schema > rflow.schema.jsonYou get completion, hover docs and unknown-key/type squiggles for every trigger, step and setting.