Skip to content

Schema Reference ​

This page documents all available properties and types for the Taskfile schema version 3, based on the official JSON schema.

Root Schema ​

The root Taskfile schema defines the structure of your main Taskfile.yml.

version ​

  • Type: string or number
  • Required: Yes
  • Valid values: "3", 3, or any valid semver string
  • Description: Version of the Taskfile schema
yaml
version: '3'

output ​

  • Type: string or object
  • Default: interleaved
  • Options: interleaved, group, prefixed
  • Description: Controls how task output is displayed
yaml
# Simple string format
output: group

# Advanced object format
output:
  group:
    begin: "::group::{{.TASK}}"
    end: "::endgroup::"
    error_only: false

method ​

  • Type: string
  • Default: checksum
  • Options: checksum, timestamp, none
  • Description: Default method for checking if tasks are up-to-date
yaml
method: timestamp

includes ​

  • Type: map[string]Include
  • Description: Include other Taskfiles
yaml
includes:
  # Simple string format
  docs: ./Taskfile.yml

  # Full object format
  backend:
    taskfile: ./backend
    dir: ./backend
    optional: false
    flatten: false
    internal: false
    aliases: [api]
    excludes: [internal-task]
    vars:
      SERVICE_NAME: backend
    checksum: abc123...

vars ​

  • Type: map[string]Variable
  • Description: Global variables available to all tasks
yaml
vars:
  # Simple values
  APP_NAME: myapp
  VERSION: 1.0.0
  DEBUG: true
  PORT: 8080
  FEATURES: [auth, logging]

  # Dynamic variables
  COMMIT_HASH:
    sh: git rev-parse HEAD

  # Variable references
  BUILD_VERSION:
    ref: VERSION

  # Map variables
  CONFIG:
    map:
      database: postgres
      cache: redis

env ​

  • Type: map[string]Variable
  • Description: Global environment variables
yaml
env:
  NODE_ENV: production
  DATABASE_URL:
    sh: echo $DATABASE_URL

tasks ​

  • Type: map[string]Task
  • Description: Task definitions
yaml
tasks:
  # Simple string format
  hello: echo "Hello World"

  # Array format
  build:
    - go mod tidy
    - go build ./...

  # Full object format
  deploy:
    desc: Deploy the application
    cmds:
      - ./scripts/deploy.sh

silent ​

  • Type: bool
  • Default: false
  • Description: Suppress task name and command output by default
yaml
silent: true

dotenv ​

  • Type: []string
  • Description: Load environment variables from .env files
yaml
dotenv:
  - .env
  - .env.local

run ​

  • Type: string
  • Default: always
  • Options: always, once, when_changed
  • Description: Default execution behavior for tasks
yaml
run: once

interval ​

  • Type: string
  • Default: 100ms
  • Pattern: ^[0-9]+(?:m|s|ms)$
  • Description: Watch interval for file changes
yaml
interval: 1s

set ​

  • Type: []string
  • Options: allexport, a, errexit, e, noexec, n, noglob, f, nounset, u, xtrace, x, pipefail
  • Description: POSIX shell options for all commands
yaml
set: [errexit, nounset, pipefail]

shopt ​

  • Type: []string
  • Options: expand_aliases, globstar, nullglob
  • Description: Bash shell options for all commands
yaml
shopt: [globstar]

Include ​

Configuration for including external Taskfiles.

taskfile ​

  • Type: string
  • Required: Yes
  • Description: Path to the Taskfile or directory to include
yaml
includes:
  backend: ./backend/Taskfile.yml
  # Shorthand for above
  frontend: ./frontend

dir ​

  • Type: string
  • Description: Working directory for included tasks
yaml
includes:
  api:
    taskfile: ./api
    dir: ./api

optional ​

  • Type: bool
  • Default: false
  • Description: Don't error if the included file doesn't exist
yaml
includes:
  optional-tasks:
    taskfile: ./optional.yml
    optional: true

flatten ​

  • Type: bool
  • Default: false
  • Description: Include tasks without namespace prefix
yaml
includes:
  common:
    taskfile: ./common.yml
    flatten: true

internal ​

  • Type: bool
  • Default: false
  • Description: Hide included tasks from command line and --list
yaml
includes:
  internal:
    taskfile: ./internal.yml
    internal: true

aliases ​

  • Type: []string
  • Description: Alternative names for the namespace
yaml
includes:
  database:
    taskfile: ./db.yml
    aliases: [db, data]

excludes ​

  • Type: []string
  • Description: Tasks to exclude from inclusion
yaml
includes:
  shared:
    taskfile: ./shared.yml
    excludes: [internal-setup, debug-only]

vars ​

  • Type: map[string]Variable
  • Description: Variables to pass to the included Taskfile
yaml
includes:
  deploy:
    taskfile: ./deploy.yml
    vars:
      ENVIRONMENT: production

checksum ​

  • Type: string
  • Description: Expected checksum of the included file
yaml
includes:
  remote:
    taskfile: https://example.com/tasks.yml
    checksum: c153e97e0b3a998a7ed2e61064c6ddaddd0de0c525feefd6bba8569827d8efe9

Variable ​

Variables support multiple types and can be static values, dynamic commands, references, or maps.

Static Variables ​

yaml
vars:
  # String
  APP_NAME: myapp
  # Number
  PORT: 8080
  # Boolean
  DEBUG: true
  # Array
  FEATURES: [auth, logging, metrics]
  # Null
  OPTIONAL_VAR: null

Dynamic Variables (sh) ​

yaml
vars:
  COMMIT_HASH:
    sh: git rev-parse HEAD
  BUILD_TIME:
    sh: date -u +"%Y-%m-%dT%H:%M:%SZ"

Variable References (ref) ​

yaml
vars:
  BASE_VERSION: 1.0.0
  FULL_VERSION:
    ref: BASE_VERSION

Map Variables (map) ​

yaml
vars:
  CONFIG:
    map:
      database:
        host: localhost
        port: 5432
      cache:
        type: redis
        ttl: 3600

Variable Ordering ​

Variables can reference previously defined variables:

yaml
vars:
  GREETING: Hello
  TARGET: World
  MESSAGE: '{{.GREETING}} {{.TARGET}}!'

Task ​

Individual task configuration with multiple syntax options.

Simple Task Formats ​

yaml
tasks:
  # String command
  hello: echo "Hello World"

  # Array of commands
  build:
    - go mod tidy
    - go build ./...

  # Object with cmd shorthand
  test:
    cmd: go test ./...

Task Properties ​

cmds ​

  • Type: []Command
  • Description: Commands to execute
yaml
tasks:
  build:
    cmds:
      - go build ./...
      - echo "Build complete"

cmd ​

  • Type: string
  • Description: Single command (alternative to cmds)
yaml
tasks:
  test:
    cmd: go test ./...

deps ​

  • Type: []Dependency
  • Description: Tasks to run before this task
yaml
tasks:
  # Simple dependencies
  deploy:
    deps: [build, test]
    cmds:
      - ./deploy.sh

  # Dependencies with variables
  advanced-deploy:
    deps:
      - task: build
        vars:
          ENVIRONMENT: production
      - task: test
        vars:
          COVERAGE: true
    cmds:
      - ./deploy.sh

  # Silent dependencies
  main:
    deps:
      - task: setup
        silent: true
    cmds:
      - echo "Main task"

  # Loop dependencies
  test-all:
    deps:
      - for: [unit, integration, e2e]
        task: test
        vars:
          TEST_TYPE: '{{.ITEM}}'
    cmds:
      - echo "All tests completed"

desc ​

  • Type: string
  • Description: Short description shown in --list
yaml
tasks:
  test:
    desc: Run unit tests
    cmds:
      - go test ./...

summary ​

  • Type: string
  • Description: Detailed description shown in --summary
yaml
tasks:
  deploy:
    desc: Deploy to production
    summary: |
      Deploy the application to production environment.
      This includes building, testing, and uploading artifacts.

prompt ​

  • Type: string or []string
  • Description: Prompts shown before task execution
yaml
tasks:
  deploy:
    prompt: "Deploy to production?"
    # or multiple prompts
    prompt:
      - "Are you sure?"
      - "This will affect live users!"

aliases ​

  • Type: []string
  • Description: Alternative names for the task
yaml
tasks:
  build:
    aliases: [compile, make]
    cmds:
      - go build ./...

sources ​

  • Type: []string or []Glob
  • Description: Source files to monitor for changes
yaml
tasks:
  build:
    sources:
      - '**/*.go'
      - go.mod
      # With exclusions
      - exclude: '**/*_test.go'
    cmds:
      - go build ./...

generates ​

  • Type: []string or []Glob
  • Description: Files generated by this task
yaml
tasks:
  build:
    sources: ['**/*.go']
    generates:
      - './app'
      - exclude: '*.debug'
    cmds:
      - go build -o app ./cmd

status ​

  • Type: []string
  • Description: Commands to check if task should run
yaml
tasks:
  install-deps:
    status:
      - test -f node_modules/.installed
    cmds:
      - npm install
      - touch node_modules/.installed

preconditions ​

  • Type: []Precondition
  • Description: Conditions that must be met before running
yaml
tasks:
  # Simple precondition (shorthand)
  build:
    preconditions:
      - test -f ./src
    cmds:
      - go build ./...

  # Preconditions with custom messages
  deploy:
    preconditions:
      - sh: test -n "$API_KEY"
        msg: 'API_KEY environment variable is required'
      - sh: test -f ./app
        msg: "Application binary not found. Run 'task build' first."
    cmds:
      - ./deploy.sh

requires ​

  • Type: Requires
  • Description: Required variables with optional enums
yaml
tasks:
  # Simple requirements
  deploy:
    requires:
      vars: [API_KEY, ENVIRONMENT]
    cmds:
      - ./deploy.sh

  # Requirements with enum validation
  advanced-deploy:
    requires:
      vars:
        - API_KEY
        - name: ENVIRONMENT
          enum: [development, staging, production]
        - name: LOG_LEVEL
          enum: [debug, info, warn, error]
    cmds:
      - echo "Deploying to {{.ENVIRONMENT}} with log level {{.LOG_LEVEL}}"
      - ./deploy.sh

watch ​

  • Type: bool
  • Default: false
  • Description: Automatically run task in watch mode
yaml
tasks:
  dev:
    watch: true
    cmds:
      - npm run dev

platforms ​

  • Type: []string
  • Description: Platforms where this task should run
yaml
tasks:
  windows-build:
    platforms: [windows]
    cmds:
      - go build -o app.exe ./cmd

  unix-build:
    platforms: [linux, darwin]
    cmds:
      - go build -o app ./cmd

Command ​

Individual command configuration within a task.

Basic Commands ​

yaml
tasks:
  example:
    cmds:
      - echo "Simple command"
      - ls -la

Command Object ​

yaml
tasks:
  example:
    cmds:
      - cmd: echo "Hello World"
        silent: true
        ignore_error: false
        platforms: [linux, darwin]
        set: [errexit]
        shopt: [globstar]

Task References ​

yaml
tasks:
  example:
    cmds:
      - task: other-task
        vars:
          PARAM: value
        silent: false

Deferred Commands ​

yaml
tasks:
  with-cleanup:
    cmds:
      - echo "Starting work"
      # Deferred command string
      - defer: echo "Cleaning up"
      # Deferred task reference
      - defer:
          task: cleanup-task
          vars:
            CLEANUP_MODE: full

For Loops ​

Loop Over List ​

yaml
tasks:
  greet-all:
    cmds:
      - for: [alice, bob, charlie]
        cmd: echo "Hello {{.ITEM}}"

Loop Over Sources/Generates ​

yaml
tasks:
  process-files:
    sources: ['*.txt']
    cmds:
      - for: sources
        cmd: wc -l {{.ITEM}}
      - for: generates
        cmd: gzip {{.ITEM}}

Loop Over Variable ​

yaml
tasks:
  process-items:
    vars:
      ITEMS: 'item1,item2,item3'
    cmds:
      - for:
          var: ITEMS
          split: ','
          as: CURRENT
        cmd: echo "Processing {{.CURRENT}}"

Loop Over Matrix ​

yaml
tasks:
  test-matrix:
    cmds:
      - for:
          matrix:
            OS: [linux, windows, darwin]
            ARCH: [amd64, arm64]
        cmd: echo "Testing {{.OS}}/{{.ARCH}}"

Loop in Dependencies ​

yaml
tasks:
  build-all:
    deps:
      - for: [frontend, backend, worker]
        task: build
        vars:
          SERVICE: '{{.ITEM}}'

Shell Options ​

Set Options ​

Available set options for POSIX shell features:

  • allexport / a - Export all variables
  • errexit / e - Exit on error
  • noexec / n - Read commands but don't execute
  • noglob / f - Disable pathname expansion
  • nounset / u - Error on undefined variables
  • xtrace / x - Print commands before execution
  • pipefail - Pipe failures propagate
yaml
# Global level
set: [errexit, nounset, pipefail]

tasks:
  debug:
    # Task level
    set: [xtrace]
    cmds:
      - cmd: echo "This will be traced"
        # Command level
        set: [noexec]

Shopt Options ​

Available shopt options for Bash features:

  • expand_aliases - Enable alias expansion
  • globstar - Enable ** recursive globbing
  • nullglob - Null glob expansion
yaml
# Global level
shopt: [globstar]

tasks:
  find-files:
    # Task level
    shopt: [nullglob]
    cmds:
      - cmd: ls **/*.go
        # Command level
        shopt: [globstar]