unsubbed.co

CaddyManager

Self-hosted proxy servers tool that provides web interface for managing Caddy.

Managing Caddy server configurations through a browser instead of a terminal — honestly reviewed, no marketing spin.

TL;DR

  • What it is: An early-stage open-source web UI for managing multiple Caddy2 reverse proxy servers, built on the MEVN stack (MongoDB, Express, Vue, Node.js) [README].
  • Who it’s for: Self-hosters and small teams already running Caddy2 who want to manage Caddyfile configurations without SSHing into servers. Not for beginners to Caddy itself.
  • Cost: Free and self-hosted. Runs alongside your existing Caddy2 instances on any VPS.
  • Key strength: Multi-server management from a single dashboard with audit logging, JWT auth, and Prometheus metrics — more ops tooling than you’d expect for a pre-release project [README].
  • Key weakness: The README’s own caution says “Use at your own risk” and the project is pre-v0.1. No independent third-party reviews exist yet, which is itself a signal. This is a tool for early adopters, not for anyone running a production stack they can’t afford to break.

What is CaddyManager

CaddyManager is a browser-based management layer for Caddy2 — the modern, automatic-HTTPS web server written in Go. If you’re running Caddy2 as your reverse proxy, you already know the workflow: SSH in, edit a Caddyfile, reload. CaddyManager puts a Vue.js frontend in front of Caddy’s admin API (which listens on port 2019 by default) so you can create, edit, and push configurations without touching the command line.

The project was started to fill an obvious gap. Caddy’s syntax is simpler than nginx configs, but “simpler” and “GUI-less” aren’t the same thing. Nginx Proxy Manager solved this problem for nginx and now has 23,000+ GitHub stars. CaddyManager is attempting the same thing for Caddy2, with the added scope of managing multiple Caddy instances from one interface.

The backend is Express.js, the frontend is Vue.js, and persistence is either SQLite (the default, zero-configuration option) or MongoDB. As of this review, the GitHub repository sits at 959 stars with 37 forks and 114 commits — respectable early traction, but nowhere near the maturity of comparable tools [README].

The README is upfront: “CaddyManager is in early development. Please backup your Caddy configurations and data before testing.” That warning matters and shapes everything in this review.


Why People Choose It

No independent third-party reviews of CaddyManager were available at the time of writing — the project is too young. What follows is synthesized from the README, the project’s own stated rationale, and the broader context of the Caddy ecosystem.

The Nginx Proxy Manager comparison. NPM (Nginx Proxy Manager) is the benchmark in this category. It has years of production use, a massive community, and forum threads covering virtually every setup scenario. Anyone choosing CaddyManager is choosing Caddy’s auto-HTTPS and simpler syntax over nginx’s maturity — and then looking for the same GUI-ease NPM provides. CaddyManager is the answer to “why isn’t there an NPM for Caddy?” [README]

Multi-server management. This is the differentiator that goes beyond what most single-server Caddy GUIs offer. If you’re running Caddy on three separate VPSes — one for your app, one for your media server, one for your internal tools — CaddyManager’s dashboard promises a single pane of glass. Competitors in the Caddy GUI space typically manage one server per instance [README].

Audit logging out of the box. For teams where “who changed what” matters — even small ones — audit logging is a meaningful feature. CaddyManager ships with it enabled by default, configurable to 100MB max size and 90-day retention. That’s infrastructure ops thinking applied to what is otherwise a GUI project [README].

The honest version: people choose it because it exists and Caddy’s GUI alternatives are thin. If you’re already bought into Caddy2 and want something to experiment with, this is the most feature-complete UI option available right now.


Features

From the README and Docker Compose configuration [README]:

Core management:

  • Multi-server dashboard: add, remove, and monitor multiple Caddy2 instances from one interface
  • Caddyfile configuration editor with syntax highlighting and templates
  • Configuration validation before pushing changes
  • Real-time health checks and status monitoring with configurable ping intervals (default: 30 seconds, timeout: 2 seconds)
  • Connection to Caddy2’s admin API (default port 2019)

Authentication and access:

  • JWT-based sessions with configurable expiration (default 24 hours)
  • Role-based access control
  • API key generation and revocation for programmatic access

Operations and observability:

  • Audit logging for all user and system actions (configurable size/retention)
  • Prometheus metrics endpoint (a prometheus-scrape.yml is included in the repo)
  • In-memory metrics history (configurable snapshot limit)
  • Integrated Swagger API documentation for exploring the backend API

Infrastructure:

  • SQLite default (zero-setup, data stored in a persistent volume)
  • Optional MongoDB backend (activated via Docker Compose profile flag)
  • Docker Compose deployment — both backend and frontend ship as containers
  • Frontend proxies all /api/* requests to the backend; backend is not directly exposed
  • Responsive UI, dark mode configurable via environment variable

What’s notably absent:

  • Certificate management UI (Caddy handles this automatically — but there’s no visibility into cert status from the dashboard)
  • Import/export of existing Caddyfile configurations
  • Two-factor authentication
  • Webhook notifications for configuration changes or server downtime

Pricing: SaaS vs Self-Hosted Math

CaddyManager is open-source and self-hosted. There is no SaaS offering, no paid tier, and no commercial license. The software cost is $0 [README].

What you actually pay:

  • A VPS to run it: $4–8/mo on Hetzner or Contabo for a 2GB RAM instance
  • CaddyManager needs to run alongside your Caddy2 instances, so if you’re already paying for a server running Caddy, the marginal cost of adding CaddyManager to that server is effectively $0

Comparison to managed alternatives:

  • There is no direct managed alternative — Caddy itself offers no hosted control panel
  • If you wanted equivalent SSL/reverse-proxy management without self-hosting anything, you’d use Cloudflare Tunnels (free tier available but with traffic routing through Cloudflare), or a platform like Railway or Render where the proxy is abstracted away entirely
  • Nginx Proxy Manager, the closest analogue in spirit, is also free and self-hosted — so there’s no cost comparison to make there either

The real cost of CaddyManager isn’t money — it’s time. You’re adopting pre-release software and accepting that things may break between versions.


Deployment Reality Check

The Docker Compose setup is clean and well-documented. For anyone who has deployed a multi-container app before, this is a 15-minute job [README].

What you need:

  • A Linux server with Docker and Docker Compose installed
  • Your existing Caddy2 instances must have their admin API accessible (port 2019) from wherever CaddyManager’s backend runs — this often means network-level configuration if your Caddy servers are on separate machines
  • A domain and reverse proxy (you could use Caddy itself to proxy CaddyManager) for HTTPS on the CaddyManager UI
  • A strong JWT_SECRET — the example config uses a placeholder and is explicit about changing it for production

The default SQLite path is the right choice for most deployments. MongoDB is there for teams that already run Mongo and want everything in one place, but it adds a container and operational complexity for no meaningful benefit at small scale [README].

What can go sideways:

First, the network problem. CaddyManager connects to Caddy’s admin API on port 2019. If your Caddy servers are on different machines (the multi-server management use case), you need to ensure port 2019 is reachable from the CaddyManager backend — either via private network, VPN, or firewall rules. Exposing 2019 to the public internet is not something you want to do. This is not a CaddyManager problem per se, but it’s a real deployment consideration the README doesn’t walk you through [README].

Second, the “early development” warning is not a formality. The project is pre-v0.1. There is no migration path documented for the SQLite schema between versions. If you run this and a breaking change ships, you may need to reset your data. Back up your Caddyfiles before connecting them to this tool — this is exactly what the README says, and they mean it [README].

Third, the license is listed as NOASSERTION in automated tooling — meaning the license file exists in the repository but wasn’t recognized by the scanner. Before using this in a commercial context, check the actual LICENSE file in the repository. Data not available in the sources provided here.

Realistic time estimates:

  • Technical user, fresh server: 20–30 minutes to a working CaddyManager instance on a single machine
  • Adding remote Caddy servers: another 30–60 minutes for network configuration, depending on your infrastructure
  • Non-technical user: this is not a non-technical-user tool. The setup assumes comfort with Docker and basic Linux networking.

Pros and Cons

Pros

  • Multi-server management from day one. This is the architectural decision that separates CaddyManager from simpler single-instance Caddy GUIs. If you’re running Caddy at multiple locations, this matters [README].
  • SQLite default. No external database dependency to stand up for a basic deployment. One container, persistent volume, done [README].
  • Audit logging included. Not an afterthought — it’s listed as a first-class feature and is configurable via environment variables [README].
  • Prometheus metrics. The inclusion of prometheus-scrape.yml suggests the project is thinking about real operational use, not just a hobby dashboard [README].
  • Swagger API docs built in. Means the backend API is documented and testable from the UI — useful if you want to automate config changes or integrate with your own tooling [README].
  • Active development. 114 commits and gearing up for v0.1 release. The project is moving [README].

Cons

  • Pre-v0.1. Full stop. The project itself tells you to use at your own risk and back up your data. This is not suitable as the sole interface for managing production Caddy configurations [README].
  • No independent reviews. 959 stars is encouraging but there are no published third-party reviews, tutorials, or community write-ups yet. If you hit a problem, you’re on your own with the GitHub issues.
  • License unclear. The NOASSERTION license flag means the actual license terms require manual verification. This matters for commercial use.
  • No certificate visibility. Caddy’s auto-HTTPS is a core selling point, but CaddyManager doesn’t appear to expose certificate status in the dashboard. You’d still need to check cert expiry and renewal status elsewhere.
  • Network complexity for multi-server use. The multi-server feature — the headline differentiator — requires Caddy’s admin API to be network-accessible. In practice, this means additional firewall or VPN configuration that adds real operational overhead.
  • No documented upgrade path. For a pre-release project with a database schema, the absence of migration documentation is a real gap.
  • Small team, small community. At this stage, the project is essentially a few maintainers. There’s no enterprise backing, no SLA, and no long-term commitment you can point to.

Who Should Use This / Who Shouldn’t

Use CaddyManager if:

  • You’re running multiple Caddy2 servers and want a centralized management interface
  • You’re technically comfortable with Docker and Linux networking
  • You’re willing to accept pre-release software risk and have proper backups in place
  • You want to contribute to an early-stage project — the CONTRIBUTING.md exists and feedback is explicitly welcomed [README]

Skip it (wait for v0.1+) if:

  • You’re managing Caddy configurations for anything business-critical
  • You’re not comfortable debugging Docker networking issues if something breaks
  • You need a stable tool to hand off to someone else to operate

Skip it (use Nginx Proxy Manager) if:

  • You don’t have a strong reason to prefer Caddy over nginx as your reverse proxy
  • You need a mature, community-tested GUI with years of production deployments and thousands of forum threads covering every edge case
  • You’re a non-technical user — NPM’s setup documentation and community support is substantially more developed

Skip it (just use the Caddyfile directly) if:

  • You’re running a single Caddy instance
  • You’re comfortable with the terminal
  • The overhead of running a management UI alongside Caddy doesn’t make sense for your use case

Alternatives Worth Considering

For Caddy2 specifically:

  • Direct Caddyfile editing — the zero-dependency option. SSH in, edit, caddy reload. Simple, reliable, no UI attack surface. For single-server deployments, this is still the right answer.
  • Caddy’s admin API directly — Caddy exposes a REST API on port 2019. Tools like Postman or curl give you programmatic config management without a UI dependency.

For reverse proxy management generally:

  • Nginx Proxy Manager — the category leader for GUI-based reverse proxy management. Mature, widely deployed, with a large community and extensive documentation. If you’re not committed to Caddy specifically, this is the safer choice.
  • Traefik — a Docker-native reverse proxy with a built-in dashboard. More complex setup, but better suited for dynamic container environments (Kubernetes, Docker Swarm). Has its own GUI, though it’s read-only by default.
  • Caddy-Docker-Proxy — a Caddy plugin that auto-configures from Docker labels. No GUI, but lets you manage Caddy configuration entirely through your docker-compose.yml files — which some teams find cleaner than a separate UI.

For a non-technical founder or small team that just wants HTTPS and reverse proxy without managing anything, the actual answer might be Cloudflare Tunnels (free tier) or a platform-level proxy — no self-hosted tool required.


Bottom Line

CaddyManager is a technically well-conceived project that’s too early for anyone who needs reliability. The feature set — multi-server management, JWT auth, RBAC, audit logging, Prometheus metrics — is more complete than you’d expect from a pre-v0.1 release, and that’s genuinely impressive. But the README’s own caution is the most honest sentence in the project: use at your own risk, back up your Caddyfiles. If you’re a Caddy enthusiast who wants to watch this project grow and can contribute testing or feedback, it’s worth spinning up. If you’re a non-technical founder looking for a stable, production-grade way to manage your reverse proxy, either come back after v1.0 or use Nginx Proxy Manager with a supported stack.


Sources

Primary sources:

  1. CaddyManager GitHub README — full feature list, Docker Compose configuration, environment variable documentation, project status. https://github.com/caddymanager/caddymanager
  2. CaddyManager GitHub repository — stars (959), forks (37), commit count (114), file structure, license file presence. https://github.com/caddymanager/caddymanager

Note: No independent third-party reviews of CaddyManager were available at the time of writing. The research pass returned irrelevant results. All claims in this article are derived from the project’s own repository and README. This is itself a data point about the project’s maturity — tools with production adoption generate reviews.

Features

Integrations & APIs

  • REST API