Skip to content

1 - Barn 1.2.0: resources, root growth, and host names

Resource overrides, recoverable root-disk growth, configurable concurrency, inventory host names, and Go 1.27.4.

Barn 1.2.0 was released on 2026-11-12 from commit 90f6158. It adds resource overrides, recoverable root-disk growth, configurable lifecycle concurrency, and inventory-based host names. The bilingual command reference covers all 57 operation commands and their options.

Upgrade from 1.1.0

Omitted Linux CPU/memory values now resolve to 1 vCPU / 2 GiB, down from 2 vCPUs / 4 GiB. This also affects existing inventories that omit these fields. To preserve the earlier defaults, set vm_cpu: 2 and vm_mem: 4GiB under all.vars, retain any per-host overrides, and inspect barn plan before applying changes. Existing applied VMs keep their resources until a resource-changing operation is requested. Root and data-disk defaults remain 64 GiB and 128 GiB.

VM resources

Use --cpu/-C, --mem/-M, --scale/-S, and --disk/-D alongside image and architecture selection. Corresponding BARN_* environment variables provide defaults; command-line values take precedence. Generated inventories save the base settings. Plans, validation, status, and lifecycle output display effective resources as SPEC labels such as 1c2g; JSON retains numeric resources, bases, scale, and input sources.

resize --disk/-D grows an existing root disk. Barn stops QEMU before enlarging the disk, verifies its last plain ext4/XFS partition inside the guest, and records recovery stages so an interrupted operation can resume. It preserves VM identity, keys, and data and restores the original running/stopped intent. Shrinking and unsupported layouts are rejected. See root growth and recovery.

Lifecycle concurrency

--parallel/-p controls node concurrency for up, start, stop, restart, reload, recreate, destroy, and purge. The default is the logical CPU count minus two, with a minimum of one. Zero runs all selected nodes concurrently; a positive value sets the limit. Retry commands preserve explicit overrides.

Inventory host names

Declare service names in all.vars.vm_hosts, preview with barn hosts install -f pigsty.yml --json, and apply with barn hosts install -f pigsty.yml --yes. The inventory path works before VM creation; omitting -f continues to use applied node names. Identical mappings merge case-insensitively; conflicting addresses fail. These host-side mappings leave VM identity and guest configuration unchanged. See extra host mappings.

Dependencies and packaging

Source builds, CI, and release artifacts use Go 1.27.4. The dependency refresh updates golang.org/x/sys to 0.50.0, golang.org/x/term to 0.48.0, golang.org/x/text to 0.44.0, and github.com/klauspost/compress to 1.20.4. Packaging uses GoReleaser 2.20.1, bundled nFPM 2.48.0, and Syft 1.57.1. RPM payload verification now requires SOURCE_DATE_EPOCH timestamps. Pins and license inventories are recorded in the release source.

govulncheck found no vulnerabilities in imported packages or reachable symbols. Its module-level report lists GO-2026-5932 in golang.org/x/crypto/openpgp, which Barn does not import.

Image catalog

The embedded signed catalog remains revision 2026110502, with 9 distribution families and 17 architecture-specific stable artifacts. Both official repositories passed signature verification, activation in fresh data roots, embedded-byte comparison, and availability/size checks. Ubuntu 24.04 on the native architecture remains the default image.

Release validation

All 20 published attachments were downloaded again and matched their checksums. Acceptance passed 18 Linux/KVM operations, 15 native Mac lifecycle phases, and desktop, bidirectional clipboard, and window-close checks. The public installers, Homebrew upgrade and formula test, and three-platform Homebrew CI passed. See the release validation record for signing, notarization, upgrade, and recovery evidence.

Install or build

Stop running Mac VMs before replacing Barn.app, then upgrade through Homebrew:

brew update
brew upgrade pgsty/infra/barn

Or install the versioned release:

curl -fLO https://github.com/pgsty/barn/releases/download/v1.2.0/install.sh
BARN_VERSION=1.2.0 bash install.sh
export PATH="$HOME/.local/bin:$PATH"
barn version

The installer verifies archive SHA-256. The Darwin arm64 archive includes the signed, notarized CLI, helper, and Barn.app; other archives and Linux DEB/RPM packages contain the CLI and matching helper. Find every platform in the download table, then follow installation or source builds.

2 - Barn 1.1.0: image selection and live progress

Select Linux images and guest architectures from the CLI, follow live progress, and recover interrupted resource resizing.

Released on 2026-11-09. Barn 1.1.0 adds image and guest-architecture overrides, live progress tables, and more reliable CPU/memory resizing. It embeds signed image catalog revision 2026110502, with 9 distribution releases and 17 architecture-specific artifacts. The default remains Ubuntu 24.04 on the host’s native architecture.

Image and architecture selection

Use --image/-I and --arch/-A with plan, up, reload, recreate, and resize to override the inventory for one command. Image overrides apply to selected nodes, and suggested follow-up commands retain the selections, overrides, and repository. Existing VMs require recreate to change their image or architecture.

barn plan -I u24 -A amd64
barn up -I u24 -A amd64

init and generated setup templates save the choices into the new inventory; validate accepts the same overrides without changing the file. Image info, pull, and named imports accept -A. Architecture names include amd64 (x86_64, x64), arm64 (aarch64, a64), and native; image info and image pull retain the earlier -a spelling.

Matching guests use HVF or KVM. Foreign guests use QEMU TCG for compatibility testing, with a stable ARM CPU model for UEFI boot. On Linux, install the target QEMU system emulator and matching firmware separately; barn setup prepares native host dependencies. All nodes in a deployment share one guest architecture.

Progress and results

Linux and macOS lifecycle commands, setup, network operations, image transfers, and repository maintenance now share live progress tables and consistent completion summaries. Terminal redraws stop before a prompt or error, and redirected output uses ordinary lines. Validation lists the checks it performed. Status tables and labels use plain ASCII, including [DONE], [FAILED], and [CANCELLED], and barn purge deletes the deployment immediately by default (pass --ask for an interactive confirmation prompt). Use --json or --yaml for structured results.

Recovery fixes

  • Offline resize holds the deployment lock across inspection, shutdown, and commit, preserving QEMU process identity when another command tries to start the same node.
  • Interrupted online resize retains a recovery marker before hotplugging. status reports that live CPU or memory may differ from the applied configuration (stage: "resize", reason: "resize_incomplete"); retry resize or run up / start to recover.
  • Plans for deployment-wide changes include new nodes in the recreation scope and avoid suggesting an up command before recreation is complete.
  • Lifecycle retry commands preserve an explicit official --repo, even when BARN_REPO points elsewhere. Missing native QEMU programs trigger host preparation; missing foreign Linux emulators name the required dependencies.

YAML parsing uses go.yaml.in/yaml/v4 4.0.0, and flag parsing uses pflag 1.1.0. Existing YAML input/output settings are retained, and unfinished YAML documents report the parser’s EOF line. Packaged licenses and SPDX documents cover the updated dependencies.

Upgrade and downloads

Stop running macOS guests before replacing Barn.app, then upgrade:

brew update
brew upgrade pgsty/infra/barn

Or download and run this release’s installer:

curl -fLO https://github.com/pgsty/barn/releases/download/v1.1.0/install.sh
BARN_VERSION=1.1.0 bash install.sh
barn version

The installer verifies the selected archive against checksums.txt. The Darwin arm64 archive includes the signed, notarized CLI, hosts helper, and Barn.app; the other archives and Linux DEB/RPM packages provide the CLI and matching helper. VM disks, keys, and state remain under BARN_HOME.

See the documentation, full changelog, and changes since 1.0.0.

3 - 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.

Released on 2026-11-05. Barn 1.0.0 is the first stable release. For the latest stable release, see Barn 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 · GitHub release and assets · Changelog

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 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.

Homebrew
brew update
brew upgrade pgsty/infra/barn
barn version
Linux 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

  • 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 and Mac guide.

4 - Barn 0.9.3: safer resizing, selected nodes, and recovery

Resource-only VM resize, independent node selection, flexible paths and shares, recoverable lifecycle operations, and image catalog revision 2026102802.

Released on 2026-10-31. Barn 0.x releases use GitHub’s pre-release channel. For the latest release, see Barn 1.1.0.

Barn 0.9.3 focuses on safer changes to local labs. It adds resource-only VM resize, lets selected nodes converge independently, accepts ordinary user path forms for inventories and shares, and recovers interrupted lifecycle operations.

Install Barn · Download 0.9.3 · Source release notes

Changes

  • Edit vm_cpu or vm_mem and run barn resize [node...]. Supported increases are hot-plugged when QEMU has reserved capacity; decreases and unsupported cases use an automatic stop/start while preserving the VM identity, disks, and SSH keys. Use barn recreate for image, disk, network, or share changes.
  • plan, up, reload, recreate, and resize with selectors retain the applied definitions of unselected peers. Conflicts in addresses, aliases, control-node roles, and deployment-wide settings are checked before a node stops or is deleted.
  • barn init [template] --image and barn setup [template] --image select an image alias, channel, or version in generated templates without downloading it or rewriting an existing inventory.
  • Relative paths, ~/, and directory symlinks work for BARN_HOME, local repositories, catalog export, inventories, imported images, and share sources where applicable. Inventory-relative shares resolve beside the inventory’s real file; spaces, Unicode, overlapping sources, and readable directories owned by another user are supported.
  • Provisioning accepts any positive --parallel and --timeout. Local images and catalog artifacts with declared sizes can exceed 8 GiB; digest-indexed imports, bounded reads, registry size checks, and cache verification protect the image store. barn mac logs --lines accepts any positive line count.
  • The embedded signed catalog is revision 2026102802, with 9 distribution families and 17 architecture-specific artifacts. The default remains u24:stable on the host architecture.
  • Interrupted Linux and macOS lifecycle, persistent-disk, and replacement operations leave journaled state for safe recovery. Signals produce the structured cancelled result. barn mac up --no-wait returns when the VM process starts; run barn mac up NAME again before using SSH or exec on a machine whose first boot is still provisioning.

Upgrade

Select 0.9.3 explicitly with the download installer, or upgrade the Homebrew formula / Linux package. Existing VM disks and configuration remain under ~/.barn; no VM recreation is required.

curl -fLO https://github.com/pgsty/barn/releases/download/v0.9.3/install.sh
BARN_VERSION=0.9.3 bash install.sh

Run barn update when you want to activate the current signed catalog from a repository. Pin vm_image: family@version when a pipeline must remain on one exact image across catalog updates. Stop macOS VMs before replacing the native component. See the Linux quick start and Mac guide.

5 - Barn 0.9.2: signed Barn.app and explicit SSH/exec arguments

Signed and notarized Barn.app in the Apple Silicon release and Homebrew installation, plus the SSH/exec argument contract.

Released on 2026-10-30. Barn 0.x releases use GitHub’s pre-release channel.

Barn 0.9.2 includes the complete native macOS guest runtime in the Apple Silicon download and Homebrew installation. You can create Linux and macOS VMs after installing a single package, without installing Go or Xcode.

Install Barn · Download 0.9.2 · Source release notes

Changes

  • The Darwin arm64 archive contains barn, barn-hosts-helper, and Barn.app from the same source commit. All three executables use Developer ID signatures and are submitted together for Apple notarization; the app carries a stapled ticket and passes Gatekeeper assessment.
  • brew install pgsty/infra/barn installs the CLI, QEMU, helper, and native app. The CLI discovers the app under Homebrew’s libexec. macOS guests require Apple Silicon, macOS 27+, and a logged-in desktop session.
  • The helper is signed before its final SHA-256 is embedded in the CLI. Packaging checks the pair again after attaching the native payload to the release archive.
  • ssh, exec, mac ssh, and mac exec require -- before remote commands. SSH passes a command line to the guest shell; exec preserves individual arguments. Use sh -c with exec for pipelines or redirection.
  • Linux arm64/amd64 and Intel macOS continue to ship the CLI and helper for QEMU Linux guests.

Install and use

brew install pgsty/infra/barn
barn version

# Linux guest
barn up
barn ssh
barn exec meta -- uname -a

# macOS guest on Apple Silicon / macOS 27+
barn mac doctor
barn mac up mac1
barn mac open mac1
barn mac ssh mac1

The first macOS VM downloads Apple’s restore image and prepares a reusable base installation. Supply an existing compatible IPSW with barn mac setup --ipsw PATH to use a local restore image.

Upgrade

Stop running Mac VMs before replacing the app, then run brew update and brew upgrade pgsty/infra/barn. VM disks and configuration remain in ~/.barn; no recreation is required. Update older SSH/exec scripts to use -- and pass exec programs and arguments separately.

For the download installer, specify BARN_VERSION=0.9.2 because GitHub’s releases/latest endpoint does not select pre-releases. The release includes four platform archives, Linux DEB/RPM packages, SPDX inventories, checksums, the installer, and the generated Homebrew formula. release.json records the exact source commit and pinned build tools.

Path, sharing, node-selection, and limit improvements implemented after this release are documented under Barn 0.9.3 Changes.

6 - Barn 0.9.1: Go 1.27.3 toolchain and Barn.app rename

Go 1.27.3, current dependencies, and Barn.app naming and signing. Upgrade notes.

Released on 2026-10-22. Barn 0.x releases are published via GitHub’s pre-release channel. For the latest release with a signed and notarized Barn.app in the Apple Silicon archive and Homebrew formula, see Barn 1.1.0.

Barn 0.9.1 updates the Go toolchain and dependencies and completes the native Mac app rename to Barn.app. CLI commands, inventory format, image catalog, and existing VM state paths remain compatible with 0.9.0.

Install Barn · Download 0.9.1 · Validation history

Changes

  • Go 1.27.3 is the baseline for source builds, CI, and release artifacts. All modules required by go.mod—including indirect and dependency-test modules—are updated to their latest stable versions as of 2026-10-22, including golang.org/x/crypto v0.58.0, x/net v0.61.0, x/sys v0.49.0, x/term v0.47.0, and x/text v0.43.0.
  • Barn.app replaces the Barn Mac.app bundle name, using bundle identifier com.pgsty.barn and updated Barn menu labels. The 0.9.1 CLI continues to discover older Barn Mac.app bundles if present. Native protocol version 2 and ~/.barn/mac are unchanged.
  • The standalone Mac runner uses hardened-runtime signing and requests a secure timestamp when signing with a Developer ID certificate. Payload validation checks the app bundle name, identifier, and executable alongside its version, commit, and content digests. Both the installer and Homebrew template use the new app path.
  • Build and verification tools are updated to GoReleaser 2.18.3 (with bundled nFPM 2.47.0), standalone nFPM 2.48.0, Syft 1.55.0, Staticcheck 2026.2.2, deadcode 0.52.0, golangci-lint 2.15.0, and govulncheck 1.9.0. GitHub Actions remain pinned by commit, and dependency-license inventories match the updated modules and toolchain.

Upgrade

Pin 0.9.1 explicitly when running the download installer, or upgrade via the Homebrew formula or Linux package manager (see the installation guide).

Before replacing the native Mac component, stop running Mac VMs and upgrade the CLI, hosts helper, and app together from the same build—the 0.9.0 CLI only looks for the old Barn Mac.app bundle name. Desktop window positions now use ~/Library/Preferences/com.pgsty.barn.plist, so saved window coordinates may reset once. VM disks, credentials, and configuration under ~/.barn/mac are preserved without recreating VMs or refreshing image catalogs.

The 0.9.1 release assets include macOS and Linux (arm64 / amd64) CLI and hosts-helper archives plus Linux DEB and RPM packages. To use barn mac, build the CLI and Barn.app together from tag v0.9.1 with Go 1.27.3 and Xcode 27 as described in the macOS guide.

To build the CLI alone from tag v0.9.1:

BARN_VERSION=0.9.1 make build
bin/barn version

See the 0.9.1 validation record for the build, CI, VM acceptance, and signing scope.

7 - Barn 0.9.0: native macOS guests and smoother Linux recovery

Linux labs, native macOS machines, clearer diagnostics, and recovery for interrupted operations.

Released on 2026-09-30. Barn 0.9.0 manages both Linux labs and native macOS machines from a single CLI, while improving diagnostics and recovery after interrupted operations. For the latest release, see Barn 1.1.0.

Install Barn · Download 0.9.0 assets · Full changelog

macOS machines on Apple Silicon

barn mac creates named macOS 27 virtual machines with a native desktop window, SSH, shared folders, and text clipboard sharing. The first machine installs a shared golden base from Apple’s verified restore image, and subsequent machines clone that base with APFS copy-on-write—each getting its own writable disks, credentials, and private subnet.

barn mac up
barn mac open
barn mac ssh

Mac guests require Apple Silicon, macOS 27+, and the native app bundle built from the release tag with Xcode 27 (see the macOS guide). In accordance with Apple’s Virtualization.framework limit and software license, up to two macOS VMs can run concurrently per Mac across all tools. Mac VM state lives under ~/.barn/mac, independent of your Linux inventory and untouched by Linux destroy or purge.

Easier Linux lab recovery

Re-running barn up resumes unfinished setup: you can fix an inventory error after a failed first start and retry in place, or resume an interrupted destroy. After a host reboot, if the OS assigns a saved QEMU PID to an unrelated process, Barn detects the mismatched process birth time, marks the VM stopped, and never signals the unrelated process.

Concurrent mutating commands wait up to ten minutes for the deployment lock and report which operation holds it, while read-only status and SSH commands remain available. Execution plans now list each node’s data disks, including the default 128 GiB /data disk.

Diagnostics with a next step

Inventory validation errors report the violated rule, value, and source line, and suggest corrections for mistyped vm_* fields. Failed external commands preserve the relevant tail of stderr, and JSON error responses use a consistent error class with optional reason and next fields.

Host setup explains package and network changes before prompting for sudo. Symlinked ~/.ssh/config files managed by dotfile tools are left untouched; Barn prints the Include line for you to add.

Updated Linux images

Embedded catalog 2026093001 covers 41 artifacts across 9 families. Debian 12/13 and Rocky Linux 8/9 use Barn-normalized images: Debian includes offline XFS tools and a pre-generated en_US.UTF-8 locale while keeping C.UTF-8 as default; Rocky Linux 8 uses its shipped chrony configuration and completes SELinux filesystem labeling during image build to avoid first-boot relabeling delays. Ubuntu retains Canonical’s upstream image bytes, with Ubuntu 24.04 (u24) as the default guest OS.

barn image list
barn update

barn update refreshes the local Linux image catalog without modifying the barn binary or existing VM disks.

Upgrade notes

  • The CLI command is barn, the default inventory filename is barn.yml, state lives under ~/.barn, and environment variables use the BARN_* prefix.
  • The rm alias has been removed; run barn purge explicitly to delete an entire Linux deployment including persistent disks and keys.
  • In JSON output, recreate_required and nodes_removed are now reason values under error: "conflict", resource_conflict is renamed to resource, and missing inventories or unknown images exit with code 2 (usage). See the exit-code reference.
  • stop and start preserve all disks, while recreate replaces root and non-persistent data disks. See the storage guide for how up handles damaged data-disk filesystems during recovery.

Get started with the Linux tutorial or the macOS guide, and report issues in GitHub Issues.

8 - Barn 0.8.0: clearer recovery and refreshed images

Recover host preparation, isolate failed nodes, preserve VM identities, and start the September Debian and Ubuntu images.
Note

Historical release record (0.8.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.8.0 cuts down on manual cleanup after interrupted host setup or partial VM starts, and refreshes the Debian and Ubuntu images while preserving previous catalog artifacts and existing VM identities.

What changed

  • Host preparation follows the command. Interactive start, restart, and reload can install missing host tools and bring an inactive Barn network back online. On macOS, first-time network installation locates or installs Homebrew (or downloads and verifies the pinned archive) before prompting for administrator credentials, preventing Homebrew from invalidating an earlier sudo token.
  • Failed nodes do not block independent peers. During up or start, a missing host share fails only the affected node while healthy stopped peers continue to start. Errors report both the missing host source path and guest mount point without creating empty placeholder directories, and restart, reload, and recreate verify share paths before stopping running VMs.
  • Recovery preserves identity. If a deployment public key is missing, Barn derives it from the existing private key; if the private key is lost, Barn prints backup recovery steps rather than generating a replacement keypair that existing guests would reject. macOS socket_vmnet log-directory recovery preserves network ownership markers to avoid false subnet-conflict errors.
  • Failures keep their context. Scoped retry hints preserve custom -f inventory paths, --repo overrides, and command names (a failed start suggests start). Initial setup and its retry share a single operation ID, bounded event logs can be written and read before deployment state exists, and inspecting uncached image metadata no longer requires qemu-img.
  • Accurate cleanup summaries. Deleting persistent disks or running purge reports the final deleted state without listing the same disks as both retained and removed. Orphaned disks from previously removed nodes no longer block destroy of the remaining lab.

September images

Embedded catalog 2026092001 contains 37 artifacts across 9 families, retaining all 27 previous artifacts and adding new amd64 and arm64 stable builds:

Family System version Image catalog version
d12 Debian 12.15 20260909.2596.1
d13 Debian 13.7 20260914.2601.1
u22 Ubuntu 22.04.5 20260913.0.0
u24 Ubuntu 24.04.5 20260911.0.0
u26 Ubuntu 26.04.1 20260918.0.0

Debian images include offline XFS tools and a pre-generated en_US.UTF-8 locale (C.UTF-8 remains default). Ubuntu images preserve Canonical’s upstream bytes and configure accounts and networking via cloud-init. Existing VMs and pinned image versions keep their current base images; see the image reference for catalog update details.

Install or upgrade

curl -fLO https://github.com/pgsty/barn/releases/download/v0.8.0/install.sh
chmod +x install.sh
BARN_VERSION=0.8.0 ./install.sh
export PATH="$HOME/.local/bin:$PATH"
barn version

For an existing lab, inspect barn plan and run barn up. start powers on existing nodes as-is, while up applies inventory changes and retries unfinished guest bootstrap. See the storage guide for how up handles damaged test data disks during recovery.

Validation and limits

Four hosts—two macOS arm64/HVF machines (m1, m5) and two Linux amd64/KVM machines (m0, m3)—completed the 7-distro pro acceptance pass covering Rocky Linux 9.8/10.2, Debian 12.15/13.7, and Ubuntu 22.04.5/24.04.5/26.04.1. Candidate 6d7870e performed a clean initialization from the LAN repository, and runtime candidate 1c054a0 upgraded in place and passed repeated healthy up, stop/start, two rounds of guest SSH, data-disk checks, Ansible configuration reads, and control-node lateral SSH (plus 7-node Ansible ping on both Macs) while preserving VM UUIDs, image identities, and disk inodes.

Single-run timings from the acceptance pass (the first up includes image download):

Host Platform Clean first up (6d7870e) Healthy up (1c054a0) Existing-disk start (1c054a0)
m0 Linux amd64 / KVM 117.915 s 3.924 s 36.944 s
m1 macOS arm64 / HVF 86.309 s 1.745 s 39.639 s
m3 Linux amd64 / KVM 98.443 s 2.169 s 44.068 s
m5 macOS arm64 / HVF 87.946 s 1.467 s 38.162 s

Release tag v0.8.0 (320a32afa8f6fca02592215aa0d5607ca4e852b2) updates only documentation relative to the tested runtime and passed local make check, source CI, the packaging snapshot, and the tag workflow. All 20 release assets (19 payloads plus checksums.txt) were verified against the public pre-release. Earlier regression and image-boot records are archived in the UX audit and image refresh record.

Isolated barn update runs against both official repositories verified signatures and activated catalog 2026092001, with all ten new image objects returning HTTP 200 and matching content lengths. Isolated installer runs on macOS arm64 and Linux amd64 verified 0.8.0 (320a32a) binary delivery, and the Homebrew tap update passed local audits and Homebrew CI.

Known limitations in 0.8.0:

  • macOS host directory sharing for Linux guests remains blocked by upstream QEMU virtfs directory-descriptor behavior on Darwin; preflight now diagnoses this earlier.
  • A missing control-node guest private key is now detected even when an older ready marker exists, though restoring peer SSH still requires recreating the control node. See the validation history for the full dated test matrix.

9 - Barn 0.7.0: simpler test labs and automatic recovery

A shorter first run, compact progress, independent guest setup, and recovery through up.
Note

Historical release record (0.7.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.7.0 streamlines first-run startup and recovery for local test labs: re-running barn up finishes interrupted work, retries guest bootstrap stages, and updates guest helper scripts in place without restarting running VMs.

What changed

  • Shorter first run. Interactive up can generate the default inventory, install missing host tools, and bring an intact inactive Barn network back online. Fast checks stay quiet while longer tasks display progress and a compact summary.
  • Independent guest stages. Data disks, host shares, guest hostnames, node-to-node SSH, and private networking initialize independently. If an optional stage fails, Barn reports the specific limitation while keeping management SSH available, and subsequent up runs skip stages that are already healthy.
  • Automatic test-disk recovery. Healthy filesystems are mounted as-is; unrecognized or confirmed-corrupt filesystems on test data disks are reformatted and remounted with an explicit data-loss notice. Transient probe failures, missing devices, busy mounts, and host I/O errors never trigger formatting.
  • Fewer manual fixes. Unwritable host shares fall back to read-only and recover on the next up once permissions are fixed. Occupied automatic SSH forward ports are reassigned for stopped guests. Interrupted image downloads resume automatically and fail over across official repositories while enforcing SHA-256 digest verification.
  • Clean output and backward-compatible state. Guest warnings are stored in a disposable cache outside the schema-2 VM documents and node directories, so older Barn binaries can still inspect and manage the deployment.

Upgrade notes

  • Re-running up performs guest recovery (there is no separate repair command), whereas start powers on existing nodes without applying inventory changes. Passing --no-wait skips readiness and recovery checks. See the storage guide for data-disk recovery rules.
  • A guest with working management SSH and optional stage warnings returns exit code 0. Automation that requires every optional feature should inspect nodes[].warnings and nodes[].repairs in --json or --yaml output.
  • If an earlier 0.6.0 bootstrap failed after deleting the staged control-node private key, up restores management SSH and reports a control-ssh warning; run barn plan and barn recreate on the control node if it needs peer-to-peer SSH.

Install or upgrade

curl -fLO https://github.com/pgsty/barn/releases/download/v0.7.0/install.sh
chmod +x install.sh
BARN_VERSION=0.7.0 ./install.sh
barn version
barn up

The release includes macOS and Linux (amd64/arm64) archives, Linux DEB/RPM packages, the installer script, checksums, SBOMs, and a Homebrew formula.

Validation

Release commit 9c6d4896d93733d1cb60a7e5d8591e9a06659c9d passed source CI, the packaging snapshot, and the tag workflow, producing 20 verified release assets. Public macOS arm64 and Linux amd64 installer runs verified binary delivery for 0.7.0, and macOS validation covered CLI smoke checks and cross-compilation.

On Ubuntu 26.04 amd64 with KVM/QEMU 10.2.1 and Ubuntu 24.04 guests, recovery tests exercised ext4/XFS corruption, retained persistent disks, failed probes, busy mounts, read-only share fallback, and repeated healthy up runs without restarting the QEMU process:

  • An interrupted 0.6.0 bootstrap (stopped at the management-egress probe) resumed under 0.7.0 in 3.3 s while preserving its data disk and UUID, and remained manageable by the 0.6.0 binary (status, stop, start, destroy).
  • A deliberately corrupted disposable ext4 data disk was reformatted and remounted in 3.2 s with an explicit data-loss notice while keeping the VM process running.

10 - Barn 0.6.0: Ubuntu 24.04 and smoother local labs

Ubuntu 24.04 defaults, useful plans before setup, clearer status, and reliable expansion and recreation.
Note

Historical release record (0.6.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.6.0 makes Ubuntu 24.04 the default guest image and improves planning, startup, scale-out, and node recreation for local Pigsty labs.

What changed

  • Ubuntu 24.04 by default. New inventories and the embedded catalog default to u24:stable. Catalog revision 2026090501 also bundles the normalized Debian 12/13 and Rocky Linux 8/9 image updates published in the official repositories.
  • Run plan before host setup. barn plan resolves catalog images without requiring QEMU or host networking to be installed first (registered local-* images still use qemu-img cache inspection). Plans display exact image versions, aggregate CPU/memory/disk totals, pending node starts, modified fields, and disk actions, while preserving custom -f inventory paths in suggested next commands.
  • Clearer status and error reporting. barn status includes image, CPU, and memory columns, and a damaged state file on one node no longer hides healthy peers—corrupt state errors name the exact file and cause. Image digest mismatches return exit code 7, SSH exit code 255 passes through unchanged, and --no-wait explicitly notes that readiness checks were skipped.
  • Preflight checks before disruption. Targeted recreate detects conflicting peer changes before deleting any disks, and reload validates startup dependencies before stopping running guests. stop, destroy, and runtime cleanup update deployment state consistently under the deployment lock.
  • Automatic guest /etc/hosts and SSH updates. Starting or removing nodes refreshes Barn-managed /etc/hosts blocks and control-node SSH configuration inside running guests, so recreated peers remain reachable without manually pruning guest known_hosts. User-authored SSH config entries and global option scopes remain intact.
  • Cleaner CLI parsing. Custom init output paths print matching follow-up commands, output flags no longer swallow adjacent option values, malformed integer sizes and multi-document YAML files are rejected rather than truncated, and ALL_PROXY/all_proxy acts as a fallback behind scheme-specific proxy variables and NO_PROXY.

Upgrade notes

Upgrading Barn leaves existing VM disks and explicit vm_image settings untouched. If an older inventory relied on the implicit Debian 13 default, add vm_image: d13 under all.vars before running barn up with 0.6.0. Always inspect barn plan before applying changes.

Applying CPU or memory changes requires barn recreate, which replaces root and non-persistent data disks while retaining persistent data disks. Passing --no-wait skips both readiness checks and guest /etc/hosts updates until the next barn up. Automation should consume --json or --yaml output; partial status results return healthy nodes alongside a failures array and exit code 5.

Install or upgrade

curl -fLO https://github.com/pgsty/barn/releases/download/v0.6.0/install.sh
chmod +x install.sh
BARN_VERSION=0.6.0 ./install.sh
barn version
barn doctor

The release also provides four platform archives, amd64/arm64 DEB and RPM packages, and a Homebrew formula. See the Linux tutorial to get started.

Validation

The lifecycle and UX changes passed code review and the full local make check suite. An isolated macOS arm64/HVF lab verified Ubuntu 24.04 boot, scale-out, control-to-peer SSH, stop/start, reload, recreate, partial status failure handling, and scale-in, and the guest SSH option-scoping fix was verified against sshd/ssh -G configuration evaluation.

The tag workflow repeated all source checks and verified the release archives, Linux packages, SBOMs, installer script, Homebrew formula, release metadata, and SHA-256 checksums.

11 - Barn 0.5.0: explicit disposal, explicit repositories, reproducible images

A no-confirmation whole-lab purge, explicit global and China repository selection, no hidden artifact fallback, and an eight-target official-image candidate pipeline.
Note

Historical release record (0.5.0). Official mirror failover was later added in 0.7.0, and the rm alias was removed in 0.9.0. Old release downloads are retired; see the CLI reference and installation guide for current usage.

Barn 0.5.0 adds an explicit command to dispose of an entire lab at once, lets operators choose between the global and China Mainland image repositories, and introduces a reproducible build pipeline for normalized official guest images while keeping the Pigsty inventory contract, deployment state format, and embedded catalog revision 2026082903.

What changed

  • barn purge (barn rm in 0.5.0–0.8.0) removes the entire Linux deployment—including persistent data disks, deployment keys, state files, and the default SSH config fragment—without interactive confirmation, while preserving the shared image cache and host-global network. Running purge when no deployment exists succeeds as a no-op; if residual node directories cannot be verified as Barn-owned, purge stops rather than deleting unknown files.
  • Explicit repository selection. Released binaries default to https://repo.pigsty.io/barn, while --mirror selects the China Mainland mirror https://repo.pigsty.cc/barn. Precedence follows --repo, --mirror, BARN_REPO, and the compiled default, and both official roots verify against the same signed catalog.
  • Strict repository pulls. Upstream URLs recorded in the image catalog document image provenance and are no longer used as implicit download fallbacks. The selected repository must serve the exact catalog-named .qcow2 artifact, or the pull fails with instructions to switch repositories or import a local file.
  • Digest-pinned offline image builder. The source repository includes an offline normalization pipeline for Debian 12/13 and Rocky Linux 8/9 across amd64 and arm64, recording the exact package closure, SBOM, provenance, and testing manifest so candidate repositories can be assembled for native boot tests and signing.
  • Toolchain updates. Source and release pins move to Go 1.27.1, GoReleaser 2.18.0, golangci-lint 2.13.2, and updated Go modules.

Image normalization pipeline

The eight-target build matrix prepares normalized guest candidates:

  • Debian 12/13: installs offline XFS userspace tools for xfs data disks.
  • Rocky Linux 8: provides /usr/bin/python3, fixes sshd_config.d drop-in inclusion, and cleans legacy network interface state.
  • Rocky Linux 9: cleans legacy network interface state to match Rocky Linux 8.

Candidate builds remain unsigned and marked testing until they pass native boot/readiness smoke tests, two-build reproducibility checks, production signing, and catalog publication (published in 0.6.0).

Upgrade and disposal

Upgrading from 0.4.0 requires no state, inventory, or catalog migration, and existing cached images remain valid. Use barn purge only when you want to discard all deployment disks and keys without a prompt; continue to use barn destroy when preserving persistent data disks or removing specific nodes.

Validation

Release commit fc85b65ff6a24b0933b56ae1179be9ada2ba91b1 passed the full local source gate—including module and shell checks, unit and race tests, go vet, Staticcheck, deadcode, errcheck, govulncheck, four-target cross-builds, image-pipeline and installer tests, dependency-license checks, and GoReleaser 2.18.0 validation—and the tag workflow verified all archives, DEB/RPM packages, SBOMs, Homebrew formula, installer script, release metadata, and SHA-256 checksums.

Install or upgrade

Download the installer and assets from the Barn 0.5.0 GitHub Release:

curl -fLO https://github.com/pgsty/barn/releases/download/v0.5.0/install.sh
chmod +x install.sh
BARN_VERSION=0.5.0 ./install.sh
barn version
barn doctor

The release also includes the Homebrew formula and amd64/arm64 DEB and RPM packages.

12 - Barn 0.4.0: one command, working data disks, one voice

A first run that is one command, a default data disk that works on every image, readiness failures that name the cause, and one output style across the CLI.
Note

Historical release record (0.4.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.4.0 turns the first run into a single command, makes default data disks work out of the box on Debian and Ubuntu images, and unifies output formatting across all CLI commands while keeping the Pigsty inventory format, fixed-IP deployment model, state layout, and embedded catalog revision 2026082903.

What changed

  • Single-command first run. When run in an interactive terminal on a host where the fixed-IP network has not been installed yet, barn up automatically invokes barn setup: it prints the host preparation plan, asks for confirmation before the privileged step, and continues directly into VM startup. barn init now points to barn up as the next command.
  • vm_disks[].fs defaults to auto. Blank data disks are formatted as XFS when the guest has mkfs.xfs and fall back to ext4 otherwise, matching Pigsty’s Vagrant workflow. Previously, the xfs default failed on upstream Debian and Ubuntu cloud images that shipped without xfsprogs. Existing deployments created under the old default are not flagged as configuration drift and keep their persistent disks intact.
  • Clearer guest bootstrap errors. Guest failure markers now capture the failing command’s last output line, so up reports guest bootstrap failed during data-disks: xfs requested but mkfs.xfs is unavailable rather than a bare exit status.
  • Unified CLI output. Lifecycle commands and status print a consistent node table and, after up, a next: barn ssh <node> hint. plan and validate print a single summary line when no changes are needed, while image list, network status, doctor, and preflight errors use plain prose without internal error codes (spec hash and internal metadata remain available via --json). Unknown-node errors list the available node names.
  • Standard SSH command pass-through. barn ssh <node> -- 'df -h /data; id' forwards the remote command string to OpenSSH unchanged.

Upgrading

If a Debian 12/13 or Ubuntu node created with 0.3.0 or earlier failed to mount /data, run barn recreate <node> once so the disk formats as ext4. Non-interactive automation running up on an unprepared host without a TTY should still run barn setup --yes beforehand.

Validation

Source commit 8ecb8476c7dbc934d8cbbee935ac53884d00fcdb passed the full local source gate—unit and race tests, go vet, Staticcheck, deadcode, errcheck, govulncheck, shell and module checks, four-target cross-builds, image-pipeline and installer tests, and dependency-license verification—and the tag workflow built and verified every archive, native package, SBOM, and installer script. Dated macOS arm64/HVF and Ubuntu amd64/KVM acceptance records are listed in the validation history.

Install or upgrade

Download the installer and assets from the Barn 0.4.0 GitHub Release:

curl -fLO https://github.com/pgsty/barn/releases/download/v0.4.0/install.sh
chmod +x install.sh
BARN_VERSION=0.4.0 ./install.sh
barn version
barn doctor

The release includes the Homebrew formula and amd64/arm64 DEB and RPM packages.

13 - Barn 0.3.0: explicit catalogs and actionable readiness

Explicit image-catalog updates, per-node bootstrap diagnostics, native guest interface names, and a smaller CLI.
Note

Historical release record (0.3.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.3.0 replaces implicit catalog refreshes with explicit update commands, reports guest bootstrap failures per node, and streamlines the CLI surface while keeping the Pigsty inventory and fixed-IP deployment model.

What changed

  • Explicit catalog updates. up, plan, and standard image commands read the active local catalog snapshot without fetching remote metadata behind the scenes. Run barn update to fetch the latest signed catalog from the configured repository, or barn image sync to activate a specific URL or local file.
  • Per-node bootstrap diagnostics. Guest initialization records the active bootstrap stage atomically. Partial failures list each failed node, stage, and error message, and readiness timeouts point directly to barn logs <node>.
  • In-place readiness rechecks. Running guests can re-run readiness verification without restarting QEMU, and partial lifecycle runs still regenerate the host SSH client config for all committed nodes.
  • Native guest interface names. Netplan matches NICs by deterministic MAC address without renaming guest network interfaces, and vm_disks[].fs: auto prefers XFS with automatic fallback to ext4.
  • Streamlined CLI. The redundant ss command and ambiguous root/flag shorthands are removed, and barn image reset replaces reset-manifest (kept as an alias).

Validation

Source commit da6d02426da93c677c94c67fec4eb4fcecf4766a passed the full local source gate and a complete GoReleaser snapshot—covering unit and race tests, go vet, Staticcheck, govulncheck, four-target cross-builds, image-pipeline and installer checks, archive/package parity, dependency licenses, SBOMs, and Linux package verification—and the tag workflow repeated these gates before publication. Dated macOS arm64/HVF and Ubuntu amd64/KVM acceptance records are listed in the validation history.

Install or upgrade

Download the installer and assets from the Barn 0.3.0 GitHub Release:

curl -fLO https://github.com/pgsty/barn/releases/download/v0.3.0/install.sh
chmod +x install.sh
BARN_VERSION=0.3.0 ./install.sh
barn version
barn doctor

The release includes the Homebrew formula and amd64/arm64 DEB and RPM packages. Existing 0.1.0 and 0.2.0 deployment and catalog state remains compatible.

14 - Barn 0.2.0: selected convergence and release integrity

VPN-aware network preflight, truly selected scale-out, committed-state integrations, checksum-verified multi-platform artifacts, and the 0.1.0 upgrade boundary.
Note

Historical release record (0.2.0). Old release downloads are retired; use the installation guide for the current release.

Barn 0.2.0 keeps the Pigsty inventory and on-disk deployment format introduced in 0.1.0 while fixing VPN route preflight false positives and selected-node convergence issues uncovered during native host testing.

What changed

  • VPN-aware route preflight. Broad VPN exclusion routes such as 10.0.0.0/8 no longer block Barn’s more specific 10.10.10.0/24 lab subnet. Equal or more-specific foreign routes, overlapping interfaces, occupied IP addresses, or a missing Barn route still fail preflight before any VM starts.
  • True selected-node scale-out. barn up <node> downloads images and prepares disks only for the targeted node. Uncreated inventory peers appear as absent, and SSH config, /etc/hosts, guest provisioning, UUID/port allocation, lifecycle commands, and persistent-disk checks operate strictly on the committed node set while leaving the full inventory intact for later expansion.
  • Updated /etc/hosts ownership markers. Newly provisioned guests write # barn-deployment-host and clean up both that marker and the 0.1.0 # barn-project-host marker when refreshing host entries.
  • Operational polish. Includes graceful command cancellation, structured JSON/YAML output, interactive confirmations, barn reload, diagnostic redaction, and a trimmed Go dependency graph.

Native and release evidence

  • macOS arm64/HVF (with MonoProxy active): verified selected u24-1 creation, SSH, stop/start, incremental cached el9-1 scale-out, two-node lateral SSH alongside five absent peers, and full deployment destroy.
  • Ubuntu 26.04 amd64/KVM: verified read-only inspection and control-node SSH against an existing four-node deployment.
  • CI and packaging: passed local make check, source CI, and the release packaging workflow, producing four platform archives, amd64/arm64 DEB and RPM packages, SPDX SBOMs, a Homebrew formula, install.sh, SHA-256 checksums, and release metadata.
  • Image catalog: embeds signed catalog revision 2026082903 (9 families, 27 architecture artifacts), with https://repo.pigsty.cc/barn as the default repository in 0.2.0 and https://repo.pgsty.com/barn verified as an alternate endpoint.

Install or upgrade

Download install.sh and the release assets from the Barn 0.2.0 GitHub Release:

chmod +x install.sh
BARN_VERSION=0.2.0 ./install.sh
barn version
barn doctor

0.1.0 deployment state remains directly readable; running barn status while existing VMs are up records any missing process birth timestamps, and existing guests adopt the new /etc/hosts marker the next time they are recreated.

15 - RC6 development candidate: owner-scoped Tier-1 delivery

Exact RC6 identity, four requested native product passes, durable network transactions, reproducible local archives, and the boundary that keeps this candidate unpublished.
Note

Pre-Barn historical archive (Piglet 1.0.0-rc.6, 2026-08-25). This candidate was a local verification milestone and was never published as a GitHub Release or package repository; the SHA-256 digests below record the retained local build artifacts. For current Barn usage and support status, see the documentation and status page.

Piglet 1.0.0-rc.6 was a local development candidate that validated the Quick and four-node full profiles on both Tier-1 native hypervisor platforms (macOS arm64 / HVF and Linux amd64 / KVM) and introduced journaled host-network transactions for crash recovery.

Frozen build identity

Field RC6 value
Version 1.0.0-rc.6
Source commit 7db733184463cc189ffa738335c213fc9a2982de
Go go1.27.0
Source epoch 1787657920
Build timestamp 2026-08-25T11:38:40Z
Channel development
Signature / attestation false / false
Exact full profile SHA-256 912fea61bf1602c2a437570561a6ab4d0a5a8c152695147ad9e96ae831bc9336

Four native product scenarios

Host Scenario Result Guest contract
macOS arm64 / HVF Quick PASS Ubuntu 24.04.4, dba UID/GID 88, 2 vCPU, 64 GiB root, 64 GiB /data
Linux amd64 / KVM Quick PASS Ubuntu 24.04.4, dba UID/GID 88, 2 vCPU, 64 GiB root, 64 GiB /data
macOS arm64 / HVF Exact full PASS .10–.13, UID 88, 64 GiB roots, 128 GiB data disks, 2/1/1/1 vCPU, 4-way peer mesh
Linux amd64 / KVM Exact full PASS .10–.13, UID 88, 64 GiB roots, 128 GiB data disks, 2/1/1/1 vCPU, 4-way peer mesh

All eight full-profile guests booted Ubuntu 24.04.4, passed contract assertions, and were cleanly destroyed afterward while retaining shared image caches, project markers, and keys.

Journaled host-network transactions

Network install and uninstall use a root-owned, strict-prefix transaction:

  • Root planning produces a token bound to the invoking owner, host identity, and observed prestate.
  • Apply re-evaluates the plan under the host-global lock and accepts only that token.
  • A typed, fsync-committed journal is written before any host mutation begins.
  • Each step records a checkpoint only after verifying its postcondition.
  • If a transaction is interrupted, ordinary network changes are blocked until an explicit forward or rollback recovery plan is approved.

macOS completed an interrupted forward-recovery test and converged to a healthy default host network. Linux completed install, rollback/retry, four-node operation, uninstall, and host restoration prior to a final patch that tightened socket-state canonicalization, systemd unit enablement scope, NetworkManager ordering, and recovery field scoping (verified via source checks and -race tests).

macOS shared mode and subnet conflicts

The default macOS mode is socket_vmnet host mode; shared mode also passed a two-node test on an alternate free subnet as an explicit opt-in fallback.

During testing, the default subnet encountered VMNET_SHARING_SERVICE_BUSY (1009) when an older Piglet-created bridge100 interface was still present. Preflight checks interface ownership markers rather than adopting an existing interface just because its .1/24 address matches. When a subnet conflict occurs, operators can either remove the conflicting interface or move the entire lab to a clean RFC 1918 /24 subnet—the runtime never renumbers individual guests or picks a random subnet on its own.

Reproducible local archives

Two independent local RC6 build trees produced byte-identical archives, checksums, release metadata, and Homebrew formula files:

Archive SHA-256
Darwin amd64 1295288ff198b53fcb761a6e8794087d75a46105fc19980fabcd44f0c70fb9ef
Darwin arm64 308310b0f2d179f98c8be78ea09f89d226167072c936387bc42d717a922ec0c6
Linux amd64 547a61f6cc0768071df349cbf5c17d7ddfe3ab3cea59e6b4026e3e3e616a5550
Linux arm64 afc9ce1043d377cc3b4ef8bdf77826a8139a8c839685025853e8bee8100c6a2e

Remaining work before public release

At the close of RC6, the remaining items before public release were:

  • Physical host-reboot persistence checks on both Tier-1 platforms
  • Native smoke tests on macOS amd64 and Linux arm64
  • Re-running the Linux network install/uninstall/reinstall cycle with the final post-audit patch
  • Guest image normalization, hosting, and active/standby manifest signing keys
  • Public release tags, Homebrew tap and DEB/RPM package publication, and clean-host installer verification

See the tutorial, architecture guide, and status page for how these items were completed in subsequent Barn releases.

16 - Development snapshot: the Go 1.27 product surface

Quick and four-node private semantics, schema-3 owned profiles, Pigsty inventory integration, persistence, state migration, and verified release mechanisms.
Note

Pre-Barn historical archive (Piglet, 2026-08-24). At this snapshot there was no public release tag, signed production artifact, or package repository, and all embedded image records were marked testing. For current Barn behavior and support status, see the documentation and status page.

The 2026-08-24 source snapshot turned the initial QEMU prototype into a structured Go 1.27 VM manager with zero-configuration Quick mode, fixed-IP private labs, 13 built-in profiles, Pigsty inventory generation, persistent data disks, schema migration, and reproducible release packaging.

One native runtime

Piglet drives QEMU directly through HVF on macOS and KVM on Linux, running QEMU as the invoking user without falling back to TCG emulation or accepting arbitrary pass-through QEMU flags. It validates image digests and .qcow2 headers, generates pure-Go NoCloud cidata seed images, checks QMP and process identity, verifies SSH readiness, and records atomic state updates, journals, and event logs.

Quick mode on both Tier-1 hosts

Zero-YAML Quick mode runs on macOS arm64 and Linux amd64, provisioning a single meta guest (dba user, 2 vCPU, 4 GiB RAM, 64 GiB root disk, sparse 64 GiB /data disk, user-mode NAT, SSH, and four localhost port forwards) and supporting plan, up, status, ssh/exec, stop/start/restart, drift detection, guarded recreate/destroy, --no-wait, persistent disk retention, key rotation, logs, repair, and redacted debug bundles.

Private labs and host networking

Private mode adds host-network preflight, status, install, and uninstall across both Tier-1 host families:

  • macOS uses pinned socket_vmnet v1.2.2 in host mode by default (with shared/FD mode also tested).
  • Linux uses a reversible systemd-networkd / NetworkManager / qemu-bridge-helper transaction.

Both platforms keep QEMU unprivileged and block network uninstallation while a lab lease is active. Operators can replace the default 10.10.10.0/24 subnet with another explicit RFC 1918 /24 subnet, moving the profile, host network, lease, node addresses, and Pigsty inventory together.

Four-node full and MinIO runs on both Tier-1 platforms verified fixed IPs, control-node lateral SSH, management internet access, disk identity, stop/start persistence, crash recovery, 30/30 soak cycles, and 16-disk MinIO storage layouts.

Schema-3 profiles and Pigsty inventory integration

The 13 embedded schema-3 profiles define 85 nodes using the dba account—standard nodes carry a 128 GiB /data disk, while MinIO nodes carry four 32 GiB disks. piglet pigsty inventory reads a Pigsty source tree, validates host/VIP/admin/service addresses, rebases custom subnets, and writes mode-0600 inventory files with ownership markers, while pigsty-vm exposes the same lifecycle through typed environment variables.

Persistence, schema upgrades, and automation

  • Persistent disks: disks marked persistent: true survive ordinary destroy and compatible recreate runs; deleting them requires typing a confirmation phrase in a TTY or passing destroy --force --delete-persistent --yes-delete-persistent. Project key cleanup defaults to dry-run and requires project purge-keys --yes.
  • State migration: schema 0 -> 1 upgrades require stopped nodes and no active lease, creating a backup before applying an atomic update via project upgrade-state --dry-run|--yes.
  • Automation surface: includes node selectors, --no-wait, structured JSON responses, typed exit codes, shell completion, managed SSH and /etc/hosts blocks, per-node logs, and redacted support bundles.

Images and release packaging

The embedded image matrix covers el9, el10, d12, d13, u22, u24, and u26 across amd64 and arm64 (7/7 booted per architecture; el8 was excluded from the initial matrix before being normalized in later Barn releases). The build toolchain produces and verifies four platform archives, a Homebrew formula, Linux amd64/arm64 DEB and RPM packages, SHA-256 checksums, SPDX SBOMs, and Cosign/SLSA signing test fixtures across two-run reproducibility checks.

Follow-up completed in RC6 and Barn 0.x

Because catalog schema-3 and inventory changes landed after the initial full/MinIO runs, exact-profile native replays, custom-subnet /etc/hosts publishing, and storage.data_root / ssh.wait_timeout wiring were completed the following day in the 2026-08-25 RC6 candidate, before the project simplified its model around a single Pigsty-native barn.yml inventory in Barn 0.1.0+. See the tutorial, architecture guide, and status page for current Barn behavior.