Cadder coordinates local Caddy reverse proxies that would otherwise fight for the same HTTP and HTTPS ports. Projects can keep using a caddy run workflow, while Cadder registers them with one per-user daemon and applies the active configs through one real Caddy process.
Published documentation: https://maxie.dev/Cadder/
Cadder ships three executables:
caddyis the Caddy-compatible shim. Forcaddy run, it starts or connects tocadderd, registers the current project's Caddyfile, keeps that registration alive while the shim process runs, and unregisters on exit. Other Caddy commands are delegated to the safely resolved real Caddy binary.cadderdis the per-user daemon. It owns local IPC, entrypoint registrations, adapted Caddy config composition, the generated effective runtime config, the real Caddy process it starts, diagnostics, and bounded log storage.cadder-tuiis the terminal UI. It connects to the daemon, can start it unless--no-startis used, and shows overview state, entrypoints, domains, per-domain logs, diagnostics, filters, toggles, log export, and daemon shutdown.
Each executable supports --help and --version.
- Download the latest Cadder release for your operating system from GitHub Releases.
- Create
cadder.tomlnext to Cadder with the path to the real Caddy binary. - Run a project through Cadder's
caddyshim. - Open
cadder-tuifor state, domains, logs, and diagnostics.
Full setup docs:
caddy run
cadder-tuiFor a local checkout, run the project checks with:
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
cargo run -p xtask -- checkSee CONTRIBUTING.md, SECURITY.md, and docs/ARCHITECTURE.md for repository workflow, security reporting, and architecture notes.
Cadder is licensed under the terms in LICENSE.
