Skip to main content
fyrer is language-agnostic — it runs any shell command, so it works equally well with Rust, Go, TypeScript, Python, or any other toolchain. This guide walks through a realistic multi-language monorepo configuration inspired by the acme-corp example in the fyrer repository.

Example monorepo structure

Shared packages (ui, shared, core) are built first; the apps that depend on them are built after. fyrer’s dependency graph handles the ordering automatically.

Complete fyrer.yml

Below is the full configuration for the acme-corp example, annotated with comments explaining each package:
fyrer.yml
The watch: true flag is part of the fyrer config schema and is recognized by fyrer list and fyrer plan, but the file-watcher that triggers automatic task restarts is not yet implemented. Tasks with watch: true are treated as plain persistent tasks at runtime — they will not restart automatically when input files change.

Running the whole stack

On the first fyrer run build, all packages compile from scratch. On subsequent runs, only packages whose inputs have changed are rebuilt — the rest are restored from the local cache and reported as ⚡ Cached.

Cross-language dependencies

depends_on works across languages without any special configuration. In the example above:
  • worker:build (Go) depends on core:build (Go)
  • api:build (Rust) depends on shared:build (Rust)
  • web:build and web:dev (TypeScript) both depend on ui:build (TypeScript)
  • cli:serve (Python) depends on cli:bundle (Python)
fyrer doesn’t know or care what language a task uses — it resolves the dependency graph and runs each command in order. You can freely add cross-language dependencies the same way: just reference package:task in depends_on.

Per-package tool setup

Each package uses its own toolchain (bun, cargo, go, python3). fyrer does not install tools — it assumes every required binary is already available on your PATH when fyrer run is executed.
Install all required toolchains (Rust / Cargo, Go, Bun, Python 3, etc.) on your machine or CI runner before running fyrer. fyrer will fail with a command not found error for any package whose toolchain is missing.
Use fyrer list to verify that all packages and tasks are correctly detected after editing fyrer.yml. It’s a fast, read-only check that reports every package name and its available tasks without executing anything.