CaddyUI v2.16.8 Released — DNS-01, Faster Proxy Management, Multi-Server Support, and More
Hi everyone,
I’m happy to announce the release of CaddyUI v2.16.8.
CaddyUI is a free, open-source, self-hosted web interface for Caddy. It lets you manage proxy hosts, redirects, certificates, DNS records, users, multiple Caddy servers, and advanced routes through a browser.
Before getting into the release, I want to apologize for not posting an update here for a while. Life has been busy, and I’m very happy to share that I’m going to be a dad!
Going forward, I plan to work on CaddyUI once or twice a month—fixing bugs, improving the experience, and adding useful features. This schedule will allow me to continue supporting the project while giving me the time I need to focus on my growing family.
Thank you for your patience, support, bug reports, and understanding. 
Project links
What is CaddyUI?
CaddyUI is a separate management application that connects to Caddy through its Admin API.
It does not replace Caddy. Caddy continues handling traffic, TLS, routing, and certificate automation. CaddyUI provides a browser-based interface for building and synchronizing Caddy’s JSON configuration.
You can use one CaddyUI installation to manage:
- A local Caddy server
- Multiple remote Caddy servers
- Caddy servers connected through WireGuard or Tailscale
- Docker-based Caddy installations
- Native Caddy installations running on VMs, LXCs, or bare-metal systems
Remote servers only need Caddy. They do not need another CaddyUI container.
Changes in v2.16.8
Faster Proxy Hosts page
The Proxy Hosts page previously loaded every configuration field for every host.
A CaddyUI proxy-host record can contain several hundred optional settings, including:
- Advanced configuration
- Custom request and response headers
- Health-check configuration
- Security rules
- Path-based routing rules
- Maintenance pages
- Custom error pages
- Upstream TLS settings
- Load-balancing options
Most of that information is unnecessary when displaying the list page.
CaddyUI now loads only the 19 fields required to render the Proxy Hosts list. The live-health endpoint uses the same lightweight query.
This should noticeably improve page-loading performance, especially when an installation contains many hosts or large advanced configurations.
Removed a duplicate Caddy request
Opening Proxy Hosts previously started two separate live requests to the Caddy Admin API.
One updated the health indicators beside each host, while the other populated the detailed upstream-status panel. If a remote Caddy server was unavailable, the second request could remain open for up to five seconds.
Row health continues to load normally. The detailed upstream panel now loads only when the user presses Refresh.
Changes introduced in v2.16.7
DNS-01 certificate issuance
CaddyUI can now configure ACME DNS-01 challenges using the same credential profile selected under Managed DNS.
Supported providers include:
- Cloudflare
- Porkbun
- Namecheap
- GoDaddy
- DigitalOcean
- Hetzner
DNS-01 works with standard hostnames and wildcard certificates:
example.com
app.example.com
*.example.com
When Managed DNS and Auto SSL are enabled, CaddyUI:
- Reads the selected DNS credential profile.
- Creates a subject-specific TLS automation policy.
- Configures the selected DNS provider for the ACME challenge.
- Sends the updated configuration to Caddy.
- Leaves certificate issuance, storage, renewal, and serving to Caddy.
This avoids entering the same DNS credentials separately for A-record management and certificate automation.
DNS plugin requirement
The Caddy server must contain the matching caddy-dns provider module.
For example, Cloudflare requires:
github.com/caddy-dns/cloudflare
Porkbun requires:
github.com/caddy-dns/porkbun
Updating CaddyUI does not automatically add modules to a separate Caddy installation.
The repository’s custom Dockerfile.caddy now builds Caddy with all six DNS provider modules supported by CaddyUI.
Fixed skip_redirects synchronization errors
Some users encountered this validation error when pressing Sync Caddy:
json: unknown field "skip_redirects"
The problem was that CaddyUI attempted to use a per-host automatic_https.skip_redirects JSON field that Caddy does not support.
CaddyUI now represents hosts with Force SSL disabled using an explicit HTTP server on port 80.
The resulting behavior is:
- Force SSL enabled: HTTP redirects to HTTPS.
- Force SSL disabled: HTTP and HTTPS are both available.
- Auto SSL disabled: the host can remain HTTP-only when configured that way.
- HTTPS traffic remains on port 443.
- Old unsupported configuration is removed before validation.
This follows the configuration model produced by Caddy’s own Caddyfile adapter.
Other recent features
Multiple DNS credential profiles
You can save multiple DNS credential profiles instead of having only one global provider account.
This is useful when:
- Domains are split across multiple Cloudflare accounts.
- Different customers use separate provider accounts.
- Tokens have access to different zone groups.
- A single CaddyUI installation manages several organizations.
Each proxy host, redirection, or advanced route can select its own credential profile.
Managed DNS lifecycle
Managed DNS can automatically:
- Find the appropriate zone for a hostname
- Create A records
- Create records for aliases and multiple hostnames
- Detect existing records before making changes
- Avoid overwriting records CaddyUI did not create
- Retarget records when a server’s public IP changes
- Delete CaddyUI-managed records when a route is removed
- Reuse credentials for DNS-01 certificate issuance
Multiple Caddy servers
One CaddyUI installation can manage several Caddy servers.
Resources are scoped to the selected server, including:
- Proxy hosts
- Redirection hosts
- Advanced routes
- Certificates
- DNS records
- Health information
- Analytics
- Snapshots
For remote management, the Caddy Admin API should be available only through a private network such as WireGuard or Tailscale. Port 2019 should not be exposed publicly.
Proxy hosts
Proxy Hosts provide a guided interface for configuring reverse proxies.
Options include:
- HTTP and HTTPS upstreams
- Automatic HTTPS
- Custom certificates
- WebSocket support
- HTTP/2 and HTTP/3 controls
- Multiple upstreams
- Load-balancing policies
- Active and passive health checks
- Request and response headers
- Path-based upstream rules
- URL rewrites
- CORS controls
- Basic authentication
- IP allowlists and blocklists
- Upstream TLS verification
- SNI overrides
- Timeouts and retry policies
- Maintenance mode and schedules
- Custom error pages
- Security headers
- Compression
- Access-log controls
Redirection hosts
Redirection Hosts support:
- HTTP 301
- HTTP 302
- HTTP 307
- HTTP 308
- Path preservation
- Path-specific redirect rules
- Wildcard subdomain redirects
- Temporary and permanent redirects
- Automatic HTTPS
- Custom certificates
- Managed DNS
- DNS-01 certificate issuance
- Scheduled sunset behavior
Advanced routes
Advanced Routes are available for configurations that do not fit the guided forms.
You can:
- Paste Caddyfile site blocks
- Enter Caddy JSON routes
- Import adapted Caddy configurations
- Preserve custom handlers
- Assign certificates
- Configure Managed DNS
- Use DNS-01 automation
- Reclassify simple routes into Proxy Hosts or Redirections
Caddyfile import
CaddyUI can adapt pasted Caddyfile configuration and classify routes automatically.
Simple configurations become editable Proxy Hosts or Redirections. More complex configurations remain Advanced Routes.
Imported TLS automation policies, including DNS-01 configuration and custom issuers, are preserved.
Certificate management
Certificate features include:
- Automatic Caddy-managed certificates
- Custom PEM certificates
- File-path-based certificates
- Certificate assignment to hosts
- Bulk certificate assignment
- Certificate-expiration monitoring
- Email and webhook expiration alerts
- Live-certificate inspection
- Porkbun SSL certificate import
Bulk actions
Bulk actions are available across the main resource pages.
Depending on the resource type, you can:
- Enable multiple entries
- Disable multiple entries
- Delete multiple entries
- Enable or disable maintenance mode
- Assign a certificate to several proxy hosts
- Clear custom certificates and return hosts to Auto/ACME
Drag-and-drop ordering
Proxy hosts and redirections can be reordered using drag-and-drop controls.
The order is stored in CaddyUI and used when building the synchronized route list.
Access control
CaddyUI includes three account roles:
admin: complete access
user: manages owned resources
view: read-only access
Additional access-control features include:
- Per-user ownership
- Group-based shared visibility
- Administrator resource reassignment
- API tokens
- Read-only, proxy-write, and full token scopes
- Two-factor authentication with TOTP
- Session management
- Optional Cloudflare Turnstile or reCAPTCHA protection
Snapshots and recovery
CaddyUI can create SQLite and Caddy configuration snapshots.
Features include:
- Manual snapshots
- Automatic snapshots before synchronization
- Snapshot comparison
- Configuration restoration
- Retention controls
- Activity records for synchronization failures
Health monitoring
CaddyUI can display:
- Caddy server availability
- Upstream connection status
- Application-response status
- HTTP response codes
- Probe latency
- Last-check times
- Down and recovered transitions
- Multi-server health summaries
Visitor analytics
Optional visitor analytics include:
- Requests
- Unique visitors
- Bandwidth
- Status-code distribution
- Top hosts
- Top paths
- Browser information
- Traffic trends
- Per-server filtering
- Configurable retention
Analytics remain optional and can be disabled.
Notifications
Notification options include:
- SMTP email
- Generic webhooks
- ntfy
- Certificate-expiration alerts
- Upstream down/recovered alerts
- Configurable notification thresholds
AI assistant
CaddyUI includes an optional assistant that can answer Caddy, TLS, DNS, and CaddyUI configuration questions.
Supported backends include:
- Local Ollama
- Ollama Cloud
- Anthropic
- OpenAI-compatible APIs
- OpenRouter
- Groq
- Together
- vLLM
- LM Studio
The assistant can also propose Proxy Hosts or Redirections through structured tool calls. The user sees the proposed configuration and must press Apply before it is created.
AI-generated changes are recorded in the activity log.
REST API
The REST API supports:
- Proxy Hosts
- Redirection Hosts
- Advanced Routes
- Certificates
- Toggle actions
- Scoped API tokens
- Ownership checks
- Synchronization after writes
A community-maintained MCP integration is also available:
CaddyUI-MCP
For automated integrations, I recommend creating a dedicated CaddyUI user and using the narrowest token scope that fits the workflow.
Additional interface features
CaddyUI also includes:
- Global command palette
- Search and filtering
- Dark mode
- Progressive Web App support
- Mobile-friendly layouts
- Per-resource ownership indicators
- Dashboard recommendations
- Activity history
- Caddy JSON preview
- Caddyfile export
- JSON import and export
- Update notifications
- Branded Caddy error pages
Installation
Docker
Docker is the recommended installation method.
Pull the pinned release:
docker pull applegater/caddyui:v2.16.8
Or use the current stable release:
docker pull applegater/caddyui:latest
Available tags:
v2.16.8
latest
stable
preview
A minimal standalone container can be started with:
docker run -d \
--name caddyui \
-p 8081:8080 \
-v caddyui_data:/data \
-e CADDY_ADMIN_URL=http://your-caddy-host:2019 \
applegater/caddyui:v2.16.8
Open:
http://localhost:8081
Then complete the first-run administrator setup.
The complete Docker Compose example is available in the repository:
docker-compose.yml
Native Linux installation
GitHub releases include Linux archives for:
Each archive includes:
- CaddyUI binary
- Installation script
- Example systemd service
- README
- Changelog
- License
- Checksums
Download the appropriate archive from the v2.16.8 release page.
Important security note
The Caddy Admin API is extremely powerful.
Do not expose port 2019 directly to the public internet. For remote Caddy servers, use a private network such as:
- WireGuard
- Tailscale
- A private VLAN
- A properly secured internal reverse proxy with authentication
CaddyUI should communicate with Caddy over a trusted network.
Updating
Before updating, backing up the CaddyUI data volume or SQLite database is always recommended.
For Docker Compose:
docker compose pull
docker compose up -d
If you use a pinned tag, update the image to:
image: applegater/caddyui:v2.16.8
Then redeploy the stack.
If you use Portainer, update the image tag and redeploy the stack from Portainer.
Testing and release checks
Before publishing v2.16.8, the project passed:
- Go unit tests
- Go vet
- Application build
- Docker image build
- GitHub Actions CI
- GitHub CodeQL analysis
- Real Caddy JSON validation for the DNS-01 provider schemas
- Real Caddy validation for the HTTP/HTTPS routing changes
Feedback
If you try the release, I would appreciate feedback—especially from installations managing many proxy hosts or using DNS-01.
Please report bugs or feature requests here:
github.com/X4Applegate/caddyui/issues
For general questions or ideas:
github.com/X4Applegate/caddyui/discussions
Thank you to everyone who has tested CaddyUI, reported bugs, suggested features, or contributed feedback.
I may be working on a slightly slower release schedule as I prepare to become a dad, but I’m still committed to improving CaddyUI and keeping it useful for the community. 