Deployment
Run locally, deploy to Docker, or ship to the cloud.
Local development
Section titled “Local development”The fastest way to run a pipeline. No containers, no infrastructure.
rf runThis reads flow.yaml in the current directory, validates schemas, and executes every node in topological order. Results land in each node’s artifacts/ directory. State is tracked in .rf/state.db.
For iterative development, validate before running:
rf validate # check for schema errors, type mismatches, cyclesrf run # execute the pipelinerf inspect # view results and execution historyLocal mode is best for development, personal automation, and sensitive data that shouldn’t leave your machine.
Docker deployment
Section titled “Docker deployment”For repeatable execution on any machine or server.
Dockerfile
Section titled “Dockerfile”FROM ghcr.io/radh-io/radhflow:latest
COPY flow.yaml /rf/project/flow.yamlCOPY nodes/ /rf/project/nodes/COPY data/ /rf/project/data/
WORKDIR /rf/project
CMD ["rf", "run"]docker-compose.yaml
Section titled “docker-compose.yaml”version: "3.9"services: radhflow: image: ghcr.io/radh-io/radhflow:latest ports: - "8080:80" volumes: - ./flow.yaml:/rf/project/flow.yaml - ./nodes:/rf/project/nodes - ./data:/rf/project/data - rf-state:/rf/project/.rf environment: RF_MODE: local RF_LOG_LEVEL: info restart: unless-stopped
volumes: rf-state:docker compose up -dVolume mounts
Section titled “Volume mounts”| Mount | Purpose |
|---|---|
flow.yaml | Pipeline definition |
nodes/ | Node specs and implementations |
data/ | Input data files |
rf-state | Persistent state across runs (.rf/ directory) |
Environment variables
Section titled “Environment variables”| Variable | Default | Description |
|---|---|---|
RF_MODE | local | Deployment mode: local, saas, enterprise |
RF_PORT | 80 | HTTP port inside the container |
RF_PROJECT_PATH | /rf/project | Pipeline workspace root |
RF_CONFIG_PATH | /rf/config | Config and database directory |
RF_LOG_LEVEL | info | Log verbosity: debug, info, warn, error |
RF_CREDENTIALS_KEY | — | Encryption key for credential vault |
Cloud deployment (Radhflow Cloud)
Section titled “Cloud deployment (Radhflow Cloud)”Radhflow Cloud provides managed infrastructure, scheduling, monitoring, and a credential vault. You deploy with a single command.
rf deployThis pushes your pipeline to Radhflow Cloud, which handles:
- Scheduled execution (cron-based or event-triggered)
- Secret storage and injection
- Execution monitoring and alerting
- Artifact storage with versioning
Radhflow Cloud runs on EU infrastructure (Hetzner and Scaleway). Data stays in EU jurisdiction. No US hyperscaler in the data path.
| Component | Infrastructure |
|---|---|
| Compute | Hetzner Cloud (Nuremberg / Helsinki) |
| Object storage | Scaleway S3 (Paris / Amsterdam) |
| Container registry | GitHub Container Registry |
CI/CD integration
Section titled “CI/CD integration”GitHub Actions
Section titled “GitHub Actions”name: Pipeline CI/CD
on: push: branches: [main] pull_request: branches: [main]
jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Radhflow run: npm install -g @radh/flow-cli - name: Validate pipeline run: rf validate --strict
run: needs: validate if: github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Radhflow run: npm install -g @radh/flow-cli - name: Run pipeline run: rf run env: API_KEY: ${{ secrets.API_KEY }}Use rf validate in CI to catch errors on every pull request. Use rf run in CD to execute the pipeline on merge to main.
Monitoring and observability
Section titled “Monitoring and observability”Execution logs
Section titled “Execution logs”Every rf run writes logs to .rf/runs/<run-id>/. Each run directory contains:
log.ndjson— timestamped execution eventssummary.json— node statuses, durations, row counts- Per-node artifacts in
nodes/<slug>/artifacts/
Health checks
Section titled “Health checks”In Docker or cloud deployments, the Radhflow container exposes a health endpoint:
curl http://localhost:8080/health# {"status":"ok","version":"0.3.0"}Alerting on node failures
Section titled “Alerting on node failures”When a node fails, the executor:
- Logs the error with stack trace to
.rf/runs/<run-id>/log.ndjson - Marks the node status as
errorinsummary.json - Halts downstream nodes that depend on the failed node
- On Radhflow Cloud: sends an alert via configured webhook or email
Check execution status programmatically:
rf inspect --run latest --format json