Back to HN Show HN: machine0 – Persistent NixOS VMs You Control from the CLIby bwm | 48 points | 16 comments | 2026-06-15 11:01:43 Central Open Source Link | Read Source Here Open on Hacker News PostHi HN! Excited to launch machine0, a CLI that makes it
easy to create, provision and snapshot persistent NixOS
(& Ubuntu) VMs.You can think of machine0 as a modern VPS
provider. VMs stay on unless switched-off (with 99.99%
uptime), they have static IPs and HTTPS endpoints, 1-60
vCPU, up to 240GB RAM and optionally GPUs. The CLI
provides commands to manage lifecycle, snapshots and
also provision the VMs using Nix flakes or Ansible
playbooks. VMs are priced by the minute of usage.What
makes machine0 unique is that it has first class support
for NixOS! In a nutshell, NixOS lets you define your
entire OS as code (think Terraform but for your Linux).
A flake declares your system state (packages, services,
firewall rules, users...) and pins all dependencies via
a lockfile. Given the same flake.nix and flake.lock,
`nixos-rebuild switch` always produces the exact same
system.The NixOS ecosystem is mature, and flakes are
expressive: at the system level you can define packages,
what's in /etc, firewall rules, users & groups etc. At
the user level, you can define your shell, aliases, tmux
and vim config. Having your entire environment defined
as code makes it easy to audit what's installed and how
things are set up. You can rollback by reverting the
last commit. And agents can write the code for you and
test it against disposable machine0 VMs.If you'd like to
dive right in, these commands will get you started: npm
install -g @machine0/cli
machine0 new my-vm --image nixos-25-11 # create a new
nixos VM
machine0 provision my-vm ./flake#my-profile # provision
it using a nix flake
machine0 ssh my-vm # ssh in
machine0 stop my-vm # stop the VM
machine0 images new my-vm my-snapshot # create a
snapshot
machine0 new my-clone --image my-snapshot # create a
new VM from the snapshot - Demo of installation + NixOS provisioning via Claude
Code: https://www.youtube.com/watch?v=RT8N0_e3Vfg-
Documentation:
https://docs.machine0.io/introduction/overview- machine0
NixOS flakes: https://github.com/fdmtl/machine0-nixosIf
you're in the habit of using VMs, or want to know what
the NixOS fuss is about, would love for you to give
machine0 a try! CommentsEnigmaCurry I'm happy to see this, and I have lots of thoughts about
this. Building declarative services on Nix is a far
superior way of distributing Linux to VMs than most any
other way I've tried. I am working [1] on very similar
things, but I've been leaning more on the self-hosted
path, my VM template targets libvirt and Proxmox VE with a
single CLI api. I even have an experimental branch that
targets DigitalOcean. For VMs especially, I want my OS to
be immutable. My VMs should contain no state other than my
application state. Upgrades should be a full image
replacement and reboot.So in my template, I have created
the VMs with two disks: first one is for NixOS and is
built from an image, and it is read-only. The second is
mounted to /var and is used for all system configuration
as well as application state. If I have multiple VMs, they
can all share the same base image (thin provisioned).
That's the mode that I want for my deployments of
services, immutable and as stateless as possible. For
agent use, its different, you actually want a mutable
NixOS root so that the agent can do what it wants.I built
three modes: immutable, semi-mutable, and mutable. mutable
removes the read-only lock on the root, and just lets you
manage the VM as a pet. semi-mutable adds an ephemeral
overlayfs that gets wiped the next time you upgrade the
base image. So that gives you kind of the best of both
worlds: an immutable read-only base image and the ability
to "nix profile add" whatever you (or your agent) wants,
but with the contract that these imperatively installed
things will disappear the next time you upgrade. Are you
planning on adding a LICENSE to your machine0-nixos
repo?[1] https://github.com/EnigmaCurry/nixos-vm-template
| > bwm Always happy to meet others that are working with
NixOS :) I've just added the License - it's MIT.
| setheron Big fan of exe.dev so the added Nix seems like a solid
value add.exe.dev is great but lurking in my mind is: "how
will I replicate this if I ever need to move to AWS etc.."
for all the service composition.Site looks great too
| > bwm Thanks! Yup, one of the benefits of defining your VMs
as code using Nix, is that you can take that code to
any supplier, and you're guaranteed exactly the same
build.
| > > setheron Come join us at https://tacosprint.org/
We have more availability!
(Also sponsor maybe )
| > > > bwm Would love to join the next one!
| nc I've been using machine0 for hosting openclaw and a couple
of web apps i've been working on. Great product super easy
to use with claude code.
| > bwm Been great having you :)
| Pet_Ant I wonder how easy this would be to port to Guix?
| > bwm You could point your agent at the machine0 CLI and ask
it to :)
| JeanEdern How does machine0 handle NixOS state drift and recovery in
practice-for example, if a VM is manually modified outside
the flake, can I detect or reset that drift, and how do
snapshots interact with flake-based provisioning?
| > bwm It's not possible to modify the VM outside of the
flake :)
| cdevr I made this (minus NixOS support, I should add that) for
proxmox VE using their API a few weeks ago. I mean it's
not this extensive, but it
works:https://github.com/cdevr/dttI mean, I'm not going to
claim it's remotely near the same quality. And proxmox has
some holes in their support for cloud init. And of course
you need a mini pc on a good internet connection or the
like.But extremely fast provisioning of a any of VMs ...
very handy.Proxmox has too many compromises though. Maybe
I should do the reverse, and extend this until it can
fully replace proxmox entirely.
| > bwm I'm also a big fan of proxmox! Would be happy to help
you extend machine0 though :) Happy to chat about your
requirements over email: barnaby@machine0.io
| n3mo-dev Great product, with great explanation
|
|