fyrer.yml flows from this two-level structure.
Packages
A package is a directory in your monorepo with a unique name and aroot path. It acts as the scope for a group of related tasks, environment variables, and an optional .env file.
Key rules:
- Each package must have a
namethat is unique across the entire config. rootmust be a relative path and must exist at the time fyrer is invoked.- Environment variables declared at the package level are inherited by every task in that package.
- An optional
env_file(relative toroot) is parsed and merged into the environment before task-level variables are applied.
Tasks
A task is a named command inside a package — thinkbuild, dev, lint, or test. Tasks are defined as a map under the package’s tasks key.
Key rules:
cmdis required. It is run viash -con Unix orcmd /Con Windows, so any shell syntax is valid.- Task names must be unique within a package (the same name can appear in different packages).
- Tasks can declare
inputs,outputs,depends_on,cache,persistent,watch,timeout,cwd, and per-taskenv/env_file. Note:watchis reserved for a future release — the flag is accepted in config but automatic file-watching is not yet active. - Per-task environment variables take the highest precedence in the environment resolution order.
Task specifiers
When runningfyrer run or fyrer plan, you tell fyrer which tasks to execute using a task specifier. Three forms are supported:
For example:
Package names and task names cannot contain spaces. Use simple identifiers such as
api, web, shared-ui, or build — anything you’d be comfortable using as a map key in YAML.
