# grove > An HTTPS hostname, leased ports, and env vars for every git worktree, so every branch you or an agent is working on can run at once. ## Docs - [Introduction](https://grov.site/docs): Every worktree of every repo becomes a context with its own hostname, ports, and env vars, so every branch you or an agent is on can run at once. - [Quickstart](https://grov.site/docs/quickstart): Install grove, set up the machine once, write a grove.toml, and run your dev server on an HTTPS hostname of its own with no port in the URL. - [Why not lando or ddev?](https://grov.site/docs/comparison): What grove keeps from lando and ddev, where it disagrees with them, what it asks of a project in return, and when each one is the better fit. ## Guides - [Setting up a machine](https://grov.site/docs/guides/machine): Install the binary, generate and trust a local certificate authority, and take the one privileged step that lets grove answer on port 443. - [Setting up a project](https://grov.site/docs/guides/project): What grove init writes, how to read each section of grove.toml, and where a variable has to sit to be set by the time your command needs it. - [Detached ports](https://grov.site/docs/guides/detached-ports): Mark an entry detached when whatever binds it outlives the command that asked, as supabase start and docker compose up do. - [One app on more than one hostname](https://grov.site/docs/guides/aliases): A storefront and its admin, or a site and its asset host, is one server on one port, so in grove it is one route with an alias. - [Your dev server has to bind the port it's given](https://grov.site/docs/guides/dev-server): Grove proxies a hostname to the port it leased, so a dev server that picks its own port looks like a 503 from something that is running fine. - [Reading the ports without taking them](https://grov.site/docs/guides/no-bind): A test suite or a script only wants to know where the dev server is. --no-bind and grove env report the ports without leasing them. - [Teammates and CI](https://grov.site/docs/guides/ci): Under CI grove runs your command untouched, and --if-available asks for the same anywhere, so one script serves teammates who never installed it. - [Troubleshooting](https://grov.site/docs/guides/troubleshooting): What grove ls, the 503 pages, and grove doctor are telling you when a hostname does not answer, and the fix each one names. ## Concepts - [Contexts and naming](https://grov.site/docs/concepts/contexts): A context is a worktree. Here is how grove names it, what a linked worktree adds, and how a bare repository picks the worktree that is the project. - [Ports and leases](https://grov.site/docs/concepts/ports-and-leases): Ports are derived from a hash and detached ones are written down, while a lease lasts exactly as long as the connection that asked for it. - [Environment layering](https://grov.site/docs/concepts/environment): The order grove builds a command's environment in, and why grove's own values win over your shell while .env.local wins over everything. - [HTTPS and DNS](https://grov.site/docs/concepts/https-and-dns): A local root, a wildcard leaf, real DNS pointing at loopback, and why grove serves 127.0.0.4 rather than 127.0.0.1. - [Linux and macOS](https://grov.site/docs/concepts/platforms): Low ports differ by platform. Here is the privileged step each one needs, what it changes, and where grove keeps its state. ## Reference - [grove.toml](https://grov.site/docs/reference/grove-toml): Every key grove reads from grove.toml and grove.local.toml, what each one does, how the two files merge, and what grove refuses. - [Templates](https://grov.site/docs/reference/templates): Every token a value in grove.toml can carry, what each one resolves to, and the error a wrong one gets when the config is read. - [Environment variables](https://grov.site/docs/reference/environment-variables): Every GROVE_ variable, the ones grove sets in the commands it runs and the ones it reads from your shell, plus the trust variables. ### CLI - [CLI](https://grov.site/docs/reference/cli): Every grove command in one place, the flags they share, the exit codes they promise, and where each one is documented in full. - [grove init](https://grov.site/docs/reference/cli/init): Write a grove.toml at the root of this worktree from what the project contains, a route per app it finds and a supabase stack's ports. - [grove install](https://grov.site/docs/reference/cli/install): Generate grove's certificate authority, trust it on this machine, and take the privileged step that reaches port 443. - [grove uninstall](https://grov.site/docs/reference/cli/uninstall): Stop grove, remove its root from this machine's trust stores, and undo the privileged step that let it answer on port 443. - [grove exec](https://grov.site/docs/reference/cli/exec): Run a command with this context's ports and hostnames in its environment, holding the lease for exactly as long as the command runs. - [grove env](https://grov.site/docs/reference/cli/env): Print the environment grove would give a command here, without running one, as shell exports for eval or as JSON for tools. - [grove ls](https://grov.site/docs/reference/cli/ls): List this context's routes with their hostnames, ports, and state, live or not, or every lease on the machine with --all. - [grove hold](https://grov.site/docs/reference/cli/hold): Re-register this context's detached ports and hostnames with a daemon that has forgotten them, after a restart, a crash, or a reboot. - [grove release](https://grov.site/docs/reference/cli/release): Hand back the detached ports this context holds, all of them or by name, and drop the hostnames that were routing to them. - [grove forget](https://grov.site/docs/reference/cli/forget): Drop the recorded ports of a context whose worktree is gone. - [grove context](https://grov.site/docs/reference/cli/context): Print the grove context this directory resolves to, its project, variant, slug, and hostname, as text or as the JSON other tools read. - [grove doctor](https://grov.site/docs/reference/cli/doctor): Check the things that have to be true before grove can serve a hostname, and name the fix for each that is not. - [grove start, stop, restart](https://grov.site/docs/reference/cli/daemon): The daemon is one process for the machine, terminating TLS and holding every lease. These bring it up, take it down, and replace it. ## Agent resources - [llms-full.txt](https://grov.site/llms-full.txt): The full Markdown of every page in one file. - [Page Markdown](https://grov.site/index.md): Append `.md` to any page URL to fetch that page as raw Markdown. - [JSON API](https://grov.site/api/docs/pages.json): Page index of the JSON docs API; each entry links the page's JSON and Markdown forms. Described by the OpenAPI document at https://grov.site/openapi.json. - [API catalog](https://grov.site/.well-known/api-catalog): RFC 9727 linkset of the APIs documented here. - [agent-readability.json](https://grov.site/agent-readability.json): Manifest of every agent-facing artifact on this site. - [Sitemap](https://grov.site/sitemap.xml): Every indexable page URL with its last-modified date.