# cherrypicker v0.1.0 - Table of Contents

> Stable named .localhost URLs for local dev servers. A pure-BEAM reverse proxy and route registry: no Node, no npm, no root CA.

## Pages

- [README](readme.md)
- [cherrypicker — design](design.md)
- [Changelog](changelog.md)

## Modules

- [Cherrypicker](Cherrypicker.md): Stable named `.localhost` URLs for local dev servers, on the BEAM.
- [Cherrypicker.CLI](Cherrypicker.CLI.md): The `cherrypicker` command
- [Cherrypicker.Control](Cherrypicker.Control.md): The control API, served on the reserved `cherrypicker.localhost` host
- [Cherrypicker.Daemon](Cherrypicker.Daemon.md): The running proxy: routes table + Finch pool + Bandit listener, one
supervision tree started by the CLI (or embedded by a host app).
- [Cherrypicker.Proxy](Cherrypicker.Proxy.md): The reverse proxy: `Host: <name>.localhost` → the registered loopback
port, streaming both directions so SSE and long-poll dev servers
(live reload included) work through it.
- [Cherrypicker.Routes](Cherrypicker.Routes.md): The route table: name → loopback port, held in ETS behind a GenServer
so writes serialize and reads stay lock-free on the hot proxy path.
- [Cherrypicker.State](Cherrypicker.State.md): The daemon's discovery file: `~/.cherrypicker/daemon.json`, holding
the bound proxy port. Written by the daemon on start, removed on
clean shutdown, read by every client that needs to find the control
API without being told where it is.

