# Barn 1.0.0: the first stable release

> Barn's first stable release hardens destructive operations, data-disk recovery, catalog integrity, and cancellation, and updates image catalog revision to 2026110502.

---

LLMS index: [llms.txt](/llms.txt)

---

**Released on 2026-11-05.** Barn 1.0.0 is the first stable release. For the latest stable release, see **[Barn 1.1.0](../1.1.0/)**.

Barn 1.0.0 completes a pre-release audit of destructive operations, data-disk recovery, catalog integrity, and process cancellation. It embeds signed image catalog revision `2026110502`, including Debian 13 image `20261103.2651.1` for amd64 and arm64.

[Install Barn](/docs/start/installation/) · [GitHub release and assets](https://github.com/pgsty/barn/releases/tag/v1.0.0) · [Changelog](https://github.com/pgsty/barn/blob/v1.0.0/CHANGELOG.md)

## Changes {#changes}

- **Whole-deployment recreate keeps omitted nodes.** `barn recreate` without node selectors refuses an inventory that no longer lists an existing node (`conflict`, reason `nodes_removed`, exit 4) before any VM stops. Earlier releases destroyed the omitted node without recreating it. Run `barn destroy NODE` to remove it, or add it back to the inventory. The confirmation lists every node that will be replaced, and the scope is checked again under the destruction lock (`deployment_changed` when the applied state changed during preflight).
- **Destroying the control node keeps the lab usable.** The first remaining node becomes the control node, so `ssh-config`, `hosts`, `exec`, and `provision` keep working. Update the inventory's control role, then run `barn up` to install its control SSH access. Barn refuses to destroy the control node, before deleting anything, when the successor has an unfinished prepare record that cannot be completed; the error names the successor.
- **Data disks are reset only on recognized corruption.** Blank disks are initialized. An ext4 or XFS filesystem is reset only when the checker reports recognized corruption, including on a persistent disk. Partition tables, signatures without a UUID, unsupported filesystem features, and unknown checker failures keep their data and produce a warning. Existing guests receive the updated helper on their next `barn up`.
- **One confirmation before host changes.** On a terminal, `up`, `start`, `restart`, and `reload` show the host-preparation plan and ask once before installing packages or the Barn network. Without a terminal they report what is missing; run `barn setup --yes` for unattended preparation.
- **`--yes` for destruction.** `destroy`, `recreate`, `mac destroy`, and `mac recreate` accept `--yes`. `--force` keeps working, and `mac stop --force` still powers the VM off.
- **Catalog failures exit 7.** A catalog signature or signed revision that does not verify exits 7 (`integrity`, reason `catalog_signature` or `catalog_equivocation`). Permission and I/O errors on a cached signature remain runtime failures (exit 1). Both official repositories share the embedded upgrade baseline, and a new trusted signature over identical catalog bytes is accepted.
- **Cancellation reaches `sudo`.** Cancelled commands receive SIGTERM, which `sudo` forwards, and Barn waits at most 10 seconds for the process and its inherited pipes.
- **Host networking and Mac images.** `barn network uninstall` keeps global networkd unit state when other host links exist (`preserve_networkd`, `checks.networkd`). Mac image pruning keeps bases that interrupted recreates still reference.
- **CLI.** `barn` without a command prints the complete help; `--json` and `--yaml` keep the `actions[]` document. Explicit `--json`, `--yaml`, and `--verbose` override `BARN_OUTPUT` and `BARN_VERBOSE`, and help stays available when those variables are invalid.
- **Dependencies.** Go 1.27.3, `golang.org/x/net` 0.62.0, and `go.yaml.in/yaml/v3` 3.0.6.

## Upgrade {#upgrade}

Upgrade through the channel you installed with. The installer selects the latest stable release (`1.1.0`), verifies the archive against the release's `checksums.txt`, and installs into `~/.local/bin` without sudo; set `BARN_VERSION=1.0.0` to pin `1.0.0`. DEB and RPM packages are attached to the GitHub release.

```bash {tab="Homebrew" group="barn-upgrade" value="brew"}
brew update
brew upgrade pgsty/infra/barn
barn version
```

```bash {tab="Linux installer" value="installer"}
curl -fLO https://github.com/pgsty/barn/releases/download/v1.0.0/install.sh
BARN_VERSION=1.0.0 bash install.sh
barn version
```

Upgrading from 0.9.3 keeps VM disks, SSH keys, state, and configuration under `~/.barn` and requires no recreation. Stop macOS VMs before replacing the native component. The Apple Silicon archive and the Homebrew installation include the signed, notarized `Barn.app` with the CLI and hosts helper; Intel macOS and Linux `amd64`/`arm64` archives provide the CLI and hosts helper.

Check scripts for three changes: catalog signature failures exit 7 instead of 1, a whole-deployment `recreate` exits 4 when the inventory omits an existing node, and interactive `up` asks before preparing the host.

## Known limitations {#limitations}

- A malformed Mac recovery journal stops `barn mac image ls`, the space estimate in `barn mac doctor`, and image pruning until it is repaired.
- One unreadable Mac machine state stops `barn mac ls`; the other machines stay usable by name.
- Linux guest shares on macOS hosts need a guest kernel with 9p support.

Security fixes land in the latest 1.x patch release; 0.x releases receive no further fixes. See the [Linux quick start](/docs/start/tutorial/) and [Mac guide](/docs/start/macos/).
