Configuring Packages in fyrer.yml: A Full Reference
Each entry in the packages list represents one directory of your monorepo. A package groups related tasks and gives them a shared name, root path, and environment. Tasks within the same package can reference each other by their bare name, while tasks in other packages are referenced as package:task.
Package fields
namestringrequiredUnique name for the package. Used in task specifiers like web:dev and as the prefix in log output.
rootstringrequiredRelative path from the fyrer.yml directory to the package root. Must exist. Cannot be absolute.
envmap<string, string>Environment variables applied to all tasks in this package. Takes precedence over root-level env.
env_filestringPath to a .env file, relative to the package root. Loaded for all tasks in this package.
tasksmap<string, TaskConfig>Map of task name → task configuration. See the Tasks reference.
Example
The following snippet is drawn from the acme-corp example and shows four packages across multiple languages:
packages:
# TypeScript / Bun — shared UI library
- name: ui
root: ./packages/ui
env:
NODE_ENV: production
env_file: .env
tasks:
build:
cmd: bun build src/index.ts --outdir dist
inputs:
- src/**
- package.json
- tsconfig.json
outputs:
- dist/**
ignore:
- node_modules/**
cache: true
# TypeScript / Bun — web application
- name: web
root: ./apps/web
env:
PORT: "3000"
API_URL: http://localhost:8080
env_file: .env
tasks:
dev:
cmd: bun --watch src/index.ts
depends_on:
- ui:build
persistent: true
# Rust / Cargo — API server
- name: api
root: ./apps/api
env_file: .env
tasks:
dev:
cmd: cargo run
depends_on:
- shared:build
persistent: true
# Go — background worker
- name: worker
root: ./apps/worker
env:
ADDR: ":9000"
tasks:
build:
cmd: go build -o bin/worker .
depends_on:
- core:build
outputs:
- bin/worker
cache: true
Validation rules
- Package names must be unique across the entire
packageslist. rootmust be a relative path — absolute paths are rejected.rootmust exist on disk at the time fyrer starts.env_filemust be relative and must exist on disk at the time fyrer starts.
Use short, lowercase package names (e.g., api, web, ui) — they appear in log prefixes and task specifiers like web:dev.