taskw.yaml Reference
Complete reference for the taskw.yaml configuration file
taskw.yaml Reference
The taskw.yaml
file is the main configuration file for Taskw. This document provides a complete reference for all available configuration options.
File Format
Taskw uses YAML format for configuration files. The file should be named taskw.yaml
and placed in your project root directory.
Complete Configuration Schema
# Configuration version
version: "1.0"
# Project settings
project:
module: "github.com/user/project-name"
# Path configuration
paths:
scan_dirs: ["."]
output_dir: "."
# Generation settings
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
Configuration Options
version
Type: string
Required: Yes
Default: "1.0"
Description: The configuration file version.
version: "1.0"
Supported Versions:
"1.0"
- Current version
project
Project-specific configuration settings.
project.module
Type: string
Required: No
Default: Auto-detected from go.mod
Description: The Go module name for your project.
project:
module: "github.com/user/project-name"
Examples:
# Standard GitHub repository
module: "github.com/myuser/my-api"
# GitLab repository
module: "gitlab.com/mygroup/my-service"
# Custom domain
module: "example.com/my-project"
Auto-Detection: If not specified, Taskw reads the module name from your go.mod
file.
paths
File system path configuration.
paths.scan_dirs
Type: []string
Required: No
Default: ["."]
Description: Array of directories to scan for Go files with annotations.
paths:
scan_dirs: ["./internal", "./cmd"]
Examples:
# Single directory
scan_dirs: ["./internal"]
# Multiple directories
scan_dirs:
- "./internal"
- "./cmd"
- "./pkg"
# Current directory only
scan_dirs: ["."]
Notes:
- Only
.go
files in these directories are scanned - Subdirectories are included recursively
- Vendor directories are automatically excluded
paths.output_dir
Type: string
Required: No
Default: "."
Description: Directory where generated files will be placed.
paths:
output_dir: "./internal/api"
Examples:
# Current directory
output_dir: "."
# Internal API directory
output_dir: "./internal/api"
# Generated directory
output_dir: "./generated"
Notes:
- Directory will be created if it doesn't exist
- Must be writable by the current user
- Relative paths are resolved from project root
generation
Code generation configuration.
generation.routes
Route generation settings.
generation.routes.enabled
Type: boolean
Required: No
Default: true
Description: Enable or disable route generation.
generation:
routes:
enabled: true
Examples:
# Enable route generation (default)
enabled: true
# Disable route generation (for CLI tools)
enabled: false
generation.routes.output_file
Type: string
Required: No
Default: "routes_gen.go"
Description: Name of the generated route registration file.
generation:
routes:
output_file: "routes_gen.go"
Examples:
# Default name
output_file: "routes_gen.go"
# Custom name
output_file: "my_routes.go"
# With path
output_file: "internal/api/routes.go"
generation.dependencies
Dependency injection generation settings.
generation.dependencies.enabled
Type: boolean
Required: No
Default: true
Description: Enable or disable dependency injection generation.
generation:
dependencies:
enabled: true
Examples:
# Enable dependency generation (default)
enabled: true
# Disable dependency generation
enabled: false
generation.dependencies.output_file
Type: string
Required: No
Default: "dependencies_gen.go"
Description: Name of the generated dependency injection file.
generation:
dependencies:
output_file: "dependencies_gen.go"
Examples:
# Default name
output_file: "dependencies_gen.go"
# Custom name
output_file: "wire_gen.go"
# With path
output_file: "internal/api/wire.go"
Configuration Examples
Minimal Configuration
version: "1.0"
This uses all default values:
- Auto-detects module from
go.mod
- Scans current directory
- Outputs to current directory
- Enables both routes and dependencies
API Project
version: "1.0"
project:
module: "github.com/user/api"
paths:
scan_dirs: ["./internal", "./cmd"]
output_dir: "./internal/api"
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
CLI Tool
version: "1.0"
project:
module: "github.com/user/cli-tool"
paths:
scan_dirs: ["./internal"]
output_dir: "./internal/cli"
generation:
routes:
enabled: false
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
Microservice with Custom Structure
version: "1.0"
project:
module: "github.com/user/microservice"
paths:
scan_dirs:
- "./internal/handlers"
- "./internal/services"
- "./cmd/server"
output_dir: "./internal/api"
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "wire_gen.go"
Routes Only
version: "1.0"
project:
module: "github.com/user/routes-only"
paths:
scan_dirs: ["./internal"]
output_dir: "./internal/api"
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: false
output_file: "dependencies_gen.go"
Dependencies Only
version: "1.0"
project:
module: "github.com/user/deps-only"
paths:
scan_dirs: ["./internal"]
output_dir: "./internal/api"
generation:
routes:
enabled: false
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
Configuration Validation
Taskw validates your configuration file and reports errors for:
YAML Syntax Errors
# ❌ Invalid YAML
version: "1.0"
paths:
scan_dirs: ["./internal" # Missing closing bracket
Invalid Values
# ❌ Invalid version
version: "2.0" # Only "1.0" is supported
# ❌ Invalid boolean
generation:
routes:
enabled: "yes" # Should be true/false
Invalid Paths
# ❌ Non-existent directory
paths:
scan_dirs: ["./nonexistent"]
# ❌ Invalid output directory
paths:
output_dir: "/root/protected" # Permission denied
Environment-Specific Configurations
You can create different configuration files for different environments:
Development Configuration
# taskw.dev.yaml
version: "1.0"
project:
module: "github.com/user/api"
paths:
scan_dirs: ["./internal", "./cmd"]
output_dir: "./internal/api"
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
Production Configuration
# taskw.prod.yaml
version: "1.0"
project:
module: "github.com/user/api"
paths:
scan_dirs: ["./internal"]
output_dir: "./internal/api"
generation:
routes:
enabled: true
output_file: "routes_gen.go"
dependencies:
enabled: true
output_file: "dependencies_gen.go"
Usage
# Development
taskw --config taskw.dev.yaml generate
# Production
taskw --config taskw.prod.yaml generate
Configuration Best Practices
Use Relative Paths
# ✅ Good
paths:
scan_dirs: ["./internal", "./cmd"]
output_dir: "./internal/api"
# ❌ Avoid
paths:
scan_dirs: ["/absolute/path"]
output_dir: "/absolute/output"
Organize Scan Directories
# ✅ Well organized
paths:
scan_dirs:
- "./internal/handlers"
- "./internal/services"
- "./internal/repositories"
# ❌ Too broad
paths:
scan_dirs: ["."] # Scans everything
Use Descriptive Output Names
# ✅ Clear naming
generation:
routes:
output_file: "routes_gen.go"
dependencies:
output_file: "wire_gen.go"
# ❌ Unclear naming
generation:
routes:
output_file: "gen.go"
dependencies:
output_file: "gen.go" # Conflicts!
Version Control
Include your configuration in version control:
git add taskw.yaml
git commit -m "Add Taskw configuration"
But exclude generated files:
# .gitignore
routes_gen.go
dependencies_gen.go
wire_gen.go