Taskfile 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:
stringornumber - Required: Yes
- Valid values:
"3",3, or any valid semver string - Description: Version of the Taskfile schema
version: '3'output ​
- Type:
stringorobject - Default:
interleaved - Options:
interleaved,group,prefixed - Description: Controls how task output is displayed
# Simple string format
output: group
# Advanced object format
output:
group:
begin: "::group::{{.TASK}}"
end: "::endgroup::"
error_only: falsemethod ​
- Type:
string - Default:
checksum - Options:
checksum,timestamp,none - Description: Default method for checking if tasks are up-to-date
method: timestampincludes ​
- Type:
map[string]Include - Description: Include other Taskfiles
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
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: redisenv ​
- Type:
map[string]Variable - Description: Global environment variables
env:
NODE_ENV: production
DATABASE_URL:
sh: echo $DATABASE_URLtasks ​
- Type:
map[string]Task - Description: Task definitions
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.shsilent ​
- Type:
bool - Default:
false - Description: Suppress task name and command output by default
silent: truedotenv ​
- Type:
[]string - Description: Load environment variables from .env files. When the same variable is defined in multiple files, the first file in the list takes precedence.
dotenv:
- .env.local # Highest priority
- .env # Lowest priorityrun ​
- Type:
string - Default:
always - Options:
always,once,when_changed - Description: Default execution behavior for tasks
run: onceinterval ​
- Type:
string - Default:
100ms - Pattern:
^[0-9]+(?:m|s|ms)$ - Description: Watch interval for file changes
interval: 1sset ​
- Type:
[]string - Options:
allexport,a,errexit,e,noexec,n,noglob,f,nounset,u,xtrace,x,pipefail - Description: POSIX shell options for all commands
set: [errexit, nounset, pipefail]shopt ​
- Type:
[]string - Options:
expand_aliases,globstar,nullglob - Description: Bash shell options for all commands
shopt: [globstar]Include ​
Configuration for including external Taskfiles.
taskfile ​
- Type:
string - Required: Yes
- Description: Path to the Taskfile or directory to include
includes:
backend: ./backend/Taskfile.yml
# Shorthand for above
frontend: ./frontenddir ​
- Type:
string - Description: Working directory for included tasks
includes:
api:
taskfile: ./api
dir: ./apioptional ​
- Type:
bool - Default:
false - Description: Don't error if the included file doesn't exist
includes:
optional-tasks:
taskfile: ./optional.yml
optional: trueflatten ​
- Type:
bool - Default:
false - Description: Include tasks without namespace prefix
includes:
common:
taskfile: ./common.yml
flatten: trueinternal ​
- Type:
bool - Default:
false - Description: Hide included tasks from command line and
--list
includes:
internal:
taskfile: ./internal.yml
internal: truealiases ​
- Type:
[]string - Description: Alternative names for the namespace
includes:
database:
taskfile: ./db.yml
aliases: [db, data]excludes ​
- Type:
[]string - Description: Tasks to exclude from inclusion
includes:
shared:
taskfile: ./shared.yml
excludes: [internal-setup, debug-only]vars ​
- Type:
map[string]Variable - Description: Variables to pass to the included Taskfile
includes:
deploy:
taskfile: ./deploy.yml
vars:
ENVIRONMENT: productionchecksum ​
- Type:
string - Description: Expected checksum of the included file
includes:
remote:
taskfile: https://example.com/tasks.yml
checksum: c153e97e0b3a998a7ed2e61064c6ddaddd0de0c525feefd6bba8569827d8efe9Variable ​
Variables support multiple types and can be static values, dynamic commands, references, or maps.
Static Variables ​
vars:
# String
APP_NAME: myapp
# Number
PORT: 8080
# Boolean
DEBUG: true
# Array
FEATURES: [auth, logging, metrics]
# Null
OPTIONAL_VAR: nullDynamic Variables (sh) ​
vars:
COMMIT_HASH:
sh: git rev-parse HEAD
BUILD_TIME:
sh: date -u +"%Y-%m-%dT%H:%M:%SZ"Variable References (ref) ​
vars:
BASE_VERSION: 1.0.0
FULL_VERSION:
ref: .BASE_VERSIONMap Variables (map) ​
vars:
CONFIG:
map:
database:
host: localhost
port: 5432
cache:
type: redis
ttl: 3600Variable Ordering ​
Variables can reference previously defined variables:
vars:
GREETING: Hello
TARGET: World
MESSAGE: '{{.GREETING}} {{.TARGET}}!'Task ​
Individual task configuration with multiple syntax options.
Simple Task Formats ​
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
tasks:
build:
cmds:
- go build ./...
- echo "Build complete"cmd ​
- Type:
string - Description: Single command (alternative to
cmds)
tasks:
test:
cmd: go test ./...deps ​
- Type:
[]Dependency - Description: Tasks to run before this task
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
tasks:
test:
desc: Run unit tests
cmds:
- go test ./...summary ​
- Type:
string - Description: Detailed description shown in
--summary
tasks:
deploy:
desc: Deploy to production
summary: |
Deploy the application to production environment.
This includes building, testing, and uploading artifacts.prompt ​
- Type:
stringor[]string - Description: Prompts shown before task execution
tasks:
# Single prompt
deploy:
prompt: "Deploy to production?"
cmds:
- ./deploy.sh
# Multiple prompts
deploy-multi:
prompt:
- "Are you sure?"
- "This will affect live users!"
cmds:
- ./deploy.shaliases ​
- Type:
[]string - Description: Alternative names for the task
tasks:
build:
aliases: [compile, make]
cmds:
- go build ./...method ​
- Type:
string - Default:
checksum - Options:
checksum,timestamp,none - Description: Method for checking if the task is up-to-date. Refer to the
methodroot property for details.
tasks:
build:
sources:
- go.mod
method: timestampsources ​
- Type:
[]stringor[]Glob - Description: Source files to monitor for changes
tasks:
build:
sources:
- '**/*.go'
- go.mod
# With exclusions
- exclude: '**/*_test.go'
cmds:
- go build ./...generates ​
- Type:
[]stringor[]Glob - Description: Files generated by this task
tasks:
build:
sources: ['**/*.go']
generates:
- './app'
- exclude: '*.debug'
cmds:
- go build -o app ./cmdstatus ​
- Type:
[]string - Description: Commands to check if task should run
tasks:
install-deps:
status:
- test -f node_modules/.installed
cmds:
- npm install
- touch node_modules/.installedpreconditions ​
- Type:
[]Precondition - Description: Conditions that must be met before running
tasks:
# Simple precondition (shorthand)
build:
preconditions:
- test -d ./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.shif ​
- Type:
string - Description: Shell command to conditionally execute the task. If the command exits with a non-zero code, the task is skipped (not failed).
tasks:
# Task only runs in CI environment
deploy:
if: '[ "$CI" = "true" ]'
cmds:
- ./deploy.sh
# Using Go template expressions
build-prod:
if: '{{eq .ENV "production"}}'
cmds:
- go build -ldflags="-s -w" ./...dir ​
- Type:
string - Description: The directory in which this task should run
- Default: If the task is in the root Taskfile, the default
dirisROOT_DIR. For included Taskfiles, the defaultdiris the value specified in their respectiveincludes.*.dirfield (if any).
tasks:
current-dir:
dir: '{{.USER_WORKING_DIR}}'
cmd: pwdrequires ​
- Type:
Requires - Description: Required variables with optional enum validation
tasks:
deploy:
requires:
vars: [API_KEY, ENVIRONMENT]
cmds:
- ./deploy.sh
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
# Requirements with enum from variable reference
reusable-deploy:
requires:
vars:
- name: ENVIRONMENT
enum:
ref: .ALLOWED_ENVS
cmds:
- ./deploy.shSee Prompting for missing variables interactively for information on enabling interactive prompts for missing required variables.
watch ​
- Type:
bool - Default:
false - Description: Automatically run task in watch mode
tasks:
dev:
watch: true
cmds:
- npm run devplatforms ​
- Type:
[]string - Description: Platforms where this task should run
tasks:
windows-build:
platforms: [windows]
cmds:
- go build -o app.exe ./cmd
unix-build:
platforms: [linux, darwin]
cmds:
- go build -o app ./cmdCommand ​
Individual command configuration within a task.
Basic Commands ​
tasks:
example:
cmds:
- echo "Simple command"
- ls -laCommand Object ​
tasks:
example:
cmds:
- cmd: echo "Hello World"
silent: true
ignore_error: false
platforms: [linux, darwin]
set: [errexit]
shopt: [globstar]Task References ​
tasks:
example:
cmds:
- task: other-task
vars:
PARAM: value
silent: falseDeferred Commands ​
tasks:
with-cleanup:
cmds:
- echo "Starting work"
# Deferred command string
- defer: echo "Cleaning up"
# Deferred task reference
- defer:
task: cleanup-task
vars:
CLEANUP_MODE: fullFor Loops ​
Loop Over List ​
tasks:
greet-all:
cmds:
- for: [alice, bob, charlie]
cmd: echo "Hello {{.ITEM}}"Loop Over Sources/Generates ​
tasks:
process-files:
sources: ['*.txt']
cmds:
- for: sources
cmd: wc -l {{.ITEM}}
- for: generates
cmd: gzip {{.ITEM}}Loop Over Variable ​
tasks:
process-items:
vars:
ITEMS: 'item1,item2,item3'
cmds:
- for:
var: ITEMS
split: ','
as: CURRENT
cmd: echo "Processing {{.CURRENT}}"Loop Over Matrix ​
tasks:
test-matrix:
cmds:
- for:
matrix:
OS: [linux, windows, darwin]
ARCH: [amd64, arm64]
cmd: echo "Testing {{.ITEM.OS}}/{{.ITEM.ARCH}}"Loop in Dependencies ​
tasks:
build-all:
deps:
- for: [frontend, backend, worker]
task: build
vars:
SERVICE: '{{.ITEM}}'Conditional Commands ​
Use if to conditionally execute a command. If the shell command exits with a non-zero code, the command is skipped.
tasks:
build:
cmds:
# Only run in production
- cmd: echo "Optimizing for production"
if: '[ "$ENV" = "production" ]'
# Using Go templates
- cmd: echo "Feature enabled"
if: '{{eq .ENABLE_FEATURE "true"}}'
# Inside for loops (evaluated per iteration)
- for: [a, b, c]
cmd: echo "processing {{.ITEM}}"
if: '[ "{{.ITEM}}" != "b" ]'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
# 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
# Global level
shopt: [globstar]
tasks:
find-files:
# Task level
shopt: [nullglob]
cmds:
- cmd: ls **/*.go
# Command level
shopt: [globstar]