What is xcaddy?
FromREADME.md:145, xcaddy is our builder tool that automates the build process.
It handles:
- Creating proper project structure
- Managing Go modules
- Injecting version information
- Adding custom plugins
- Cross-compilation
Installation
Install xcaddy using Go:Ensure
$GOPATH/bin is in your PATH to run xcaddy from anywhere.Basic Usage
Build Standard Caddy
FromREADME.md:148:
caddy binary in the current directory with:
- Proper version information
- All standard modules
- Platform-specific optimizations
Build Specific Version
Building with Plugins
Add a Plugin from GitHub
Add Multiple Plugins
Specify Plugin Version
Local Plugin Development
For local plugin development, use a local path:Output Control
Specify Output Path
Cross-Platform Builds
What xcaddy Automates
FromREADME.md:151, xcaddy performs these steps automatically:
1
Create project folder
2
Copy main.go
Copies Caddy’s main.go and adds plugin imports:
3
Initialize Go module
4
Pin Caddy version
5
Add plugin dependencies
6
Build with proper flags
Advanced Options
Replace Modules
Replace a dependency with a fork:Build with Specific Go Version
Disable Module Optimization
By default, xcaddy trims unused dependencies:Development Workflow
Quick Iteration
For rapid plugin development:Using xcaddy run
Test without building:Build Caching
xcaddy leverages Go’s build cache. Subsequent builds are faster:Environment Variables
Proxy Configuration
Private Repositories
Custom Build Flags
Common Plugin Examples
Nginx Config Adapter
Convert Nginx configs to Caddy:CloudFlare DNS Provider
For DNS-01 ACME challenges:Rate Limiting
Multiple Plugins Together
Verification
After building, verify your binary includes plugins:Troubleshooting
Module Not Found
Ensure the plugin path is correct and accessible:Version Conflicts
Specify exact versions:Permission Denied
On Linux, set capabilities:Build Fails with Local Plugin
Ensure your plugin has ago.mod file:
GOPROXY Timeout
Use direct mode:Comparison with Manual Build
- ✅ Faster and less error-prone
- ✅ Handles version information correctly
- ✅ Manages all dependencies automatically
- ✅ Supports quick iteration with local plugins
Next Steps
Custom Builds
Create production-ready custom builds
Plugin Tutorial
Develop your own plugin
Building from Source
Manual build process details
Module Development
Deep dive into module creation