Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

profiles

Per-environment overrides selected at runtime with --profile <name>. One rflow.yaml, many environments:

rflow_version: 1
name: treasury-report
 
config:
  port: 3940
  db_connection: ${DATABASE_URL}
 
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 override 
 
workflows:
  daily-report:
    trigger:
      cron:
        expression: "0 9 * * *"
    steps:
      - id: report
        http_call:
          url: https://ops.example.com/report
          body: { treasury: "${{ constants.treasury }}" }
rflow validate --profile staging   # validates the MERGED view
rflow start --profile staging      # boots the MERGED view

Merge semantics

The merge happens after ${VAR} env substitution and before validation, so validate --profile sees exactly what start --profile boots.

SectionBehaviour
networksReplace-by-name: a profile network replaces the base network with the same name; new names are appended; unmentioned base networks are kept.
constantsMerged by key: the profile value wins, other base constants are kept.
configIndividual settings override (port today).

An unknown profile name is a hard error that lists what is available:

unknown profile 'production' - available profiles: local, staging

Editor 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.sh/rflow.schema.json
rflow_version: 1

or generate it locally (it's also committed at documentation/docs/public/rflow.schema.json):

rflow schema > rflow.schema.json

You get completion, hover docs and unknown-key/type squiggles for every trigger, step and setting.