hof / flow

hof/flow is a data and task engine with automatic dependency detection powered by cue/flow. It has more task types and capabilities.

hof flow -h

run file(s) through the hof/flow DAG engine

Use hof/flow to transform data, call APIs, work with DBs,
read and write files, call any program, handle events,
and much more.

'hof flow' is very similar to 'cue cmd' and built on the same flow engine.
Tasks and dependencies are inferred.
Hof flow has a slightly different interface and more task types.

Docs: https://docs.hofstadter.io/data-flow



  call: {
    req: { ... }
    resp: {
      statusCode: 200
      body: string

  print: {
    test: call.resp

  cue entrypoints are the same as the cue cli
  @path/name  is shorthand for -f / --flow should match the @flow(path/name)
  +key=value  is shorthand for -t / --tags and are the same as CUE injection tags

  arguments can be in any order and mixed

@flow() indicates a flow entrypoint
  you can have many in a file or nested values
  you can run one or many with the -f flag

@task() represents a unit of work in the flow dag
  intertask dependencies are autodetected and run appropriately
  hof/flow provides many built in task types
  you can reuse, combine, and share as CUE modules, packages, and values

  hof flow [cue files...] [@flow/name...] [+key=value] [flags]

  flow, f

  -d, --docs           print pipeline docs
  -f, --flow strings   flow labels to match and run
  -h, --help           help for flow
  -l, --list           list available pipelines
      --progress       print task progress as it happens
  -s, --stats          Print final task statistics
  -t, --tags strings   data tags to inject before run

Global Flags:
  -p, --package string   the Cue package context to use during execution
  -q, --quiet            turn off output and assume defaults at prompts
  -v, --verbose int      set the verbosity of output

args & flags

hof/flow accepts CUE entrypoints like the other commands. There is CLI sugar for

  • flows: @path/name is sugar for -f path/name
  • tags: +key=value is sugar for -t key=value


  • -f/@ is used to select a flow by name in @flow(<name>)
  • -t/+ is used to inject strings into tags @tag(<name>)
  • -l/--list prints the list of discovered flows
  • -d/--docs prints additional flow details and docs
  • --progress will print task progress for the events found, pre, & post
  • --stats will print task times and dependencies at completion