Trill

Quick Start

Get a workflow running in under 2 minutes.

Your First Workflow

Create a file called ci.yaml:

jobs:
  greet:
    steps:
      - name: hello
        run: echo "Hello from trill!"

Run it:

trill run ci.yaml

You should see the TUI light up with your job running — jobs with multiple steps show their steps indented under the job in the tree. When a job finishes, you’ll get a success summary. If you’re piping output or running non-interactively, you’ll get plain text instead.

Add Parallel Jobs

Jobs run in parallel by default. Add a few more:

jobs:
  lint:
    steps:
      - name: check
        run: echo "Linting..." && sleep 1

  test:
    steps:
      - name: run
        run: echo "Testing..." && sleep 2

  build:
    steps:
      - name: compile
        run: echo "Building..." && sleep 1

All three jobs start at the same time. The workflow finishes when the slowest job completes.

Add Dependencies

Use depends_on to control execution order:

jobs:
  setup:
    steps:
      - name: install
        run: echo "Installing dependencies..."

  lint:
    depends_on: [setup]
    steps:
      - name: check
        run: echo "Linting..."

  test:
    depends_on: [setup]
    steps:
      - name: run
        run: echo "Running tests..."

  deploy:
    depends_on: [lint, test]
    steps:
      - name: ship
        run: echo "Deploying..."

This creates a diamond dependency graph:

    setup
    /    \
  lint   test
    \    /
    deploy

lint and test run in parallel after setup. deploy waits for both to finish.

Validate Without Running

Check your workflow for errors without executing it:

trill validate ci.yaml

This catches missing fields, unknown dependencies, and dependency cycles.

See the Execution Plan

Preview what would run:

trill run ci.yaml --dry-run

Shows the execution order, step commands, and any template expressions that will be resolved at runtime.

Next Steps