Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased] - yyyy-mm-dd #
Added #
--print-build-logs/-Largument.nix copy&nix buildoperations are now manually implemented through a native rust nix daemon client if--experimental-nix-clientis passed.- Node
targetliveliness is now determined directly by initiating a nix daemon handshake if--experimental-nix-clientis passed. - Node evaluations are now cached between wire invocations in flake hives, invalidating old caches with a connection to the local nix daemon.
Changed #
- The pre-activation key stage is now scheduled after the evaluation stage. The rationale for this is that while iterating on evaluation errors it was often quite annoying to repeatedly enter your password for key deployment.
- Ipv6 addresses are now displayed in a nicer format in "Authenticate for ..." prompts.
- Build logs from
-Lare now properly traced and logged alongside the build job name. - Internal representation of Nix store paths now use
snix'sStorePathdata type. - Flake evaluation caching now use
snix'sStorePathnative digests and name field as primary keys instead of full sqlitetext. - Wire's cache is now deleted and recreated if migrations fail.
- No longer panics on key agent env var not found.
Fixed #
- Use
AssertPathExistsinstead of conditional path existence checks for key services. - Built paths printed to stdout being clobbered with the status bar.
[v1.3.0] - 2026-05-02 #
Added #
- "Encrypting with Sops" documentation example.
--ssh-verbose/--svargument which increases verbosity of SSH commands.
Changed #
- Under the hood improvements to how status bar updates are handled internally.
- Cargo dependency updates.
- Switched (back) to the https://snix.dev/
nix_compatcrate for internal nix json log parsing.
Fixed #
- Status bar is cleaned every time after execution is completed.
- Fixed garnix docs links in documentation.
- Forces
bashinstead of remote user's potentially unsupported shell. This bug was causing strange and hard to diagnose issues. - Fixed a possible time-of-check to time-of-use bug while setting key permissions.
deployment.privilegeEscalationCommandnot being consistently applied.
[v1.2.0] - 2026-03-18 #
Added #
- Manpages for
1&5, including subcommands.
Changed #
- The domain for documentation to be
wire.forall.systems. The previous URL will continue to be available but may redirect in the future. - Refactored node execution to be in two distinct phases, "planning" and "execution". Previously, picking what steps would be run was done on the fly during execution.
- Cases where there are no keys to deploy, such as having 0 keys or filtered keys, the "Key" step will not be planned when it previously would have.
- Changed non-interactive SSH executed commands to use
BatchMode=yesinstead of usingPasswordAuthentication=noandKbdInteractiveAuthentication=no.
Fixed #
- Fix a bug where key permissions where being printed in decimal format instead of octal.
wire inspect nameswithout--jsonwill now correctly output names as a newline separated string instead of always as a json list.- Fix a bug where errors encountered while reading nodes from stdin where silently ignored
Removed #
- Remove "Error Codes" documentation page & links.
[v1.1.1] - 2025-01-05 #
Fixed #
- Fix a bug where wire was attempting to SSH to the local machine when
buildOnTarget&allowLocalDeploymentwhere true.
[v1.1.0] - 2025-12-31 #
Added #
- Add a
--substitute-on-destinationargument. - Add the
meta.nodeSpecialArgsmeta option. - Add
wire build, a new command to build nodes offline. It is distinct fromwire apply build, as it will not ping or push the result, making it useful for CI.
Changed #
- Build store paths will be output to stdout
Fixed #
- Fix invalidated caches not actually returning
None.
[v1.0.0] - 2025-12-17 #
Added #
- SIGINT signal handling.
Changed #
- Invalidate caches that reference garbage collected paths.
Fixed #
- Fix key filtering logic.
[v1.0.0-beta.0] - 2025-12-02 #
Added #
- Implement
meta.nodeNixpkgs. - Add caching of hive evaluation for flakes.
Changed #
- Run tests against 25.11.
[v1.0.0-alpha.1] - 2025-11-24 #
Added #
- Add
--handle-unreachable. You can use--handle-unreachable ignoreto ignore unreachable nodes in the status of the deployment. - Add a basic progress bar.
Changed #
- Revert "Wire will now attempt to use SSH ControlMaster by default.".
- Change the
showsubcommand to look nicer now. - Change the
buildstep to always build remotely when the node is going to be applied locally.
[v1.0.0-alpha.0] - 2025-10-22 #
Added #
- Add
--ssh-accept-hostargument. - Add
--on -syntax to the--onargument. Passing-will now read additional apply targets from stdin. - Add
{key.name}-key.{path,service}systemd units. - Added
--flakeargument as an alias for--path. - A terminal bell will be output if a sudo / ssh prompt is ever printed.
- Added a real tutorial, and separated many how-to guides. The tutorial leads the user through creating and deploying a wire Hive.
- Add
config.nixpkgs.flake.sourceby default ifmeta.nixpkgsends with-sourceat priority 1000 (default).
Fixed #
- Fix bug where
--non-interactivewas inversed. - Fix a bug where
./resultlinks where being created. - Fix passing
sources.nixpkgsdirectly from npins tometa.nixpkgs. - Fix nodes that will be applied locally running the
pushandcleanupsteps.
Changed #
- Improve logging from interactive commands (absence of
--non-interactive). - Changed
--pathargument to support flakerefs (github:foo/bar,git+file:///...,https://.../main.tar.gz, etc). - Changed SSH arguments to use ControlMaster by default.
- Compile-out logs with level
tracing_level::TRACEin release builds. - Improve aata integrity of keys.
- Unknown SSH keys will be immediately rejected unless
--ssh-accept-hostis passed. - Changed evaluation to be ran in parallel with other steps until the .drv is required.
[0.5.0] - 2025-09-18 #
Added #
-
Added
--reboot. wire will wait for the node to reconnect after rebooting. wire will refuse to reboot localhost. Keys post-activation will be applied after rebooting! -
Most errors now have error codes and documentation links.
-
Added the global flag
--non-interactive. -
wire now creates its own PTY to interface with openssh's PTY to allow for interactive sudo authentication on both remote and local targets.
Using a wheel user as
deployment.target.useris no longer necessary (if you like entering your password a lot).A non-wheel user combined with
--non-interactivewill likely fail. -
Added
deployment.keys.environmentto give key commands environment variables.
Changed #
wire inspect/show --jsonwill no longer use a pretty print.- wire will now wait for the node to reconnect if activation failed (excluding dry-activate).
- Nix logs with the
TalkativeandChattylevel have been moved totracing_level::TRACE. - Error messages have been greatly improved.
Fixed #
- Some bugs to do with step execution were fixed.
[0.4.0] - 2025-07-10 #
Added #
- Nodes may now fail without stopping the entire hive from continuing. A summary of errors will be presented at the end of the apply process.
- wire will now ping the node before it proceeds executing.
- wire will now properly respect
deployment.target.hosts. - wire will now attempt each target host in order until a valid one is found.
Changed #
- wire now directly evaluates your hive instead of shipping extra nix code along with its binary.
You must now use
outputs.makeHive { ... }instead of a raw attribute. This can be obtained with npins or a flake input. - The expected flake output name has changed from
outputs.colmenatooutputs.wire.
[0.3.0] - 2025-06-20 #
Added #
- Run tests against
unstableand25.05by @mrshmllow in https://github.com/wires-org/wire/pull/176.
Changed #
- Dependency Updates.
- wire now compiles and includes key agents for multiple architectures, currently only linux.
- There is a new package output,
wire-small, for testing purposes. It only compiles the key agent for the host that buildswire-small. --no-progressnow defaults to true if stdin does not refer to a tty (unix pipelines, in CI).- Added an error for the internal hive evaluation parse failure.
- The
inspectcommand now hasshowas an alias. - Remove
logcommand as there are currently no plans to implement the feature - The
completionscommand is now hidden from the help page
Fixed #
- A non-existent key owner user/group would not default to gid/uid
0. - Keys can now be deployed to localhost.
[0.2.0] - 2025-04-21 #
Added #
- Getting Started Guide by @mrshmllow.
- Web documentation for various features by @mrshmllow.
- Initial NixOS VM Testing Framework by @itslychee in https://github.com/wires-org/wire/pull/93.
Changed #
runtime/evaluate.nix: force system to be null by @itslychee in https://github.com/wires-org/wire/pull/84.
Important
You will have to update your nodes to include nixpkgs.hostPlatform = "<ARCH>";
- GH Workflows, Formatting, and other DevOps yak shaving.
- Issue Templates.
- Cargo Dependency Updates.
doc/Dependency Updates.flake.nixInput Updates.
Fixed #
- Keys with a path source will now be correctly parsed as
pathinstead ofstringby @mrshmllow in https://github.com/wires-org/wire/pull/131. deployment.keys.<name>.destDirwill be automatically created if it does not exist. Nothing about it other than existence is guaranteed. By @mrshmllow in https://github.com/wires-org/wire/pull/131.