Overview

Rune is a script runner for JavaScript and TypeScript monorepos. Commands are declared once in a rune.config.ts at the repository root. Each package's package.json references a command by name, so changing a flag is one edit at the root instead of one edit per package.

The four pieces

PieceWhat it does
rune.config.tsDeclares every script. TypeScript, evaluated by an embedded engine
The resolverPicks the right definition for the package you are in, applies inheritance, layers the environment
The runnerSpawns the command through the platform shell, hands it the terminal, and reports its exit code
The cacheStores the resolved config keyed by the content of its whole import graph

Scope

Rune is a script registry and a runner. Within one package it can order scripts, run them side by side, retry them and time them out. It does not do the things a build system does:

Not in RuneWhy
Task result cachingRune has no model of a task's inputs or outputs. It caches only its own resolved config
Ordering across packagesRune reads no dependency graph between packages
Remote executionOut of scope
Watch modeThe tool being run already has one

A repository that needs those keeps the build system it already has, and points it at Rune. The setup for that is on Turborepo and Nx.

Reading order

Reference

The config reference covers every field a script entry accepts. The CLI reference covers every command and flag. Exit codes is the page to read before wiring Rune into CI.