pace watch
Watch task input files and automatically re-run the task when changes are detected.
Usage
pace watch [task-name]
Arguments
task-name- Name of the task to watch (optional if default task is set)
How It Works
The watch command monitors all files matching the task's inputs patterns. When any of these files change, the task is automatically re-executed.
Examples
Watch the default task
pace watch
Watch a specific task
pace watch build
For a task defined as:
task build {
command "go build -o bin/app main.go"
inputs ["**/*.go", "go.mod"]
}
This will watch all .go files and go.mod, re-running the build whenever they change.
Development server
task dev {
description "Run development server"
command "go run main.go"
inputs ["**/*.go"]
}
pace watch dev
This creates a live-reload development environment that restarts your server on code changes.
Task Configuration
For watch to work effectively, define the inputs property in your task:
task build {
command "go build -o bin/app main.go"
inputs [
"**/*.go", # All Go files
"go.mod", # Go module file
"go.sum" # Go dependencies
]
}
Watch Property
Alternatively, set watch true on a task to make it watch by default:
task dev {
watch true
inputs ["**/*.go"]
command "go run main.go"
}
Now running pace run dev will automatically start watch mode.
File Patterns
Watch supports glob patterns for matching files:
task frontend {
inputs [
"src/**/*.ts", # All TypeScript files in src/
"src/**/*.tsx", # All TSX files
"public/**/*", # All files in public/
"package.json", # Package file
"tsconfig.json" # TypeScript config
]
command "npm run build"
}
Common Patterns
**/*.go- All Go files recursivelysrc/**/*.ts- All TypeScript files in src/ and subdirectories*.json- All JSON files in current directory**/*- All files recursively (use with caution)
Behavior
Initial Run
When you start pace watch, it immediately runs the task once, then watches for changes.
Debouncing
File changes are debounced to prevent multiple rapid executions. If multiple files change in quick succession, the task runs only once after the changes stabilize.
Dependencies
Watch monitors only the specified task's inputs. If the task has dependencies:
task build {
before ["test"]
inputs ["**/*.go"]
}
Running pace watch build will:
- Run test (once initially)
- Run build
- Watch build's inputs
- On change: run test → run build
Cache Interaction
Watch mode respects task caching settings. If a task has cache true, it may skip execution if inputs haven't actually changed (e.g., if the file was saved without modifications).
Use Cases
Development Server
task dev {
watch true
inputs ["**/*.go"]
command "go run cmd/server/main.go"
}
Frontend Development
task frontend-dev {
watch true
working_dir "frontend"
inputs ["src/**/*.{ts,tsx}", "public/**/*"]
command "npm run dev"
}
Documentation Building
task docs {
watch true
inputs ["docs/**/*.md"]
command "mkdocs build"
}
Test-Driven Development
task test-watch {
watch true
inputs ["**/*.go", "**/*_test.go"]
command "go test -v ./..."
}
Stopping Watch
Press Ctrl+C to stop the watch process.
Notes
- Watch requires the task to have
inputsdefined - If no inputs are specified, watch will report an error
- Watch mode runs indefinitely until manually stopped
- Only one task can be watched at a time per command
- File system events may vary slightly between operating systems
- Very large numbers of files may impact watch performance
See Also
- pace run - Run tasks without watching
- pace list - List all available tasks
- Configuration Reference - Learn about task inputs and outputs