Getting Started

This guide walks you through creating your first arrow project and running a simple pipeline. By the end, you'll have a working development workflow defined as code.

1. Create a Project

Use arrow init to scaffold a new project with a default configuration:

terminal
$ arrow init my-app
Created project "my-app"
arrow.yaml
src/
pipelines/
 
$ cd my-app

This creates a minimal project structure with an arrow.yaml config file, a src/ directory for your code, and a pipelines/ directory for reusable pipeline files.

2. Define a Pipeline

Open arrow.yaml in your editor. It starts with a default pipeline. Let's customize it:

yaml
version: "1"

project:
  name: my-app
  language: node

pipelines:
  build:
    steps:
      - name: install
        run: npm install
      - name: lint
        run: npm run lint
        needs: [install]
      - name: test
        run: npm run test
        needs: [install]
      - name: build
        run: npm run build
        needs: [lint, test]

Each step has a name, a run command, and optional needs dependencies. Steps without needs run in parallel.

3. Run the Pipeline

Now run the build pipeline:

arrow-session
$ arrow run build
[1/4] install
(1/4) install ..... done (3.2s)
[2/4] lint
[3/4] test
(2/4) lint ....... done (0.8s)
(3/4) test ....... done (1.1s)
[4/4] build
(4/4) build ...... done (2.4s)
Completed in 4.7s

Notice that lint and test ran in parallel - they both depend on install but not on each other. arrow resolves the dependency graph automatically.

4. Re-run with Caching

Run the pipeline again without changing any files:

arrow-session
$ arrow run build
(1/4) install ..... cached (3.2s)
(2/4) lint ....... cached (0.8s)
(3/4) test ....... cached (1.1s)
(4/4) build ...... cached (2.4s)
Completed in 0.12s

arrow caches the output of every step based on file content hashes. When nothing changed, the pipeline completes in milliseconds.

Caching is content-aware: if you modify source files, only the affected steps and their dependents are re-executed. The cache lives in .arrow/cache in your project directory.

5. What's Next?