Quick Start: Orchestrate Monorepo Tasks with fyrer
This guide walks you through installing fyrer, writing your first fyrer.yml, and running concurrent builds and dev servers across a multi-package monorepo — from zero to a fully cached, dependency-aware task graph in minutes.
Install fyrer
Install the fyrer binary — pick any method from the Installation page:
# via install script (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/07calc/fyrer/main/install.sh | sh
# via cargo
cargo install fyrer
Once installed, run fyrer --version to confirm it's on your $PATH. You should see fyrer 0.5.0.
Create your fyrer.yml
Create a fyrer.yml file in your monorepo root. This single file describes every package, its tasks, dependencies, and caching behaviour. Here's a complete example with three packages — a shared UI library, a Rust API, and a Bun web frontend:
version: 1
cache:
provider: local
env:
NODE_ENV: development
packages:
- name: ui
root: ./packages/ui
tasks:
build:
cmd: bun build src/index.ts --outdir dist
inputs:
- src/**
outputs:
- dist/**
ignore:
- node_modules/**
cache: true
- name: api
root: ./apps/api
env_file: .env
tasks:
build:
cmd: cargo build --release
inputs:
- src/**
- Cargo.toml
outputs:
- target/release/api
ignore:
- target/**
cache: true
dev:
cmd: cargo run
depends_on:
- api:build
cache: false
persistent: true
- name: web
root: ./apps/web
env:
PORT: "3000"
env_file: .env
tasks:
dev:
cmd: bun --watch src/index.ts
depends_on:
- ui:build
cache: false
persistent: true
build:
cmd: bun build src/index.ts --outdir dist
depends_on:
- ui:build
inputs:
- src/**
outputs:
- dist/**
ignore:
- node_modules/**
cache: true
A few things to notice in this config:
cache: trueon everybuildtask — fyrer hashes allinputsand skips the task on future runs when nothing has changed.depends_onwires the graph:api:devwaits forapi:build, and bothweb:devandweb:buildwait forui:buildto finish first.persistent: truemarks long-running dev servers; fyrer keeps them alive until you quit.- Root-level
envsetsNODE_ENVfor every task, whileenvandenv_fileon individual packages override or extend it as needed.
List available tasks
Inspect every package and task fyrer can see:
fyrer list
Example output:
ui build
api build
api dev
web dev
web build
Preview the execution plan
Before running anything, print the topological execution plan to verify that dependency ordering looks correct:
fyrer plan build
fyrer resolves the full dependency graph and prints levels (for display only — execution is streaming) in the order tasks will become runnable. This is especially useful when wiring up a new depends_on relationship and you want to confirm the order is right.
Run your build
Execute the build task across every package:
fyrer run build
fyrer resolves the dependency graph, runs tasks in streaming order as soon as dependencies finish (up to the concurrency limit), and streams every task's output through the TUI. On the second run, if no input files have changed, each task is reported as ⚡ Cached and completes instantly — no recompilation needed.
Start dev servers
Boot all dev servers at once:
fyrer run dev
Tasks marked persistent: true stay alive and keep streaming logs until you press q or Ctrl+C. The TUI shows all running tasks on the left and the selected task's log output on the right — use the keyboard shortcuts below to navigate between them.
TUI Controls
When fyrer run opens the full-screen TUI, the following keys are available:
| Key | Action |
|---|---|
q / Ctrl+C | Quit (kills all spawned process groups) |
j / k or ↑ / ↓ | Select previous / next task |
u / d or PageUp / PageDown | Scroll the log pane |
g / G | Jump to top / tail (follow) |
r | Restart the selected task |
K (Shift+k) | Kill the selected task |
| Mouse wheel | Scroll the log |
Enter | Browse task logs after run finishes |
Pass the -n flag (--no-tui) to get plain, prefixed, colorized log output
instead of the interactive TUI — perfect for CI pipelines and log aggregators:
fyrer run build -n
Now that you have fyrer running, explore the Configuration reference to
learn all available options — including per-task env and env_file
overrides, timeout, cwd, watch mode, and the full caching model.