Show HN: machine0 – Persistent NixOS VMs You Control from the CLI

machine0.io

90 points by bwm 1 day ago

Hi 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-nixos

If 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!

EnigmaCurry 1 day ago

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 1 day ago

    Always happy to meet others that are working with NixOS :) I've just added the License - it's MIT.

  • OhSoHumble 21 hours ago

    I tried out NixOS a few years ago but recently transitioned back to Rocky Linux and Ansible. I know that Nix is treasured by some but it always came across as an esoteric tool for functional programming idealists. I found the community to be split between people who were genuinely helpful and people who were just... not.

    I found Nix just really hard to work with. The documentation was just so poor and every aspect of Nix just seemed to be divorced from pragmatism.

    An example of this, years ago, was that I wanted to do something VERY simple: codify the creation of a directory in NixOS. It took me 6 HOURS to find the relevant code for doing that. I couldn't even get an answer out of the Discord server.

    I don't know if I'll ever pick it up again. The learning curve was incredibly steep and it's just not on job descriptions and I've never worked in a shop that has used it. I tried it out as a curiosity, found that it was hair pullingly frustrating to use, and moved on.

    • bwm 21 hours ago

      Yea, I totally get it. The thing is agents change the game. You no longer need to worry about the learning curve or how best to implement.

      Just point your agent at a machine0 VM and say "make a machine that does X", then you get code you can use to build on any nix box and you'll always get the same result.

      Once you experience this, it's hard to go back to a "traditional" OS, you'll want to nixify everything :)

    • mplanchard 19 hours ago

      I do think the community recognizes this to be an issue and is steadily working on improving beginner-friendly docs. I am about seven years into using Nix for various things, and can mostly solve most problems, but I won’t deny that the learning curve at the beginning was brutal. The real and most meaningful unlock is learning to read the nix language well enough to follow what is happening, then checking out nixpkgs locally to look at crate derivations and such to understand what idioms exist in “real code.” The module system also took ages to click for me, but was a big unlock.

      Anyway, I hope the community continues to make the onboarding process more welcoming and easy. Personally, I am hopeful that guix will really take off at some point, because even though I get it now, I’d way rather read lisp than nix.

setheron 1 day ago

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 1 day ago

    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 23 hours ago

      Come join us at https://tacosprint.org/ We have more availability! (Also sponsor maybe )

      • bwm 23 hours ago

        Would love to join the next one!

      • gausswho 20 hours ago

        Seems application deadline ended a month ago?

        • setheron 14 hours ago

          You can still apply. People dropped out. Reach out to me if you want. My email is in my website (see profile).

          We leave Saturday to hack on Nix !

lavaman131 12 hours ago

This looks really good. NixOS is a great operating system for reproducibility. I like also that you can spin up VMs via the CLI just as a convenience part too. This looks great for an individual developer. From the team perspective, if I create a golden snapshot of a dev env, is there a way within the product to sharae the image with others so they can spin it up instantly?

nc 1 day ago

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 1 day ago

    Been great having you :)

farfatched 19 hours ago

> Every VM gets its own static IP

How does this interact with per-minute pricing?

If I have a machine that's on for 1 minute per month, do I retain an IPv4 address for the whole month?

Or is it IPv6-only?

I recall exe.dev addressed this by not having static IPs, and instead only allowing SNI/SSH proxying to hosts.

  • bwm 18 hours ago

    You retain the IP as long as you keep the VM. If you delete it, you'll loose the IP.

nightfuryg 1 hour ago

Excellent idea. Is there a nixpkg available for it?

Pet_Ant 23 hours ago

I wonder how easy this would be to port to Guix?

  • bwm 23 hours ago

    You could point your agent at the machine0 CLI and ask it to :)

GeoffNN 21 hours ago

Very cool! I'll definitely check this out for auto-research like experiments, esp. with GPUs

  • bwm 21 hours ago

    Yes, it's ideal for this!

JeanEdern 1 day ago

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 1 day ago

    It's not possible to modify the VM outside of the flake :)

Bnjoroge 22 hours ago

Very cool. I have something similar set up for my homelab where I launch nixos incus containers. Been great for offloading stuff from the my agents

  • bwm 22 hours ago

    It's funny, because my homelab is exactly where this started :)

dmmalam 22 hours ago

Looks cool. Can I run on other clouds.

  • bwm 22 hours ago

    Soon!

n3mo-dev 1 day ago

Great product, with great explanation

  • bwm 1 day ago

    Thank you!

yapancha 22 hours ago

So happy to see this, finally.

  • bwm 22 hours ago

    Thanks! I'm so happy to be building this :)

cdevr 23 hours ago

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/dtt

I 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 23 hours ago

    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