Packages and Tasks: The Core of fyrer Configuration
fyrer's configuration is organized around two core concepts: packages — the subdirectories that make up your monorepo — and tasks — the named commands to run inside each package. Everything in fyrer.yml flows from this two-level structure.
Packages
A package is a directory in your monorepo with a unique name and a root 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.
Here is a minimal package declaration:
packages:
- name: api
root: ./apps/api
env:
RUST_LOG: debug
env_file: .env
tasks:
build:
cmd: cargo build --release
cache: true
Tasks
A task is a named command inside a package — think build, 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.watch: truetasks are polled every 300ms and restarted oninputschanges (debounced 300ms). - Per-task environment variables take the highest precedence in the environment resolution order.
Task specifiers
When running fyrer run or fyrer plan, you tell fyrer which tasks to execute using a task specifier. Three forms are supported:
| Specifier | Meaning |
|---|---|
| (empty) | Every task in every package |
build | The build task in every package that has one |
web:dev | Exactly the dev task in the web package |
For example:
fyrer run # run everything
fyrer run build # build all packages
fyrer run web:dev # start only the web dev server
fyrer plan web:dev # preview the execution plan without running
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.