Introduction
Arrow is a command-line toolkit designed for the speed and composability of modern development. It unifies scaffolding, building, testing, and deployment into a single predictable interface.
Overview
Most CLI tools in the JavaScript ecosystem solve one problem well but compose poorly. Arrow treats the command line as a first-class interface for the entire development lifecycle. Whether you are spinning up a prototype or shipping production infrastructure, Arrow provides a consistent grammar for every operation.
At its core, Arrow is built around three primitives: projects, tasks, and pipelines. A project defines what you are building. Tasks are the operations you run. Pipelines chain tasks together into repeatable workflows.
export default defineConfig({
project: 'my-app',
tasks: {
lint: { command: 'eslint src/' },
test: { command: 'vitest run' },
build: { command: 'vite build' },
},
pipelines: {
ci: ['lint', 'test', 'build'],
},
})Philosophy
Convention over configuration
Arrow ships with sensible defaults so most projects need zero configuration. When you need to customize, the configuration is minimal and explicit.
Composability
Every task is a standalone unit. Combine, chain, and reuse them across projects without duplicating boilerplate.
Observability
Arrow surfaces timing, cache hits, and dependency graphs so you always know what is happening and why it is taking time.
Core concepts
- Project
- The root unit of work. A project has a name, a directory, and a set of tasks and pipelines.
- Task
- A discrete operation like linting, testing, or building. Tasks declare inputs and outputs so Arrow can cache and parallelize them.
- Pipeline
- An ordered sequence of tasks. Pipelines can depend on other pipelines, forming a directed acyclic graph of work.
- Plugin
- A package that extends Arrow with new tasks, templates, or configuration schemas. Plugins are versioned and installed from npm.
How it compares
| Feature | Arrow | npm scripts | Make |
|---|---|---|---|
| Caching | Built-in | Manual | None |
| Parallel execution | Automatic | None | Limited |
| Cross-platform | Yes | Shell dependent | No |
| Plugin ecosystem | Rich | None | None |