# Installing

<!-- [doc->REQ-INSTALL-BOOTSTRAP-VERB] -->
Installation rides the GitHub CLI (`gh`) and a self-install verb built into
the binary itself *(since v0.32.0 — the hosted one-liner scripts are
retired)*. The release channel is a private GitHub repository, so each node
authenticates with an account that can read it; there is nothing else to
trust on first fetch beyond gh's authenticated TLS.

## Steps

1. **Install gh** (once per machine):

   - Windows: `winget install --id GitHub.cli`
   - macOS: `brew install gh`
   - Linux: `sudo apt install gh` (or your distro's package manager)

2. **Authenticate** with an account that can read the release channel:

   ```sh
   gh auth login
   ```

3. **Download the platform binary** from the release channel:

   ```sh
   gh release download --repo BigscreenVR/spt-bs-releases --pattern 'spt-x86_64-linux'       # Linux (glibc)
   gh release download --repo BigscreenVR/spt-bs-releases --pattern 'spt-x86_64-windows.exe' # Windows
   ```

   The published assets are `spt-x86_64-windows.exe`, `spt-x86_64-linux`
   (glibc), and `spt-x86_64-linux-musl`. The downloaded file keeps its
   `spt-*` name — don't rename it.

4. **Run the self-install verb** from the downloaded binary (on Linux
   `chmod +x` first — `gh` does not set the exec bit):

   ```sh
   chmod +x ./spt-x86_64-linux && ./spt-x86_64-linux install   # Linux
   .\spt-x86_64-windows.exe install                            # Windows
   ```

The verb places the binary at the canonical install path (the spt home's
`bin` dir), registers that directory on your **user** PATH (at most once —
re-running is always safe), and refuses a binary built for another platform.
It is non-interactive by construction. First-run identity generation and
daemon start happen on the first normal `spt` invocation, exactly as before.

The PATH change reaches **new** terminals only; the verb prints the absolute
installed path for use in the current one.

## Flags

| Flag | Meaning |
|---|---|
| `--dir <path>` | Override the install directory |
| `--no-path` | Skip user-PATH registration |

## Trust model

First fetch: gh's authenticated TLS + release-channel access control.
Thereafter `spt update` performs full Ed25519 verification against the
[two-key trust anchor](../self-update/overview.md#the-trust-chain) embedded
in the binary — the update carrier is also gh, and the signature chain is
carrier-independent.

## OS-service registration

Not yet: the daemon auto-starts on any `spt` invocation, which covers
dev-stage use. Known gap until then: after a reboot, a node is unreachable
until something on it invokes `spt`. Service registration ships in a later
release.
