What is a persistent task?
Settingpersistent: true on a task marks it as long-running. fyrer keeps it alive until you explicitly quit — unlike normal tasks, persistent tasks never exit on their own. This makes them the right choice for dev servers, watchers, and any other process you want running in the background while you work.
Basic dev server setup
The example below shows a typical frontend + backend monorepo.ui:build is a normal cacheable task that must finish before web:dev starts; api:dev runs independently.
fyrer.yml
Starting all dev servers
Run thedev task across every package that defines one:
ui:build first, and then launches web:dev and api:dev concurrently once their prerequisites are satisfied.
Dependency ordering with persistent tasks
fyrer executes the task graph level by level — all tasks at the same graph level run concurrently, and a level must complete before the next one starts. Because persistent tasks never exit, they block all later graph levels. This means:- If
web:devandapi:devhave no dependencies between them, they occupy the same graph level and start concurrently. ✅ - If any task lists a persistent task in its
depends_on, that task will wait forever and never start. ❌
TUI navigation
While dev servers are running, fyrer’s interactive TUI lets you inspect each one:Plain mode for scripts
To run dev servers without the TUI — for example inside a terminal multiplexer or a script — pass the-n flag:
[package:task] and colorized by package, making it easy to tell servers apart in a shared terminal session.
