The config file
Rune reads one file: rune.config.ts. It is TypeScript, it default-exports an object with a
scripts map, and it may import other files in the repository.
defineConfig is an identity function that supplies the types. A config that exports the object
literal directly behaves identically and loses editor autocomplete.
Discovery
Rune walks up from the working directory looking for rune.config.ts, and stops at the first
directory containing a .git entry or at the filesystem root.
The boundary matters. Without it, a run from a scratch directory keeps walking and picks up an unrelated config from somewhere else on the machine, and the result depends on whose machine it is.
Two directories come out of that walk:
When no config is found:
The default export
The export is an object with one key.
Script names are arbitrary strings. rune list prints them sorted, so the order in the file has no
effect on output.
A missing default export, or one that is not an object, is an error naming the file.
Package-level configs
A package may hold its own rune.config.ts. Rune uses the nearest one, and a script defined there
may extend a root script but never replace it. See
Inheritance and overrides.
Sections
Every field a script entry accepts, and which combinations are legal.
Inheritance and overridesextends, appendArgs, and the rule that an override may only sharpen.
Environmentenv, envFile, PATH augmentation, and the precedence between them.
Groupsserial and parallel members, dependsOn, and the success policy.
Timeouts and retriestimeout, retries, retryDelay, killSignal and killTimeout.
Config evaluationWhat the config file may import and call, and how results are cached.