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
ornumber
- Required: Yes
- Valid values:
"3"
,3
, or any valid semver string - Description: Version of the Taskfile schema
yaml
version: '3'
output
​
- Type:
string
orobject
- 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 variableserrexit
/e
- Exit on errornoexec
/n
- Read commands but don't executenoglob
/f
- Disable pathname expansionnounset
/u
- Error on undefined variablesxtrace
/x
- Print commands before executionpipefail
- 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 expansionglobstar
- Enable**
recursive globbingnullglob
- Null glob expansion
yaml
# Global level
shopt: [globstar]
tasks:
find-files:
# Task level
shopt: [nullglob]
cmds:
- cmd: ls **/*.go
# Command level
shopt: [globstar]