# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).
## [Unreleased] - ReleaseDate
## [0.7.1] - 2026-09-07
- Improve developer ergonomics by having better default values [!41](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/41)
- Fix VMs started via the library never reporting as running [!42](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/42)
- Get rid of a lot of transitive deps
## [0.7.0] - 2026-09-01
- `vmexec` is now usable as a library [#20](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/20)
- Make sure `clean` and `prune` don't race with other operations by locking them
- Make `exec` exit with the command's exit code (`run` already did that so this was an oversight)
- Log to stderr instead of stdout so that log output can't mix with regular command output
## [0.6.0] - 2026-07-28
- Fix custom image handling [!15](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/15)
- Merge `daemon.stdout` and `daemon.stderr` of detached VMs into a single `daemon.log` [!17](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/17)
- Unify locking into a single lock dir in the state dir; this also fixes a race where cleanup could delete a held lock during CID allocation [!17](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/17)
- Log a VM's terminal output to `session.log` in its state dir [!17](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/17)
- Add `logs` subcommand to show a VM's terminal output (with `-f/--follow` to keep following it) [#16](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/16)
- Add `inspect` subcommand to display detailed information on a virtual machine [#17](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/17)
- Add `pull` subcommand to download the newest image without running a VM (with `--prepare` to also pre-warm it) [#4](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/4)
- Add `images` subcommand to list locally cached images [#19](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/19)
## [0.5.3] - 2026-04-08
- Improve error handling and reporting when the vsock module is unavailable [#14](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/14)
- Fix superuser detection for ksm subcommand
- Handle negative `general_profit` in ksm subcommand [#13](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/13)
## [0.5.2] - 2026-03-31
- Truncate device tags for long paths because QEMU limits those
## [0.5.1] - 2026-03-30
- Change vmid and memory arguments to be optional
## [0.5.0] - 2026-03-29
- Allow limiting VM memory usage
- Make sure that `--rm` is respected when calling `stop` on a detached VM
- Fix a crash that would occasionally occur when stdout wasn't ready for flushing
- Add `-a/--all` flag to `ps` and only show running VMs by default
- Limit output of `ps` to a single line per row
- Get rid of `whoami` crate since we can do the same with `nix` which we already have
## [0.4.0] - 2026-03-26
- Add `ready` subcommand (with `--wait` flag to block until ready) to check if a VM is ready to accept SSH connections
- Add `prune` subcommand to delete all overlay images from the cache
This can be useful when you've nuked your `.local/state/vmexec` dir for some reason
- Add VM config file in `vms/<vm id>/vm.json` and stop writing separate files for QEMU and SSH run data
- Move state directory from `~/.local/share/vmexec/` to `~/.local/state/vmexec/`
- Make VM run state handling more robust
- Rename `runs` to `vms`, this terminology should hopefully be more obvious ([!12](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/12))
- Make sure `unshare` call isn't influenced by system locale ([#12](https://gitlab.archlinux.org/archlinux/vmexec/-/work_items/12))
- Fix deadlock in `virtiofsd` when `RUST_LOG` is set caused by pipe filling up ([!13](https://gitlab.archlinux.org/archlinux/vmexec/-/merge_requests/13))
## [0.3.0] - 2026-02-21
- Add `-w/--workdir` to `exec` and `run` to allow setting working dir
## [0.2.0] - 2025-06-04
- Pass along exit code from process inside VM
- Fix missing stderr output
- Add `--detach` to `run` to enable VM backgrounding
- Add `stop` subcommand to stop running VMs by id
- Add `exec` subcommand to run a command in an already running VM
- Add `clean` subcommand to clean up old run dirs
- Add `--rm` to `run` to optionally clean up run dirs after exiting
- Add `--disable-kvm` to `run` to allow for disabling KVM (might be useful in CI)
## [0.1.5] - 2025-05-21
- Add `ps` subcommand to list active VMs
- Fix race condition when starting VMs quickly
- Fix `--tty` and `--interactive` behavior
## [0.1.4] - 2025-03-21
- Remove `--image` and `--os` flags as this is now merged into a new positional argument
- Add `-i/--interactive` and `-t/-tty` flags for more control over the terminal
## [0.1.3] - 2025-03-19
- Add dead run dir reaping
- Add locking when pulling images
## [0.1.2] - 2025-03-18
- Add some flags to `virtiofsd` call to improve performance and decrease guest memory usage
- Fix multiple `-v` options not working due to incorrect fstab getting generated
- Add virtio-pmem device support with `--pmem`
## [0.1.1] - 2025-03-13
- Fix NvVars file getting created in mounted dirs
## [0.1.0] - 2025-03-13
- First somewhat working version
[Unreleased]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.7.1...HEAD
[0.7.1]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.7.0...v0.7.1
[0.7.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.6.0...v0.7.0
[0.6.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.5.3...v0.6.0
[0.5.3]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.5.2...v0.5.3
[0.5.2]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.5.1...v0.5.2
[0.5.1]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.5.0...v0.5.1
[0.5.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.4.0...v0.5.0
[0.4.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.3.0...v0.4.0
[0.3.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.2.0...v0.3.0
[0.2.0]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.5...v0.2.0
[0.1.5]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.4...v0.1.5
[0.1.4]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.3...v0.1.4
[0.1.3]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.2...v0.1.3
[0.1.2]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.1...v0.1.2
[0.1.1]: https://gitlab.archlinux.org/archlinux/vmexec/-/compare/v0.1.0...v0.1.1