# Установить vibe {#root}

@status:doc/work @audience:user

[p01] vibe — одна программа без рантайма, который надо ставить. На Windows вы скачиваете архив и распаковываете его; на любой платформе с тулчейном Rust — собираете из исходников. Когда всё готово, одна команда печатает версию.

[p02]
```prompt
Установи vibe на этой машине: на Windows — из последнего релизного архива на github.com/vibevm/vibevm, иначе — собрав чекаут исходников его скриптом первого запуска. Затем открой новую оболочку и подтверди, что `vibe --version` печатает версию.
```

- needs: доступ по сети к github.com; на платформе, отличной от Windows, — git и тулчейн Rust

outcome: `vibe --version` печатает `vibe 1.0.0` в новом терминале, а `vibe self doctor` не находит проблем

- assert: `vibe --version`
- assert: `vibe self doctor`

## Что происходит {#what-happens}

[p03] На Windows агент скачивает релизный архив, распаковывает его и запускает скрипт-установщик. Скрипт импортирует бинарник в управляемую папку vibe под `~/.vibe/opt`, помечает его активным и добавляет в пользовательский `PATH` одну папку с маленькими скриптами-лаунчерами. На остальных платформах агент клонирует репозиторий с исходниками и запускает его скрипт первого запуска, который собирает программу и устанавливает её через тот же менеджер. В обоих случаях получается одна и та же раскладка: версии под `~/.vibe/opt/vibevm/`, лаунчеры в `~/.vibe/opt/bin/` и указатель на текущую версию.

> [p04] `$VIBEVM_INSTALL_ROOT` (the install BASE) defaults to `~/.vibe` → root
>   `~/.vibe/opt` in normal use (owner ruling 2026-08-20, the release-1.0
>   install path; until then the default base was the bare home dir → `~/opt`).
>   An explicit override keeps its meaning — `<override>/opt` — and one env var
>   still relocates everything; tests pin it to a temp dir. A managed binary
>   keeps recognising its own root by shape (the trailing `opt` component),
>   so both generations of store keep working.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#ROOT-DEFAULT>

[p05] vibe работает на Windows, macOS и Linux. Холодный старт одной строкой — это скрипт по устойчивому адресу: `https://vibevm.org/install.sh` для Bash и `install.ps1` для PowerShell. Он скачивает манифест — список файлов выпуска с их размерами и дайджестами — и проверяет по нему небольшой бутстрап-бинарник, а тот проверяет и устанавливает полный бандл. Менеджеры пакетов вроде Homebrew и WinGet — позже.

> [p06] **Decision:** M0 builds and runs on macOS, Linux, and Windows.
>
> <spec://org.vibevm.core/vibevm/common/PROP-000#PLATFORMS-TRIO>

> [p07] Stable endpoints provide one-line native cold start: Bash for Linux/macOS/WSL
>   and PowerShell for Windows. Each bounded script downloads
>   `DISTRIBUTIONS.json`, verifies a small raw `vibe` bootstrap by size/SHA-256,
>   then that Rust binary verifies and atomically installs the full bundle.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#COLD-START-PATH>

> [p08] The scripts are shipped release assets `install.sh` and `install.ps1` and
>   are exposed by stable `https://vibevm.org/install.*` redirects. Homebrew,
>   WinGet, and CMD installers remain outside this slice.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#BOOTSTRAP-SCRIPT-LATER>

## Руками {#by-hand}

### На Windows (os:windows) {#windows}

[p09] 1. Скачайте `vibe-<version>-windows-x86_64.zip` со страницы релизов `github.com/vibevm/vibevm`.

[p10] 2. Распакуйте архив в папку на ваш выбор.

[p11] 3. В этой папке запустите установщик:

[p12] Example `windows-install` is copied from the source page at projection time.

[p13] 4. Откройте новый терминал, чтобы изменённый `PATH` был прочитан.

[p14] 5. Проверьте результат:

[p15] Example `version` is copied from the source page at projection time.

[p16] В архиве есть и `SHA256SUMS.txt`. Сравните дайджест `vibe.exe` со строкой в этом файле, прежде чем запускать установщик. Установщик делает ту же проверку.

### Из исходников, на любой платформе {#from-source}

[p17] 1. Установите git и тулчейн Rust. OpenSSL не нужен.

> [p18] A from-source build needs **git**, a **Rust toolchain** (rustc + cargo,
>   stable ≥ 1.93, edition 2024 — via rustup so the pin resolves), and a
>   **system linker / C toolchain** (Windows: VS Build Tools; macOS: Xcode CLT;
>   Linux: `build-essential`). A native binary install needs none of those;
>   its bootstrap uses only the platform download/TLS facilities.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#TOOLS-LIST>

[p19] 2. Клонируйте репозиторий: `git clone https://github.com/vibevm/vibevm.git` — и войдите в папку.

[p20] 3. Запустите скрипт первого запуска: `bash tools/first-run.sh` на Linux и macOS, `.\tools\first-run.ps1` на Windows. Он собирает программу, устанавливает её в управляемое [хранилище](../glossary/index.xml#store) и настраивает лаунчеры.

[p21] 4. Откройте новый терминал и выполните `vibe --version`, затем `vibe self doctor`.

[p22] Позже `vibe self update` переводит установку на новейший выпуск, а `vibe self reinstall` скачивает текущую заново. `vibe self ls` перечисляет версии на машине, а `vibe self rollback` возвращает предыдущую.

> [p23] `self install <selector>` — from a source execution, build the selected
>   ref; from a managed binary execution, an explicit `X.Y.Z` installs that
>   native release. Flags: `--release` / `--profile <debug|release>` (source
>   lane); `--mirror <gitverse|github>` (force the source lane); `--force`
>   (always allocate a fresh immutable `#N`).
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#CMD-INSTALL>

## Где что лежит {#where-things-go}

[p24] Всё своё vibe держит в одной папке вашего домашнего каталога, `~/.vibe/`: установленные версии и их лаунчеры под `opt/`, машинное хранилище скачанных пакетов под `cache/`, клоны [реестров](../glossary/index.xml#registry) под `registries/` и ваши файлы настроек. Больше он никуда не пишет, а всю папку можно перенести, задав переменную окружения `VIBE_SETTINGS`.

> [p25] **The settings home is `~/.vibe`** (owner, 2026-08-20). This document previously named `~/.config/vibe/config.toml`; the code has treated `~/.vibe` as canonical all along and the XDG path only as a legacy location an operator is invited to migrate out of. The correction is to this document, not to the tree.
>
> <spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-010#THE-SETTINGS-HOME-IS-DOT-VIBE-NOT-XDG>

[p26] Установщик никогда не перезаписывает работающий бинарник и никогда не правит ваш `PATH` дважды: он добавляет одну запись, огороженную маркером, и не трогает остальное.

> [p27] **never clobber** (only our entry is added; the rest of `PATH` is
>   preserved),
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#RULE-NEVER-CLOBBER>

## Особые случаи и правила {#edge-cases}

[p28] Если `vibe --version` ничего не печатает в том терминале, где вы запускали установщик, откройте новый: изменение `PATH` действует только для новых оболочек.

[p29] Готовый бинарник откуда угодно можно принять в управляемое хранилище без тулчейна: `vibe self import ./vibe.exe --tag 1.0.0 --use`.

> [p30] `self import <PATH> --tag <X.Y.Z>` — put a legacy READY-BUILT local `vibe`
>   executable into the inventory as an immutable `tag:` instance, reusing the
>   store/placer/lock/state machinery (built 2026-08-20 for the 1.0.0
>   distributive; the install.ps1 of the zip calls it instead of duplicating
>   `state.toml`). Local by construction: no network, no signature machinery —
>   the file is streamed through SHA-256 once, and that digest drives
>   idempotence: same tag + same digest reuses the instance; same mutable tag +
>   different digest creates a new local `#N` beside the preserved old one.
>   `--replace-candidate` remains compatibility spelling. Optional `--commit`, `--profile`
>   (default `release`); inactive by default — `--use` runs the same complete
>   shim/PATH/pointer/advisory-HOME activation as every other lane.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#CMD-IMPORT>

[p31] Собрать произвольный git-ref — значит выполнить произвольный код, как при любой сборке из исходников. Собирайте из репозитория и веток, которым доверяете.

> [p32] Building an arbitrary ref is arbitrary code execution — inherent to a build
> tool the user invokes deliberately, and accepted.
>
> <spec://org.vibevm.core/vibevm/common/PROP-019#ACE-ACCEPTED>

