# ermite A single-user Git forge in one Go binary. ermite hosts bare repositories, serves clone and push over HTTPS, and shows them in a read-only web interface. Status: early development. `ermite serve` serves Git over HTTP (clone, fetch, push), answers `GET /-/health`, and serves the read-only web: the home list, the summary of a repository (README, clone URL, facts, recent commits) and its refs. Tree, file, commit and live pages are still to come. ## Run ```sh export ERMITE_DATA_DIR=/var/lib/ermite export ERMITE_PUBLIC_URL=https://git.example.com export ERMITE_ADMIN_TOKEN=$(head -c 32 /dev/urandom | base64) ermite serve ``` | Variable | Default | Notes | |---|---|---| | `ERMITE_DATA_DIR` | required | absolute path of the data root | | `ERMITE_PUBLIC_URL` | required | `http(s)` base URL, no path | | `ERMITE_ADMIN_TOKEN` | required | at least 32 characters | | `ERMITE_ADDR` | `:7341` | listen address | | `ERMITE_TRUSTED_PROXIES` | empty | comma-separated CIDRs | | `ERMITE_GIT` | `git` | git 2.45 or newer | | `ERMITE_SOURCE_URL` | `$ERMITE_PUBLIC_URL/ermite` | link to the source (AGPL) | | `ERMITE_LOG_LEVEL` | `info` | `trace`, `debug`, `info`, `warn`, `error` | | `ERMITE_LOG_FORMAT` | `json` | `json` or `console` | `ermite version` prints the version (and the server's when `ERMITE_URL` is set). ## Remote CLI The same binary drives a running server over its API. It reads `ERMITE_URL` (the server address, `http://` or `https://`) and `ERMITE_TOKEN` (a bearer token; optional for public reads). A token sent over plain `http://` to a host that is not loopback triggers a warning on every call. ```sh export ERMITE_URL=https://git.example.com ERMITE_TOKEN=ermite_... ermite repo list | show | create [--description …] [--visibility public] | edit [--description …] [--visibility …] [--default-branch …] | delete [--yes] ermite token create