Skip to content

Stable addresses for every local app.

Cadder coordinates Caddy across your local projects. Caddy is the reverse proxy that connects each local address to the port where an app is running. With Cadder, routes from different repositories are served together by one Caddy process.

npx cadder tui --start-daemon

Caddy is required. Install it on this machine and make sure caddy is available in your shell. Install Caddy

Projects keep their own Caddyfiles.

storefront shop.localhost
:3000
api api.localhost
:4000

Cadder combines active routes into one synchronized configuration.

Cadder
  • combines active routes
  • rejects conflicts
  • tracks ownership

Caddy serves the combined routes and forwards each request to the right app.

Caddy
  • serves active routes
  • receives local requests
  • forwards requests to apps

cadder tui shows which project owns each address, where requests go, and whether Cadder and Caddy are running. Select a project or route to enable or disable it without touching the others.

Open the guide
Cadder vX.Y.Z cadderd running | Caddy running
Project / domain Target
> ● ~/code/storefront
├─ ● shop.localhost :3000
└─ ○ admin.localhost :3001
● ~/code/api
└─ ● api.localhost :4000
Up/Down select Space/Enter enable/disable r refresh x stop R restart q quit
01

Keep projects independent.

Each project keeps its own Caddyfile. caddy run registers it with Cadder.

02

Reject collisions.

Cadder checks route ownership and blocks conflicting active addresses before applying a change.

03

See the complete picture.

Cadder connects projects, local addresses, ports, logs, and Caddy state in one view.

04

Change one route at a time.

Enable or disable one domain while unrelated local routes stay active.

Each project can define its own reverse-proxy route. Cadder combines the active routes and keeps one shared Caddy process synchronized.

The Caddyfile format belongs to Caddy: Caddy defines it and turns it into server configuration. Cadder reads that result only to coordinate the local address with the right app port.

Caddyfile
shop.localhost {
    reverse_proxy localhost:3000
}

Then run this command inside that project:

caddy run

The route appears in cadder tui, where you can inspect its owner, target, and activation state.