Release history
smolvm releases
Tool to build & run portable, lightweight, self-contained virtual machines.
All releases
52 shown
DNS enforcement + PTY hardening + VM lock fix
Routine maintenance release for smolvm.
Changelog
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.6.1...v0.6.2
- Virtio-net host-side runtime (parts 3-4)
- GPU support mention in development docs
Full changelog
What's Changed
- feat: updating discord invite link by @BinSquare in https://github.com/smol-machines/smolvm/pull/163
- fixing command by @phoenix24 in https://github.com/smol-machines/smolvm/pull/165
- updated instruction to install e2fsprogs by @phoenix24 in https://github.com/smol-machines/smolvm/pull/166
- feat: virtio-net - part 3: impl host-side virtio-net runtime by @phooq in https://github.com/smol-machines/smolvm/pull/136
- Mention GPU support in development section by @ShalokShalom in https://github.com/smol-machines/smolvm/pull/168
- chores: rename network backend for virtio-net to virtio-net instead o… by @phooq in https://github.com/smol-machines/smolvm/pull/170
- Fix grammar and clarify embedded SDK description by @ShalokShalom in https://github.com/smol-machines/smolvm/pull/174
- fix: correct the README about --net by @phooq in https://github.com/smol-machines/smolvm/pull/183
- fix: libkrun has a bug for TSI silent dropping with idle guest by @BinSquare in https://github.com/smol-machines/smolvm/pull/184
- feat: virtio-net - part 4: wire launcher with virtio-net backend also disable offload advertisement by @phooq in https://github.com/smol-machines/smolvm/pull/142
- feat: updating openclaw example with more comments and guidance by @BinSquare in https://github.com/smol-machines/smolvm/pull/185
- Update README for embedded SDKs clarity by @ShalokShalom in https://github.com/smol-machines/smolvm/pull/192
- Fix Linux libkrun bundle path in cargo make dev by @albinvass in https://github.com/smol-machines/smolvm/pull/193
- fix: issue-169 - resolve env and workdirs correctly by @phooq in https://github.com/smol-machines/smolvm/pull/179
- fix: linux libs also need updating by @BinSquare in https://github.com/smol-machines/smolvm/pull/203
- fix: updating of libkrun.dylib to match linux silent drops idle guest update by @BinSquare in https://github.com/smol-machines/smolvm/pull/204
New Contributors
- @phoenix24 made their first contribution in https://github.com/smol-machines/smolvm/pull/165
- @ShalokShalom made their first contribution in https://github.com/smol-machines/smolvm/pull/168
- @albinvass made their first contribution in https://github.com/smol-machines/smolvm/pull/193
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.19...v0.5.20
Minor fixes and improvements.
Full changelog
What's Changed
- Clarify that smolvm uses the OCI / Docker image format by @peterp in https://github.com/smol-machines/smolvm/pull/157
- fix: napi compilation failures by @phooq in https://github.com/smol-machines/smolvm/pull/158
- pack create: fix temp agent-VM name prefix violating validate_vm_name by @tsukhani in https://github.com/smol-machines/smolvm/pull/160
- fix: cannonicalize bug broke all mount targets by @BinSquare in https://github.com/smol-machines/smolvm/pull/162
New Contributors
- @peterp made their first contribution in https://github.com/smol-machines/smolvm/pull/157
- @tsukhani made their first contribution in https://github.com/smol-machines/smolvm/pull/160
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.18...v0.5.19
Minor fixes and improvements.
Full changelog
What's Changed
- pathbuf-canonicalize bug fixed across codebase by @aayank13 in https://github.com/smol-machines/smolvm/pull/132
- fix: linux builds should check symlink chain to verify the required l… by @BinSquare in https://github.com/smol-machines/smolvm/pull/154
New Contributors
- @aayank13 made their first contribution in https://github.com/smol-machines/smolvm/pull/132
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.17...v0.5.18
Fixes SSH agent container initialization and improves uninstall handling.
Full changelog
What's Changed
- fix: ssh-agent should populate inside the container in vm by @BinSquare in https://github.com/smol-machines/smolvm/pull/148
- fix: removed timeouts and improve uninstall script. by @BinSquare in https://github.com/smol-machines/smolvm/pull/149
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.16...v0.5.17
Minor fixes and improvements.
Full changelog
What's Changed
- refactor: updating hash derived data directories by @BinSquare in https://github.com/smol-machines/smolvm/pull/147
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.15...v0.5.16
- Unix socket listening by default
Full changelog
What's Changed
- feat: use unix sock for listen by default by @flaneur2020 in https://github.com/smol-machines/smolvm/pull/125
- fix: guard execs from stalling vm by @BinSquare in https://github.com/smol-machines/smolvm/pull/144
- fix: reserve binary exec outputs + unreachable state probe while agent is busy by @BinSquare in https://github.com/smol-machines/smolvm/pull/146
New Contributors
- @flaneur2020 made their first contribution in https://github.com/smol-machines/smolvm/pull/125
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.14...v0.5.15
- Overlayfs merge at pack time for faster first exec
- --from-vm captures everything
Full changelog
What's Changed
- feat: pack --from-vm should capture everything by @BinSquare in https://github.com/smol-machines/smolvm/pull/141
- feat: optimize first exec time with overlayfs merge at pack time by @BinSquare in https://github.com/smol-machines/smolvm/pull/143
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.13...v0.5.14
- virtio-net network backend selection
- Network interface guest-side configuration
- .smolmachines configuration file API
Full changelog
What's Changed
- feat: virtio-net - part 1: add network backend selection by @phooq in https://github.com/smol-machines/smolvm/pull/126
- feat: wiring up API for the new --from .smolmachines by @BinSquare in https://github.com/smol-machines/smolvm/pull/135
- refactor: extracting out smofile + updating smolvm-pack by @BinSquare in https://github.com/smol-machines/smolvm/pull/137
- feat: remove smolbench as a submodule by @BinSquare in https://github.com/smol-machines/smolvm/pull/139
- fix: db retries since all req during hold fails currently. by @BinSquare in https://github.com/smol-machines/smolvm/pull/138
- feat: virtio-net - part 2: impl guest side network interface configuration by @phooq in https://github.com/smol-machines/smolvm/pull/131
- fix: probe_agent bug was killing vm unintended as part of cleanup by @BinSquare in https://github.com/smol-machines/smolvm/pull/140
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.12...v0.5.13
- Machine creation from .smolmachine file
Full changelog
What's Changed
- refactor: use debian for faster test, casing, etc by @BinSquare in https://github.com/smol-machines/smolvm/pull/119
- refactor: guards around nonsense input values by @BinSquare in https://github.com/smol-machines/smolvm/pull/121
- fix: failed exec should not kill the VM by @BinSquare in https://github.com/smol-machines/smolvm/pull/120
- feat: QOL improvements on pack info, --image warning on --net by @BinSquare in https://github.com/smol-machines/smolvm/pull/122
- feat: improving minor ux behaviors by @BinSquare in https://github.com/smol-machines/smolvm/pull/123
- chores: remove duplicate code in storagedisk and overlaydisk by @phooq in https://github.com/smol-machines/smolvm/pull/101
- feat: implementing machine create from .smolmachine file. by @BinSquare in https://github.com/smol-machines/smolvm/pull/128
- fix: prevent second vm from starting with the same port by @BinSquare in https://github.com/smol-machines/smolvm/pull/129
- fix: agents.md updates, test updates for correctness, fix bug with workspace symlink by @BinSquare in https://github.com/smol-machines/smolvm/pull/130
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.11...v0.5.12
Fixes macOS case-insensitive filename collisions and networking persistence.
Full changelog
What's Changed
- feat: adding a workdir tests + ensure priority chain for how workdir works by @BinSquare in https://github.com/smol-machines/smolvm/pull/116
- fix: crun and resize2fs are not executable by @phooq in https://github.com/smol-machines/smolvm/pull/117
- fix: filename collisions due to case insensitivity on macOS, storage sizing, and networking persistence for packed VMs by @BinSquare in https://github.com/smol-machines/smolvm/pull/118
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.10...v0.5.11
- Workspace shared directory convention functionality
Full changelog
What's Changed
- fix: run init commands should run inside the container by @BinSquare in https://github.com/smol-machines/smolvm/pull/109
- fix: mounts were failing silently on persistent machines by @BinSquare in https://github.com/smol-machines/smolvm/pull/111
- feat: workspace shared directory convention functionality by @BinSquare in https://github.com/smol-machines/smolvm/pull/110
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.9...v0.5.10
Fixed image download progress display and large file transfer (>250MB).
Full changelog
What's Changed
- fix: show image download progress for pack by @phooq in https://github.com/smol-machines/smolvm/pull/104
- fix: no space left + extraction of oci layers + packing time optimization by @BinSquare in https://github.com/smol-machines/smolvm/pull/105
- fix: file transfer of larger file than ~250mb would bomb + cleaning zombie vms by @BinSquare in https://github.com/smol-machines/smolvm/pull/106
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.8...v0.5.9
- Prototyping metadata for .smolmachine artifacts manifest
Full changelog
What's Changed
- fix: machine created via embedded sdk does not show up in db by @phooq in https://github.com/smol-machines/smolvm/pull/79
- feat: try resize2fs before fallback to e2fsck to avoid 140ms of unneeded work. by @BinSquare in https://github.com/smol-machines/smolvm/pull/93
- chores: consolidate vm name validation by @phooq in https://github.com/smol-machines/smolvm/pull/94
- feat: prototyping metadata for the .smolmachine artifacts manifest by @BinSquare in https://github.com/smol-machines/smolvm/pull/59
- fix(cli): correct named machine hints by @phooq in https://github.com/smol-machines/smolvm/pull/99
- fix: eliminate pack bottleneck with temp tar file + mem buffer on layer chunks by @BinSquare in https://github.com/smol-machines/smolvm/pull/100
- fix: pack VM should have more resources to speed up packing process by @BinSquare in https://github.com/smol-machines/smolvm/pull/102
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.7...v0.5.8
- Packed machines default to more memory
Full changelog
What's Changed
- fixes: prune shouldn't do anything to running VMs and packed default to more mem. by @BinSquare in https://github.com/smol-machines/smolvm/pull/83
- feat: observability instrumentation polish with json log filter by @BinSquare in https://github.com/smol-machines/smolvm/pull/84
- refactor: documentation should clarify that smolvm machine run -it for shell. by @BinSquare in https://github.com/smol-machines/smolvm/pull/87
- fix: bump libkrunfw with tsi sol_socket fix by @BinSquare in https://github.com/smol-machines/smolvm/pull/89
- feat: pack chain confusion with separate libkrun libs by @BinSquare in https://github.com/smol-machines/smolvm/pull/90
- feat: disk was silently failing to expand from 512mb originally by @BinSquare in https://github.com/smol-machines/smolvm/pull/92
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.5...v0.5.7
Minor fixes and improvements.
Full changelog
What's Changed
- fixes: prune shouldn't do anything to running VMs and packed default to more mem. by @BinSquare in https://github.com/smol-machines/smolvm/pull/83
- feat: observability instrumentation polish with json log filter by @BinSquare in https://github.com/smol-machines/smolvm/pull/84
- refactor: documentation should clarify that smolvm machine run -it for shell. by @BinSquare in https://github.com/smol-machines/smolvm/pull/87
- fix: bump libkrunfw with tsi sol_socket fix by @BinSquare in https://github.com/smol-machines/smolvm/pull/89
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.5...v0.5.6
- Structured logs and metrics instrumentation
Full changelog
What's Changed
- feat: instrumenting observability improvements, structured logs + metrics. by @BinSquare in https://github.com/smol-machines/smolvm/pull/80
- fix: persistence bug when container images are used as overlay - by @BinSquare in https://github.com/smol-machines/smolvm/pull/82
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.4...v0.5.5
- Extracted smolfile types, parser, and helpers to public library
Full changelog
What's Changed
- refactor: no need to warn twice for no command sent on machine run by @BinSquare in https://github.com/smol-machines/smolvm/pull/73
- fix: clean up VmKind by @phooq in https://github.com/smol-machines/smolvm/pull/74
- fix: machine run should not ignore entrypoint/cmd from smolfile by @BinSquare in https://github.com/smol-machines/smolvm/pull/75
- refactor: extracting the smolfile types, parser, and helpers to a pub… by @BinSquare in https://github.com/smol-machines/smolvm/pull/77
- fix: the cleanup for uninstall is not removing the libs by @BinSquare in https://github.com/smol-machines/smolvm/pull/78
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.2...v0.5.4
- Extracted smolfile types, parser, and helpers to public library
Full changelog
What's Changed
- refactor: no need to warn twice for no command sent on machine run by @BinSquare in https://github.com/smol-machines/smolvm/pull/73
- fix: clean up VmKind by @phooq in https://github.com/smol-machines/smolvm/pull/74
- fix: machine run should not ignore entrypoint/cmd from smolfile by @BinSquare in https://github.com/smol-machines/smolvm/pull/75
- refactor: extracting the smolfile types, parser, and helpers to a pub… by @BinSquare in https://github.com/smol-machines/smolvm/pull/77
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.2...v0.5.3
- File upload/download in/out of guest VM
- Streaming exec via --stream
Full changelog
What's Changed
- fix: overlay guard + resize robustness. by @BinSquare in https://github.com/smol-machines/smolvm/pull/68
- feat: implementing file upload/download in/out of the guest vm by @BinSquare in https://github.com/smol-machines/smolvm/pull/69
- feat: supporting streaming exec via --stream by @BinSquare in https://github.com/smol-machines/smolvm/pull/71
- fix: machine run with no command should not hang without warning. by @BinSquare in https://github.com/smol-machines/smolvm/pull/72
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.1...v0.5.2
- Random machine name generation
- Ephemeral runs tracked in redb
- Named flag commands for machine create
Full changelog
What's Changed
- feat: current buildscript bundles old versions of the kernel. by @BinSquare in https://github.com/smol-machines/smolvm/pull/60
- fix: tty startup can silently fail + optimization to shutdown path by @BinSquare in https://github.com/smol-machines/smolvm/pull/61
- feat: introducing random machine names generation if no name is provided by @BinSquare in https://github.com/smol-machines/smolvm/pull/62
- fix: ephemeral runs can get orphaned. Implement tracking them in redb. by @BinSquare in https://github.com/smol-machines/smolvm/pull/63
- fix: add named flag commands to machine create by @BinSquare in https://github.com/smol-machines/smolvm/pull/65
- feat: cleanup and removal of multi-containers. by @BinSquare in https://github.com/smol-machines/smolvm/pull/66
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.5.0...v0.5.1
- Removed unimplemented [service] and [deploy] from Smolfile spec
- Hostname-based egress filtering with DNS filtering proxy
- SSH agent forwarding via vsock
- OCI-compliant registry client for .smolmachine distribution
Full changelog
What's new
Hostname-based egress filtering (--allow-host)
--allow-host api.stripe.comresolves the hostname at VM start and restricts outbound to those IPs only- Smolfile
[network]section withallow_hostsandallow_cidrs - DNS filtering proxy blocks resolution of non-allowed domains
- Hard error on DNS resolution failure — a typo or outage won't silently weaken the policy
SSH agent forwarding (--ssh-agent)
- Forward host SSH agent into the VM via vsock
- Private keys never enter the guest — enforced by the SSH agent protocol
- Works with git, ssh, scp transparently
Higher defaults
- 4 vCPUs, 8 GiB RAM (elastic via virtio balloon — host only commits what the guest uses)
Registry client (experimental)
smolvm registry pushandsmolvm registry pullfor OCI-compliant.smolmachinedistribution- Content-addressed blob cache with LRU eviction
Other
- Removed unimplemented
[service]and[deploy]from Smolfile spec - Updated docs, examples, and website
- Removed alpha designation
Install
curl -sSL https://smolmachines.com/install.sh | bash
Or download the tarball from the assets below.
- Cross-platform .smolmachine format V3 — runtime libraries embedded in stub binary
- CLI positional args replaced with named flags: --image, --name, --machine, --container
- Ephemeral mode: smolvm machine run --image alpine -- echo
- Network egress policy: --allow-cidr and --outbound-localhost-only
- PID identity verification on all signal/kill paths
Full changelog
What's New
Cross-platform .smolmachine format (V3)
- Runtime libraries embedded in stub binary via SMOLLIBS footer
.smolmachinesidecar now contains only cross-platform content (rootfs, layers, storage)- Build on macOS, ship
.smolmachineto Linux
CLI improvements
- Named flags replace positional args:
--image,--name,--machine,--container smolvm machinesandsmolvm containersaliases added- Ephemeral mode:
smolvm machine run --image alpine -- echo hello
Network egress policy
--allow-cidrfor CIDR-based network filtering--outbound-localhost-onlyfor restricted egress
Safety fixes
- PID identity verification on all signal/kill paths (prevents accidental process termination on PID reuse)
- Short-timeout vsock probe for API status checks (prevents blocking)
Test infrastructure
--fail-fastflag stops on first failureTEST_FILTERruns single tests by name- Error output shown inline on failure
Install
curl -sSL https://smolmachines.com/install.sh | bash
- Volume mounts auto-propagate into containers
- New microvm resize command
- Embedded Node SDK foundation
Full changelog
What's New
Container mount propagation fix
- Volume mounts (
-v) onmicrovm createnow auto-propagate into containers — previously, mounts were only visible tomicrovm exec, not to containers created inside the VM. - Explicit
container create -vnow resolves against the VM's virtiofs devices by host path, with a clear error if the host path isn't mounted in the VM.
OpenClaw example
- New
examples/openclaw-app/with a Smolfile for running the OpenClaw gateway in a microVM (sandbox and microvm+container paths).
Other changes
microvm resizecommand (#29)- Show overlay and storage in
vm ls(#32) - Embedded Node SDK foundation (#20, #22, #23, #26, #28)
- Updated embedded SDK README with build and test instructions (#33)
- Startup error logging improvements (#24)
- Build system cleanup (#25, #27)
Install
curl -sSL https://smolmachines.com/install.sh | sh -s -- --version 0.1.19
- CLI reorganization: runpack folded into pack create/run, openapi under serve openapi
- serde camelCase for OpenAPI JSON responses
- Parallel disk formatting and macOS clonefile()
- Default overlay increased to 10 GiB
- --overlay flag for customizable size
Full changelog
What's New
Performance
- Coldstart optimized — parallel disk formatting + macOS
clonefile()for instant COW disk copies - Removed
sync_all()from sparse disk creation, eliminating unnecessary fsync overhead - Agent boot optimizations — parallel storage mounts, pre-mount detections, lazy container registry reconciliation
- CLI optimizations — direct DB calls, batched reads/writes,
init_tablesfor schema setup - ext4 journaling disabled + skip validation for file markers
- Ready marker via virtiofs — detect agent readiness via marker file instead of verification ping
close_range()for fd cleanup — more efficient inherited fd closing
Features
- Increased default overlay to 10 GiB — resolves "No space left on device" errors during package installation (still sparse, ~25MB actual)
--overlayflag for customizable overlay disk size onmicrovm create,sandbox create, andsandbox run- CLI reorganization —
runpackfolded intopack create/pack run,openapimoved underserve openapi - Pack extraction supports symlinks — OCI layers with symlinks now extract correctly with path traversal validation
- serde camelCase for OpenAPI-generated JSON responses
Bug Fixes
- API test patterns — fixed
exit_code→exitCodegrep patterns to match camelCase output resize2fsmissing — Alpine splits it intoe2fsprogs-extra, now included in rootfs build- Kernel EOPNOTSUPP patch — handle at kernel layer instead of VM layer
- Mount env vars — read at boot to mount virtiofs devices correctly
- Library search paths — Linux now searches
lib/linux-archcorrectly
Infrastructure
- Added
smolbenchsubmodule for tracking performance improvements/degradations - Updated libkrun and libkrunfw static builds
- Flag to build with local libkrun changes (#16)
Checksum
sha256: 867c2ab1fe19134ce4a776d7bceccaa153a5dc9a17c599e447be5e970a128967 smolvm-0.1.18-darwin-arm64.tar.gz
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.1.17...v0.1.18
- 37% smaller kernel (22.9MB to 14.5MB)
- Optimized socket watch with kqueue/inotify
- Batch container reconciliation
Full changelog
What's New
Performance
- 37% smaller kernel — trimmed kernel image from 22.9MB to 14.5MB by disabling unused subsystems (Sound, TPM, HID, SCSI, DRM, XFS, BTRFS, etc.)
- Faster VM boot — optimized socket watch (kqueue/inotify instead of polling) and streamlined startup ping loop
- Faster container reconciliation — batch
crun listinstead of per-containercrun statecalls (~6ms each)
Bug Fixes
- Batch reconcile safety —
crun listfailures now fall back to per-container state checks instead of incorrectly purging all containers from the registry - Shutdown data integrity —
shutdown()now correctly reports whether sync() acknowledgment was received; 5s timeout for heavy write workloads - libkrunfw loading — fixed
find_lib_dir()to find libraries when SIP stripsDYLD_LIBRARY_PATH - Linux EAGAIN handling — shutdown ack now handles Linux
EAGAIN(os error 11) alongside macOS (os error 35)
Refactors
- Extracted
FdGuardRAII wrapper for kqueue/inotify fd cleanup - Unified socket wait loop logic (
check_socket_wait_statushelper) - Deduplicated crun state →
ContainerStatemapping viafrom_crun_status() - Extracted
connect_with_timeouts()helper,is_benign_shutdown_error()helper - Explicit inotify event draining
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.1.16...v0.1.17
Fixed terminal input lag by detaching stdin/stdout/stderr in child process.
Full changelog
What's Changed
Fix: terminal input lag after start / background VM launch
After running ./packed-binary start or smolvm microvm start, the user's terminal would lag or miss key inputs. This was caused by libkrun's internal threads inheriting the parent's stdin file descriptor and competing with the shell for terminal input.
Fix: Redirect stdin/stdout/stderr to /dev/null in the forked child process before calling krun_start_enter. All user I/O goes through the vsock agent protocol, and VM console output is captured to console.log — so nothing is lost.
Changes
- Add
detach_stdio()helper inprocess.rs - Apply to all 4 fork sites:
daemon_start,run_as_packed_binary,RunpackCmd::run,AgentManager::start
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.1.15...v0.1.16
- Pre-formatted overlay-template.ext4 eliminates mkfs.ext4
- Smolfile examples: python.smolfile and node.smolfile
Full changelog
What's New
- Overlay template: Pre-formatted
overlay-template.ext4eliminatesmkfs.ext4dependency and warning noise on first boot - Terminal fix: Packed binaries no longer leave terminal in raw mode on bad args / early exit
- Smolfile examples:
python.smolfileandnode.smolfiledemos inexamples/ - Install script: Now copies both storage and overlay templates
Install
curl -fsSL https://raw.githubusercontent.com/smol-machines/smolvm/main/scripts/install.sh | bash
- ImageInfo protocol extended with entrypoint, cmd, env, workdir
- Pre-formatted storage template eliminates e2fsprogs dependency
Full changelog
What's Changed
Bug Fixes
- Fix packed binary CMD/ENTRYPOINT extraction:
smolvm packnow correctly extracts CMD, ENTRYPOINT, ENV, and WORKDIR from OCI image configs into the PackManifest. Previously, packed binaries would fall back to/bin/shinstead of running the image's configured command. - Fix
smolvm packwithout e2fsprogs: Pack now looks for a pre-formatted storage template in~/.smolvm/before requiringmkfs.ext4, eliminating the e2fsprogs dependency for repeat builds.
Improvements
- ImageInfo protocol extended: Added
entrypoint,cmd,env, andworkdirfields to ImageInfo for full OCI config visibility. - Code quality: Extracted shared constants, added CString helper, reduced unsafe scopes, fixed silent virtiofs mount failures, improved error handling in libkrun context lifecycle.
- Storage template included: Release tarball now includes a pre-formatted
storage-template.ext4, eliminating the need for e2fsprogs on first install.
Fixed named 'default' VM resolution and stdout/stderr write reliability.
Full changelog
What's Changed
Bug Fixes
- Fix named "default" VM resolution: When
smolvm microvm start(no name) is called but a named VM "default" exists in the config database, it now correctly routes through the named-VM code path. This fixes networking (--net) and other config options not being applied when the user creates a named "default" VM then starts it without specifying the name. - Fix stdout/stderr write reliability: Added
write_all_retry()andflush_retry()for interactive session I/O to handle transient write failures gracefully.
Improvements
- Updated integration tests for better reliability
- Updated README with feature improvements
Install
curl -sSL https://smolmachines.com/install.sh | sh
Or download the tarball directly from the assets below.
Full Changelog: https://github.com/smol-machines/smolvm/compare/v0.1.11...v0.1.13
Fixed EAGAIN crash in interactive sessions via retry logic for stdio writes.
Full changelog
Fixes
- Fix EAGAIN crash in interactive sessions (
ps aux,apk, etc.): Setting stdin to non-blocking mode (O_NONBLOCK) propagated to stdout via the shared terminal file description, causingwrite_all()to fail with "Resource temporarily unavailable" when the terminal output buffer filled up. Added retry logic for stdout/stderr writes.
Install
curl -fsSL https://raw.githubusercontent.com/smolvm/smolvm/main/scripts/install.sh | bash
Fixed database lock contention and improved EAGAIN vs timeout distinction.
Full changelog
What's New
-
Fix: Database lock contention —
smolvm microvm startnow releases the redb database lock before running init commands, so concurrentexec,stop, and other commands no longer fail with "Database already open. Cannot acquire lock." -
Fix: EAGAIN frame corruption (improved from v0.1.10) —
read_exact_retry()now correctly distinguishes between spurious macOS vsock EAGAIN (always retry) and read timeout expiry (propagate), fixing both interactive sessions hanging and non-interactive runs blocking.
Install
curl -sSL https://smolmachines.com/install.sh | sh
Fixed EAGAIN frame corruption in interactive sessions (ps aux, apk, shells).
Full changelog
What's New
-
Fix: EAGAIN frame corruption in interactive sessions — Commands like
ps aux,apk, and interactive shells would crash with "Resource temporarily unavailable" (EAGAIN). Replacedread_exact()withread_exact_retry()that handles partial reads without corrupting the wire protocol, while still respecting read timeouts for non-interactive exec. -
Fix: Suppress noisy agent overlay messages —
smolvm-agent: no overlay device, skippingno longer printed to console. -
Fix: HTTPS + Connection: close (from v0.1.9) — Fixed BrokenPipeError when making HTTPS requests with
Connection: closeheader.
Install
curl -sSL https://smolmachines.com/install.sh | sh
Fixed BrokenPipeError when making HTTPS requests with Connection: close header.
Full changelog
What's New
-
Fix: HTTPS + Connection: close — Fixed BrokenPipeError when making HTTPS requests with
Connection: closeheader (affectsurllib,wget, and many HTTP clients). Root cause was in libkrun's TSI proxy where epoll HANG_UP events would send RST before draining buffered response data. Now correctly drains data and sends graceful SHUTDOWN. -
Rebuilt libkrun with TSI proxy fix included.
Install
curl -sSL https://smolmachines.com/install.sh | sh
Fixed VM stop failure when PID identity verification unavailable.
Full changelog
What's Changed
- Fix VM stop failure —
smolvm microvm stopand sandbox config-change restarts failed with "PID identity not verified" becauseproc_pidinforeturns zeroed data for session-leader VM children on macOS. Now treats start_time=0 as unavailable and allowsstop_process_fastwhen the agent acknowledged shutdown over vsock. - Fix license — All workspace crates now correctly specify
Apache-2.0(wasMIT OR Apache-2.0in sub-crates).
Assets
smolvm-0.1.8-darwin-arm64.tar.gz— macOS Apple Silicon (arm64)
Install
curl -sSL https://smolmachines.com/install.sh | bash
Fixed interactive exec crash from vsock spurious wakeups and Linux build recursion.
Full changelog
What's Changed
- Fix interactive exec crash on large output — EAGAIN (os error 35) from vsock spurious wakeups was treated as fatal, crashing interactive sessions (e.g.
ps auxin/bin/sh). Now retries on next poll iteration. - Fix packed binary startup race —
wait_for_agentonly verified the muxer socket was connectable, not that the guest agent was listening. Added ping-based readiness check matching themicrovm startpath. - Detect vsock hangup cleanly — POLLHUP/POLLERR now reported as "connection to VM lost" instead of cryptic I/O errors.
- Fix Linux build —
link_krun()in build.rs had infinite recursion on non-macOS (stack overflow on CI).
Assets
smolvm-0.1.7-darwin-arm64.tar.gz— macOS Apple Silicon (arm64)
Install
tar xzf smolvm-0.1.7-darwin-arm64.tar.gz
cd smolvm-0.1.7-darwin-arm64
./smolvm --version
- Eliminated smolvm-stub crate (~2100 lines); main binary auto-detects packed mode via Mach-O section, sidecar, or footer
- Auto-detect packed mode
- New run-packed subcommand
- Weak-link libkrun on macOS
Full changelog
What's Changed
- Eliminated smolvm-stub crate (~2100 lines removed) — the main
smolvmbinary now serves as both the normal CLI and the packed binary runtime via auto-detection at startup - Auto-detect packed mode: checks for Mach-O section, sidecar (
.smolmachine), or embedded footer before parsing CLI args - New
run-packedsubcommand for explicit.smolmachinefile execution - Weak-link libkrun on macOS so packed binaries can start without libkrun present (uses dlopen at runtime)
- Fixed packed binary code signing — added
cs.disable-library-validationentitlement so packed binaries can dlopen libkrun from extracted cache
Assets
smolvm-0.1.6-darwin-arm64.tar.gz— macOS Apple Silicon (arm64)
Install
tar xzf smolvm-0.1.6-darwin-arm64.tar.gz
cd smolvm-0.1.6-darwin-arm64
./smolvm --version
- Implement PTY for exec -it mode
Full changelog
- Maximizing stability
- Feat: Implement PTY for exec -it mode
- Bug fix: interactive mode shouldn't have a timeout
- FIx: Install script should now detect the launching stub for portable executable virtual machine.
- Added microvm lifecycle API routes to server mode
Full changelog
- Improving stability.
- Fixing noisy shutdown errors are pretty benign.
- Refactors: magic numbers, named consts.
- Tests: use a temp db file now, was experiencing race conditions with concurrent tests (expected).
- Adding microvm lifecycle api routes to server mode.
- Progress bar for image pulls to indicate activity during operations
Full changelog
- Adding progress bar for image pulls so it doesn't look like it's frozen.
- Fixed timeout for very large image pulls
- Support for large multi-language container images (Python, Node.js)
Full changelog
- Increasing stability.
- Fixes and support for large multi-language container images ex. python, nodejs.
Fixed missing agent-rootfs in distribution that broke installation.
Changelog
- Bug in installation step, missing agent-rootfs in the distribution.
Minor fixes and improvements.
Changelog
Smol things lead to big things.