## 1.0.154.3 Aug 15, 2026
- New signups now get a higher default API rate limit (1,000 → 3,000 requests/hour).
## 1.0.154.2 Aug 14, 2026
MACHINE0_API_KEY and MACHINE0_MCP_URL env vars on profiled VMs. Every VM created or deployed with a profile now exports its profile's MCP gateway endpoint and a matching API key as plain environment variables, so any third-party tool on the VM (an MCP client config, a script, a service) can call the profile's MCP endpoint without hardcoding the URL or generating a separate key by hand. Setting either name yourself via machine0 env set disables the injection of both and your values win (applies on the VM's next deploy or resume, like all env changes).
## 1.0.154 Aug 2, 2026
- Disks are no longer experimental.
machine0 disks (and --attach disk:<name> path:</abs/path> on machine0 new) is now available by default — no more USE_EXPERIMENTAL_FEATURES flag required.
## 1.0.153 Aug 2, 2026
xl-premium and xxl-premium machine sizes..
## 1.0.152.0 Aug 2, 2026
disks detach no longer gets stuck in detaching.... Detaching from a VM that isn't running, or that was created with your own public key (the server can't SSH in to unmount safely), now fails immediately with a clear message about what to do — instead of showing detaching... forever. And if a detach genuinely fails after retries (for example a process still using the mount path), the disk returns to attached so you can fix the cause and retry, rather than hanging indefinitely.
## 1.0.152 Aug 2, 2026
disks get now shows cost and a fixed-up "Attached To." disks get gains $/month, Total Cost, and a Created At (X ago) timestamp, matching images get. The relative-age display ("21d 20h 3m ago") also had a rollup bug fixed — it used to dump leftover time as raw minutes ("21d 1203m ago"). disks ls's In Use column is renamed to Attached To, and its Created column is removed (see disks get for the full timeline). Breaking: the --mount flag on machine0 new is renamed to --attach (e.g. machine0 new my-vm --attach disk:data path:/data) — disks is an experimental, opt-in feature (USE_EXPERIMENTAL_FEATURES), so existing usage is expected to be limited; update any scripts using --mount.
## 1.0.151.0 Aug 2, 2026
- Mounted disks are now writable without
sudo. A disk mounted with new --mount or disks attach was previously owned by root, so the VM's normal login user could see the mount but not write to it. Newly mounted disks are now owned by the VM's login user out of the box. Suspended machines with an existing mount pick up the fix automatically on their next resume; already-running machines need a one-time sudo chown <user>: <path> on the affected mount.
## 1.0.151 Aug 2, 2026
- Shorter
disks rm confirmation. The "are you sure" prompt before destroying a disk is now a single, tighter sentence.
## 1.0.150 Aug 2, 2026
- Error messages no longer suggest the wrong command. Commands like
disks, keys, and image versions no longer tell you to run machine0 ls (which only lists VMs) when something goes wrong — you'll see the actual error and, if it looks wrong, a pointer to contact [email protected].
## 1.0.149 Jul 31, 2026
disks attach / disks detach. Disks can now be mounted onto (or removed from) an already-running VM without recreating it — previously a disk could only be mounted at VM creation time with new --mount. Requires the VM to be running with a managed SSH key; mounts made this way survive reboots and suspend/resume just like creation-time mounts.
## 1.0.147 Jul 30, 2026
- Windows CLI package portability. The published CLI now builds as ESM with
open and update-notifier left external (loaded from installed node_modules), so Windows no longer hits ERR_INVALID_FILE_URL_PATH from Linux build-host paths baked into the bundle. clean also removes the whole dist dir so a fresh Windows checkout can build without a platform-sensitive dist/* glob.
## 1.0.146 Jul 30, 2026
vars is now machine0 env. The profile variables command group (ls/set/unset) is now machine0 env — machine0 vars still works as an alias, so existing scripts and muscle memory keep working.
## 1.0.145 Jul 29, 2026
- Claude Code API-key login now actually works on VMs. Connecting
claude-code with an API key now injects it the way claude login records it (primaryApiKey in ~/.claude.json), so claude on the VM is genuinely logged in — previously the key was written somewhere claude didn't reliably pick it up. The connect chooser is now explicit about billing: Anthropic Subscription (a Claude Pro/Max/Team account login, stored as-is like before) or Anthropic API Key (paste a key — the right choice for Anthropic Console / API-billing accounts, whose account login can't run claude on a VM). integrations check now also tells the truth about that last case: a stored Console-account login is reported as failing with a hint to reconnect using the API-key option, instead of claiming it's valid.
## 1.0.144.1 Jul 29, 2026
- GPU price update. Hourly rates for the affected GPU sizes changed to follow DigitalOcean's GPU price increase (effective August 1, 2026):
gpu-mi300x-1 $2.189 → $2.849, gpu-h100-1 $3.729 → $4.851, gpu-h200-1 $3.784 → $4.917, gpu-mi300x-8 $17.512 → $22.792, gpu-h100-8 $26.312 → $34.232, gpu-h200-8 $30.272 → $39.336 per hour. RTX 4000 Ada, RTX 6000 Ada, and L40S prices are unchanged. The new rates apply to newly created and already-running machines; suspended machines are unaffected while suspended.
## 1.0.144.0 Jul 28, 2026
- New accounts can run up to 50 machines at once. The default per-account machine limit for new signups is now 50 (up from 3). Existing accounts keep their current limit. Free accounts are still limited to 1 machine until the first top-up.
## 1.0.144 Jul 24, 2026
- Cleaner integrations table.
machine0 integrations ls (and the INTEGRATIONS section of profiles get) now lists system integrations first, then MCP integrations — each group alphabetical — with shorter descriptions and without the "Last checked" column. integrations check uses the same order and keeps its Last checked column, and --json still carries the full timestamps. If a script reads the ls/profiles get --json array positionally, key rows by name instead — that array order changed (integrations check --json order is unchanged).
## 1.0.143 Jul 23, 2026
- Connect
claude-code and codex with your own API key. machine0 integrations connect claude-code (and codex) now asks how to authenticate: API key (recommended) — paste your Anthropic sk-ant-... or OpenAI sk-... key, validated against the provider before it's stored — or the existing account-based OAuth login. VMs created with the profile get the key injected so claude/codex work out of the box, integrations check validates the key live, and integrations get shows a masked label (e.g. API key (sk-ant-...abcd)). Skip the prompt with --auth <api-key|oauth>; in scripts, pipe the key to machine0 integrations connect codex --auth api-key.
## 1.0.142 Jul 23, 2026
- Agent skills:
machine0 skills install / machine0 skills uninstall. Install machine0's curated agent skills (from fdmtl/machine0-skills) into your local coding agents — Claude Code, Codex, or both (pick interactively, or pass --agent). The first skill is /create-machine: describe a machine in plain English (e.g. "a server running postgres on docker managed with a Dockerfile") and your agent scaffolds a git-versioned NixOS project, boots a machine0 VM from it, verifies it over SSH, and leaves it running with a login banner that explains the machine.
machine0 provision can now be re-run against the same VM: the first NixOS rebuild left root-owned files in the synced directory, so every subsequent provision failed with a permission error (rsync exit 23).
## 1.0.141 Jul 21, 2026
- Env sets are gone — use profile variables instead. The
machine0 env command group (env ls/get/new/set/unset/rm) and the -e/--env flag on machine0 new have been removed. Store variables on a profile with machine0 vars set KEY=VALUE and inject them at creation with machine0 new <vm> --profile <name>. Existing VMs are unaffected while running; on their next resume (or profiles deploy) they receive their profile's variables only.
## 1.0.140 Jul 20, 2026
- Profiles are now available to everyone. A profile is a named set of integrations, prompts, and env variables you can inject into a VM — the
profiles, integrations, vars, and prompts command groups are visible on every install (previously hidden behind USE_EXPERIMENTAL_FEATURES).
- Manage profiles with
machine0 profiles new/ls/get/update/duplicate/rm; every account starts with a profile named default.
- Connect integrations per profile with
machine0 integrations connect: github (a GitHub App installation scoped to repositories you pick — gh and git push/clone work on the VM), claude-code (claude starts logged in), codex (codex starts logged in), and machine0-cli (the machine0 CLI works inside the VM). Add any remote MCP server by URL with machine0 integrations new <name> --url <url>, and verify connections with machine0 integrations check.
- Store prompts with
machine0 prompts new and env variables with machine0 vars set (use --secret for write-only values, masked in vars ls).
- Create a pre-authenticated VM with
machine0 new <vm> --profile <name>, or apply a profile to a running VM with machine0 profiles deploy <vm>.
- Every profile serves its MCP integrations and prompts through one aggregated MCP endpoint (
https://app.machine0.io/profiles/<name>/mcp, OAuth or x-api-key auth) — prompts appear as slash commands in connected Claude clients.
- Commands target your current profile: set it with
machine0 profiles use <name>, override per command with -p/--profile, or pin one per project via DEFAULT_PROFILE in a machine0.env file.
- VMs created without
--profile from a snapshot of a profile VM now boot with the snapshot's injected credentials removed (the stale gh/codex/claude/machine0-CLI logins and MCP config machine0 wrote are scrubbed on first boot; logins you set up manually are untouched).
- The
integrations test alias — use machine0 integrations check (or its permanent alias inspect).
## 1.0.138 Jul 12, 2026
machine0 integrations update <profile> <integration> — edit a custom MCP integration's --description, set a --prefix that namespaces every tool and prompt the server exposes through the profile's MCP endpoint (e.g. --prefix notion_ → notion_search), and set a --tool-whitelist (comma-separated name prefixes) so only matching tools are proxied. Pass "" to any flag to clear it.
machine0 integrations get <profile> <integration> now live-probes MCP servers and lists their prompts and tools (with prefix and whitelist applied), and shows the description, prefix, and tool whitelist in the attributes.
machine0 integrations check now shows a PROMPTS section above TOOLS — including the profile's own prompts — matching exactly what MCP clients see through the profile endpoint.
machine0 profiles get is tidier: the header box shows name, description, and MCP URL (created/updated dropped), the prompts table shows the start of each prompt body, the variables section is titled ENVIRONMENT VARIABLES, and the VMs section is gone (use machine0 ls).
machine0 prompts ls columns are now Name, Description, and Body (a one-line preview); machine0 prompts get drops the size/created/updated rows and word-wraps the body to your terminal width.
machine0 integrations get --json for MCP integrations now includes an inspection key carrying the live-probe payload (status, prompts, tools) alongside the existing attribute fields.
## 1.0.136.0 Jul 12, 2026
- iPad app (1.3.2): the right arrow key on hardware keyboards (Magic Keyboard) now works in the terminal.
## 1.0.136 Jul 12, 2026
- The experimental folders (alpha) feature — shared network filesystems — has been removed.
machine0 new --mount now takes disks only (--mount disk:<name> path:</abs/path>); the folder: mount syntax and the folders command group are gone. Persistent storage is served by the experimental disks feature.
## 1.0.135 Jul 12, 2026
machine0 --help has been reorganized to read more naturally: core VM commands now lead under CORE COMMANDS, related sections are grouped together (images, then the profiles family, then storage), account and config move to the bottom, the profile vars section is now titled ENVIRONMENT VARIABLES, and sync appears under FILE TRANSFER. The use shortcuts no longer clutter the help screen but still work (machine0 use openclaw, machine0 use webserver).
machine0 config get no longer mislabels values that come from environment variables as being set in ~/.machine0/machine0.env — they now carry an (env) marker showing they override your config files. machine0 config set also warns when the value you just saved is currently shadowed by an environment variable, instead of silently appearing to have no effect.
- An environment variable set to an empty string (a stray
export SERVER_URL=) no longer silently discards your machine0.env value and falls back to the built-in default — empty now counts as unset, so your configured value applies.
## 1.0.134.0 Jul 12, 2026
- iPad app (1.3.1): the machines list is now collapsible — a sidebar button at the top of the list hides it (and the bottom toolbar) for a fullscreen terminal, and the button in the terminal's title bar brings it back. The Sign Out button moved to the right end of the bottom toolbar.
- Hardware keyboards (Apple Magic Keyboard and others) now work correctly in the mobile terminal: arrow keys, Ctrl shortcuts (Ctrl+C, Ctrl+R, …), Esc, Tab/Shift+Tab, Home/End/PgUp/PgDn and key auto-repeat all behave like a desktop terminal instead of printing stray characters. The on-screen shortcut bar hides automatically while a hardware keyboard is connected and returns when it disconnects.
## 1.0.134 Jul 12, 2026
- VMs no longer briefly show
ERRORED when a stop, start, reboot, or create hits temporary cloud-provider rate limiting — the operation now retries quietly and only reports an error if it genuinely can't complete. Stuck VMs (e.g. one wedged mid-stop by an interrupted operation) now also recover automatically within about half an hour instead of staying stuck.
## 1.0.133 Jul 11, 2026
- The iPhone app now runs on iPad (app version 1.3.0): the machines list stays on the left and the SSH terminal opens in a pane on the right. Tap a running machine to switch the terminal over to it — the old session disconnects and the new one connects, with no back-and-forth navigation (machines using a local public key still point you to the CLI). iPad also supports landscape and all other orientations.
## 1.0.127 Jul 10, 2026
- The experimental
gateways command group (machine0 gateways ..., including the MCP server registry from gateways registry ls|get|readme and the OAuth flows from gateways servers auth|deauth) has been retired. Profiles replace it: group your remote MCP servers as integrations under a profile with machine0 profiles new <profile> <integration> --url <url>, authenticate with profiles connect, and point agents at the profile's aggregated MCP endpoint. Gateways never left the experimental flag, and no stored gateway data existed to migrate.
## 1.0.125 Jul 10, 2026
- The install command (
curl -LsSf https://machine0.io/install.sh | sh) no longer fails on Ubuntu and Debian with set: Illegal option -o pipefail — the installer now works when piped into any shell, not just bash.
## 1.0.123 Jul 10, 2026
- Set a startup command for the iPhone app's SSH terminal:
machine0 update <vm> --ssh-client-initial-command "tmux attach || tmux new" runs the command automatically each time you open the VM in the app, right after the shell loads (pass "" to clear). The command shows in machine0 get under the SSH key, is copied onto snapshots when you create an image from the VM, and is inherited by VMs created from those snapshots — where you can override it with machine0 update. Requires iPhone app 1.2.2 or later to execute; the command is stored in plain text, so keep secrets in env sets instead. (Env sets were replaced by profile variables in 1.0.141 — use machine0 vars set --secret.)
## 1.0.121 Jul 10, 2026
- Browser-based MCP clients (like the MCP Inspector) can now connect to the machine0 MCP server with OAuth: the OAuth discovery, token, and MCP endpoints now allow cross-origin browser requests, which previously failed with CORS errors during authorization.
## 1.0.120 Jul 10, 2026
machine0 profiles connect <profile> github (experimental) now lets you choose exactly which repositories the connection can access: the browser opens GitHub's app-install screen where you pick "All repositories" or "Only select repositories", instead of granting access to everything. Change your selection anytime at github.com/settings/installations — it takes effect immediately, including on VMs already running with the profile. machine0 profiles test <profile> github now also reports which repositories are accessible. Note: gh gist is no longer supported by these connections (GitHub Apps have no gist access); previously connected GitHub accounts keep working, and profiles test will suggest reconnecting to pick repositories.
## 1.0.119.1 Jul 10, 2026
- Connecting MCP clients to machine0 with OAuth (claude.ai custom connectors, MCP Inspector) now completes reliably: after clicking Approve, the browser returns to the client to finish authorization — previously machine0 showed "Connected Successfully" but the client never received its authorization code. Also fixed Google sign-in and first-time top-up during an MCP authorization dropping the flow before the consent step.
## 1.0.113 Jul 10, 2026
- New
us-west region in San Francisco: machine0 new <vm> --region us-west. The existing US region (New York) is now called us-east — your existing VMs and saved configs keep working, and --region us from older CLI versions is still accepted and maps to us-east. GPU sizes remain available in us-east, uk, eu, and asia.
- GPU VMs now strictly honor the requested region: when GPU capacity is unavailable in your region, creation fails with a clear out-of-stock error instead of silently placing the VM in a different region.
## 1.0.112 Jul 10, 2026
- New NVMe machine sizes:
large-nvme, xl-nvme, and xxl-nvme — the same vCPU, RAM, and disk as large/xl/xxl, but running on newer-generation CPUs with NVMe storage for significantly higher disk IOPS, at about 17% more per hour ($0.061, $0.121, and $0.243 respectively). Available in every region: machine0 new myvm --size xxl-nvme. See them all with machine0 sizes.
- Snapshots of GPU VMs can now be used with any machine size that has enough disk, not just GPU sizes — snapshot a GPU VM, destroy it, and pick the work up later from a cheaper CPU VM (a 1x-GPU snapshot fits
5xl or 6xl). Snapshots taken from those CPU VMs stay GPU-compatible, so you can move back to a GPU size at any time. GPU snapshots also now show up in machine0 images ls, the web dashboard, and the iPhone app's image picker (the gpu-*-base system images still require GPU sizes).
- GPU and standard VMs live in different datacenters within a region, so the first time you use a snapshot with a new size class,
machine0 new now transfers it automatically and tells you to retry in a few minutes (previously this failed with an errored VM). Relatedly, machine0 images update --region now adds regions instead of rejecting requests that omit existing ones.
## 1.0.101 Jul 6, 2026
- CLI commands no longer intermittently fail with "Rate limited. Please wait a moment and try again." for accounts running continuous automation, even when well under the account's API rate limit.
## 1.0.100 Jul 5, 2026
- MCP server registry: browse a curated catalog of vetted remote MCP servers (Linear, Sentry, Slack) with
machine0 gateways registry ls, inspect an entry's endpoint, auth method, and full tool list with gateways registry get <name>, and read setup notes with gateways registry readme <name>. Add a registry server to your gateway with the usual gateways servers add + gateways servers auth (see each entry's readme for per-server auth caveats — Slack requires a pre-registered app and can't be authenticated through a gateway yet).
## 1.0.99 Jul 5, 2026
- iPhone app: pressing return on the on-screen keyboard in the SSH terminal now runs the command. Previously it inserted a blank line at the prompt and nothing executed, making the terminal unusable without an external keyboard.
## 1.0.98 Jul 4, 2026
- iPhone app: the in-app SSH terminal now connects to machines running a hardened SSH configuration. Previously it would sit on a blinking cursor and then time out on these machines; it now opens a shell as expected, and when a connection genuinely can't be established it shows a clear error right away instead of a 20-second hang.
## 1.0.97 Jul 4, 2026
- The CLI no longer crashes with a cryptic
SyntaxError when run on an older Node.js version (< 20.12) — for example, if you already had an older Node.js installed before running the install script. It now shows a clear message telling you to upgrade instead, and the install script automatically upgrades an outdated existing Node.js install rather than leaving it in place.
## 1.0.96.0 Jul 3, 2026
- iPhone app: SSH into your machines from your phone. Tap a running VM to open its action menu and choose "ssh" for a full-screen, native terminal — an interactive shell with a Ghostty-quality renderer and a key bar for Esc, Ctrl, Tab, and arrows so vim and htop work on the soft keyboard. The private key is fetched over TLS and stored in the device Keychain; host keys are pinned on first connect, and a changed host key stops the connection and shows both fingerprints before you decide to trust it. Machines that use a local public key still point you to the CLI. iOS only for now.
- Auto top-up can now be turned on or off from the billing page in the web dashboard. It stays on by default; when off, machines follow the normal snapshot-and-destroy path if your balance runs out. The billing page also warns you if the last automatic charge failed.
## 1.0.96 Jul 2, 2026
- Gateway servers can now authenticate with upstream MCP servers that require OAuth (Notion, Linear, and most hosted MCP servers). Run
machine0 gateways servers auth <gateway> <server> to open the provider's consent screen in your browser; once you approve, the gateway attaches the credentials to that server's requests automatically. Tokens are stored encrypted and refreshed for you. machine0 gateways servers deauth <gateway> <server> removes them. machine0 gateways get now shows each server's authentication status (authorized, unauthenticated, or unreachable).
## 1.0.93 Jun 30, 2026
- Environment variable sets: manage named groups of key-value pairs with
machine0 env new, env set, env unset, env ls, and env rm. Attach a set to a new VM with machine0 new --env <name> and the variables are injected via cloud-init into /etc/environment (for services and non-login shells) and /etc/profile.d/machine0-env.sh (for interactive sessions).
## 1.0.91 May 21, 2026
- Low-balance suspension threshold is significantly less aggressive. The reserved
balance is now calculated against a realistic snapshot-size estimate (rather
than the full boot disk) and a 1-week retention window (down from 2 weeks).
For example, the reserve for an XXL machine drops from ~$13 to ~$2, so a small
top-up now buys you genuine runtime instead of getting suspended on the next
billing tick.
## 1.0.89.2 May 14, 2026
- Onboarding install page: two example commands used the same machine name "openclaw", causing the second to fail with a name collision. The Ubuntu example now uses "ubuntu" as the machine name.
## 1.0.89.1 May 14, 2026
- CLI authorization page redesigned: cleaner layout with a single "Connect" button, icon indicator, and Geist Sans headings. Permissions list removed in favour of a simpler consent screen.
- Install CLI page now shows commands in a single terminal-style code block with
$ prompts, matching the marketing site.
- Full-screen notification pages (connect success, connect error, verify email, account suspended) now show status-specific icons in circles.
## 1.0.89.0 May 12, 2026
- Web dashboard: connect to managed-key VMs directly in the browser via a built-in terminal. Click SSH on any running VM with a managed key and a full-screen interactive shell opens at
/machines/<name>/terminal — no need to switch to your local shell. VMs created with a user-provided public key still show the CLI command, since the server doesn't have the private key. Connections survive long-running commands (4-minute keepalive) and close cleanly after 30 minutes of inactivity. Destroying the managed key terminates active sessions immediately.
## 1.0.89 May 12, 2026
- Image size mismatch errors now tell you the minimum VM size needed (e.g. "image was made with an xl VM, use --size xl or larger") instead of showing raw disk gigabytes.
- Error messages no longer include documentation links, keeping CLI output cleaner and easier to maintain.
## 1.0.88 May 12, 2026
- Web dashboard now mirrors the CLI for machines, images, and SSH keys. Machine rows show the correct status (
RUNNING, STOPPED, STARTING, ERRORED, SUSPENDED, etc.) with the right colour and a spinner during transitions, instead of collapsing every non-running state into "Stopped". Tables show the columns the CLI shows: Name / Status / IP / Size / Region for machines, Name / Description / Status / Region(s) for images, Name / Fingerprint / Type / Default for SSH keys.
## 1.0.85.0 May 10, 2026
- Resuming a suspended VM with a large disk (250GB+) no longer creates duplicate instances. Previously, the resume could time out and retry up to 5 times, each creating a new VM at the provider. The machine would get stuck in ERRORED state with no way to recover. Now retries reuse the existing instance, and
machine0 start works on errored machines from failed resumes.
## 1.0.85 May 10, 2026
- Redemption code onboarding: share a promo link (
app.machine0.io?redeem=<code>) and new users get free credits applied during sign-up. The login page shows the credit amount waiting, and after sign-up users can optionally save a card on file via Stripe for uninterrupted service when credits expire.
machine0 sizes no longer requires login. You can check pricing without an account.
- Fixed an open redirect vulnerability in the email login flow where the
returnTo parameter was not validated before navigation.
## 1.0.84 Apr 28, 2026
- Three new Premium Intel sizes:
4xl (32 vCPU / 128 GB), 5xl (48 vCPU / 192 GB), and 6xl (60 vCPU / 240 GB). Available in US region. Run machine0 sizes to see them.
## 1.0.82 Apr 26, 2026
- When creating a VM with an image too large for the selected size, the error now tells you the exact command to run. Previously:
Run: machine0 ls (useless). Now: Run: machine0 new <vm> --size xl --image nixx with the cheapest compatible size calculated automatically.
## 1.0.81 Apr 26, 2026
- SSH sessions no longer show a misleading "SSH connection failed after retry" error when the remote VM reboots. Previously, rebooting a VM while connected via
machine0 ssh would display an error and suggest retry commands. Now the CLI exits cleanly, matching the behavior of other connection interruptions like Ctrl+C.
## 1.0.80.1 Apr 26, 2026
--metadata now works when creating a new image via machine0 images save and machine0 images upload. Previously, metadata was silently dropped on the first image creation and only applied to subsequent versions.
## 1.0.80.0 Apr 26, 2026
- CLI login now works on Linux systems where
/tmp is a separate filesystem (NixOS, Docker containers, Orbstack VMs). Previously, authenticating via machine0 login or any command that triggers login would fail with EXDEV: cross-device link not permitted.
## 1.0.79.2 Apr 26, 2026
- Snapshots are no longer immediately deleted when your balance runs low. Previously, if you had no running VMs and your balance dropped, all your snapshots were destroyed instantly with no warning. Now you get a 14-day grace period with email warnings at the start and 48 hours before deletion. Topping up your balance at any point during the grace period saves your snapshots.
## 1.0.79.1 Apr 25, 2026
- Suspend snapshots are now automatically cleaned up when a VM resumes. Previously, the snapshot image persisted after resume, costing ~$5/month in storage until manually deleted.
- Re-suspending a previously suspended VM now creates a fresh snapshot of the current state. Previously, the stale snapshot from the first suspend was reused, meaning any changes made after resume would be lost.
- Image version management moved to
machine0 images versions subcommand group. New commands: versions ls <image>, versions get <image> <version>, versions promote <image> <version>, versions rm <image> <version>. Replaces images publish, images get --image-version, and images rm --image-version.
## 1.0.79.0 Apr 25, 2026
xxxl size now works. Previously, creating an xxxl machine would fail because it referenced a DigitalOcean droplet size that doesn't exist. The xxxl tier now uses a General Purpose dedicated-CPU droplet (16 vCPU, 64 GB RAM, 200 GB disk) at $0.825/hr.
machine0 start now works on both stopped and suspended VMs. No need to remember machine0 resume — just use start for everything. The resume command has been removed.
## 1.0.78.3 Apr 25, 2026
- Auto top-up no longer triggers incorrectly when short-lived CI machines are running. Previously, ephemeral machines could spike the billing threshold calculation, causing unnecessary charges even with plenty of balance remaining.
## 1.0.78.2 Apr 24, 2026
machine0 resume <vm> no longer briefly shows ERRORED status before completing. Previously, resuming a suspended VM could trigger a false "machine is in an error state" message if the VM took more than a couple of minutes to provision.
## 1.0.78.1 Apr 24, 2026
machine0 ls now shows SUSPENDING status while a VM is being suspended, instead of briefly showing STOPPING then STOPPED before the final SUSPENDED state
## 1.0.78.0 Apr 23, 2026
- Every read-only CLI command now supports
--json for structured output: machine0 get <vm> --json, machine0 images get <image> --json, machine0 keys get <key> --json, machine0 whoami --json, machine0 billing --json, machine0 sizes --json, and machine0 config get --json. Pipe to jq or feed directly to scripts and coding agents.
machine0 images get <image> --image-version <n> now displays version metadata as pretty-printed JSON below the details table
machine0 images get <image> versions table: "Created" column renamed to "Created At" and now shows date and time instead of date only
machine0 images get <image> versions table: removed empty "Notes" column (notes were always stored as metadata, never displayed here)
## 1.0.77 Apr 23, 2026
- Suspend and resume VMs:
machine0 suspend <vm> snapshots your VM and deletes it from the cloud so you only pay for image storage (~$0.078/GB/month instead of full VM cost). machine0 resume <vm> restores it to running state from the snapshot.
- Suspended VMs appear in
machine0 ls with SUSPENDED status and show $0/month cost
- Web dashboard shows Suspend/Resume actions for VMs
- Deleting a suspended VM automatically cleans up its snapshot image
## 1.0.76 Apr 22, 2026
- First-time user experience: new signups now land on an onboarding page to fund their wallet before creating their first VM
- CLI commands like
machine0 new automatically trigger the login flow when run without a saved session — no need to run machine0 login manually first
/connect page shows a "Payment confirmed" banner when users arrive after completing a wallet top-up
## 1.0.75 Apr 21, 2026
machine0 ls, machine0 keys ls, and machine0 images ls now take --json for parseable output. Pipe straight into jq, feed to coding agents, or script against structured fields without scraping tables.
machine0 ssh <vm> <command> no longer hangs on commands with complex quoting. The CLI passes argv through to the remote instead of joining into a single string — ~/paths, escaped quotes, and && chains all survive the round trip. SSH keepalives (ServerAliveInterval=30, ServerAliveCountMax=10) also prevent dead channels from blocking forever (~5 min timeout, generous enough to outlast nixos-rebuild package download stalls).
machine0 ssh no longer silently re-runs a command when the network drops mid-execution. Retries only happen in the initial connection phase for freshly-booted VMs, so non-idempotent commands (apt upgrade, migrations, file moves) can't double-apply after a keepalive disconnect.
machine0 provision now uses the same SSH keepalives as every other CLI command, so dead channels during long nixos-rebuild runs time out instead of hanging indefinitely.
machine0 sync push now prints per-file itemized changes (rsync -i), so re-syncs show exactly what transferred. Watch mode also surfaces rsync errors instead of silently swallowing them.
machine0 ssh <vm> <command> now runs commands under the remote user's default non-login shell (previously bash -lc). Tools that rely on PATH set only in ~/.bash_profile (nvm, pyenv, some brew shims) may no longer be found. Wrap them explicitly: machine0 ssh <vm> bash -lc 'your-command'.
## 1.0.72 Apr 21, 2026
- CLI errors now always include a next step. Every error suggests what to run, where to look, or explains why the command can't proceed in the current shell. Agents running non-interactively get different guidance (env vars, MCP endpoint) from humans at a terminal (copy-paste commands, docs links). No more dead ends.
## 1.0.71.1 Apr 21, 2026
- Privacy policy updated: product analytics now go to PostHog (EU-hosted, Frankfurt) instead of Segment (US). Subprocessor list reflects the change. Effective date bumped to 21 April 2026.
## 1.0.71.0 Apr 21, 2026
- CLI now produces clean, parseable output when piped. Tables drop their box-drawing borders and ANSI colors, and the spinner is suppressed — so
machine0 ls | jq-style pipelines and coding agents see plain column-aligned text instead of escape-code soup. FORCE_COLOR=1 preserves decoration when you want it.
- Update-notifier no longer hijacks piped output — the "update available" box only shows in an interactive terminal, and no longer exits the process before your command runs.
- Destructive commands (
machine0 rm, machine0 update) now fail with a clear "pass --yes to proceed" error when run non-interactively, instead of hanging on a confirmation prompt that cannot be answered.
- README: new "Using machine0 with AI agents" section pointing to the hosted MCP endpoint at
https://app.machine0.io/mcp and MACHINE0_API_TOKEN for non-interactive auth.
## 1.0.68 Apr 20, 2026
machine0 provision now accepts Nix flake references. Use ./path/flake.nix#profile, ./dir#profile, path:./dir#profile, or a remote ref like github:owner/repo#profile to target a specific NixOS configuration. The directory form still works; add #profile to pick a non-default profile.
machine0 images upload --metadata <json> — attach a JSON object to the new DRAFT version (only applied when creating a new version of an existing image).
## 1.0.64 Apr 17, 2026
- NixOS provisioning is now a pure nix flake.
machine0 provision <vm> ../machine0-nix#loaded scp's the flake and runs nixos-rebuild switch. Claude Code ships as a pinned nix package (faster provisioning, reproducible version).
- New NixOS VMs come with the
nix user pre-configured and SSH hardened from first boot. machine0 ssh <vm> connects as nix immediately, no post-provision username flip required.
machine0 images upload --default-ssh-username <user> — set the SSH username that machine0 ssh will use for VMs from this image. Useful for custom images where the default user isn't root or ubuntu.
## 1.0.61 Apr 16, 2026
- NixOS VMs now get the correct hostname by passing a NixOS-native config snippet as user-data
## 1.0.60 Apr 15, 2026
- CLI help now groups account commands (login, logout, whoami, billing, topup) under their own ACCOUNT section for easier scanning
- File sync commands show as FILE SYNC with simpler
<local> and <remote> argument names
- Use case commands grouped under USE CASES with VM size and specs in descriptions
- Consistent
[flags] terminology and full command paths in all help output
## 1.0.59.4 Apr 15, 2026
- Full MCP reference documentation: browse all 28 tools with parameters, descriptions, and examples at docs.machine0.io
- MCP setup guides for Claude Desktop, Claude Code, and other MCP clients
- MCP tool descriptions now include detailed guidance on managed keys, provisioning times, and common error recovery steps
- Documentation navigation restructured with expandable Reference section containing CLI and MCP sub-groups
- MCP setup command updated from local CLI proxy to remote server (
https://app.machine0.io/mcp)
## 1.0.59.3 Apr 15, 2026
- Remote command execution via MCP: run shell commands on your VMs directly from any MCP-compatible AI assistant using
ssh_exec
- Managed SSH keys now enable server-side command execution, the recommended key type for MCP workflows
- Updated privacy policy and DPA to reflect remote execution capabilities
## 1.0.59.2 Apr 14, 2026
- Full VM lifecycle via MCP: create, start, stop, reboot, destroy machines from any MCP-compatible AI assistant
- SSH key management via MCP: create, list, update, and delete SSH keys
- Image management via MCP: create images from VMs, manage versions, promote/remove versions
- Size listing via MCP: browse available VM sizes with pricing and regional availability
- Structured error codes in MCP responses for actionable LLM feedback (e.g.,
INSUFFICIENT_FUNDS, MACHINE_NOT_READY)
- MCP endpoint now enforces per-user rate limiting (was bypassed due to missing flag check)
## 1.0.59.1 Apr 9, 2026
- MCP server endpoint at
/mcp for AI tool integration (Claude Code, Cursor, etc.)
- OAuth authentication flow for MCP clients with consent screen
vm_list MCP tool to list your virtual machines from any MCP-compatible AI assistant
- API key authentication support for MCP endpoint via
x-api-key header
## 1.0.59.0 Apr 9, 2026
- Every CLI error now shows an actionable fix command (e.g.,
Run: machine0 topup --amount 10 for insufficient balance, Run: machine0 start <vm> for stopped VMs)
- New error detection for insufficient balance, duplicate VM names, VM not found, machine limit, and account suspension
machine0 ssh now handles STOPPED, DESTROYED, ERRORED, and UNAVAILABLE VMs with specific recovery hints
- Fixed
machine0 ssh failing on freshly created VMs by adding retry logic (2s delay after boot, one retry after 5s on connection refused)
- Fixed CLI spinner not rendering in Ghostty and other terminals
- Fixed broken documentation link on OpenClaw use case page
## 1.0.57 Apr 8, 2026
machine0 sync push and machine0 sync pull commands for syncing files between your local machine and VMs using rsync over SSH
--watch flag on sync push to automatically re-sync when local files change
--dry-run flag to preview what would be transferred
--delete flag to remove files at the destination that don't exist at the source
## 1.0.56.0 Apr 8, 2026
- New
machine0 billing command shows usage breakdown by month, grouped by resource name and type (Machine, Image, Bandwidth)
- Usage defaults to current month; pass
YYYY-MM to view a specific month (e.g., machine0 billing 2026-03)
## 1.0.55.1 Apr 3, 2026
- Fixed 500 errors when creating machines or baking custom images (missing
metadata column on image_versions table due to skipped database migration)
## 1.0.55.0 Apr 3, 2026
- VM proxy URLs simplified from
<name>-<random>.mac0.io to <name>.mac0.io — shorter, easier to remember
- VM names now allow up to 63 characters (previously 46)
- VM names are automatically lowercased on create and rename
- CLI config file renamed from
config.env to machine0.env — both in ~/.machine0/ and as a new per-project override in your current working directory
- Config precedence is now: environment variables >
./machine0.env (current directory) > ~/.machine0/machine0.env > defaults
machine0 config get now shows * for home directory overrides and ** for current directory overrides
## 1.0.54.0 Apr 3, 2026
- Custom images that failed to transfer to all regions (stuck in ERRORED with "do api error: 422") can now be retried successfully
## 1.0.53.0 Apr 2, 2026
machine0 images get now shows the SSH username for each image and version, so you know which user to connect as
## 1.0.52.0 Apr 2, 2026
- Default API rate limit increased from 500 to 1000 requests per hour
- Rate limit errors during VM boot polling now back off gracefully instead of crashing the command
- Creating a VM with an image that is still being prepared now shows "image is not ready yet" instead of the confusing "image not found" error
- Eliminated redundant API calls during
machine0 use and machine0 ssh flows
## 1.0.48.0 Apr 1, 2026
- Image version status now correctly shows "READY" instead of "CREATING" for system images
machine0 images ls now shows the image Type column
## 1.0.46.0 Mar 31, 2026
machine0 use no longer fails with "Permission denied (publickey)" when SSH keys aren't ready yet on a freshly launched VM
- SSH connections to new VMs now automatically retry with backoff instead of immediately failing
## 1.0.45.0 Mar 31, 2026
- Image versioning: track, promote, and retire versions of your custom images with
machine0 images versions commands
machine0 get now shows which image version a VM was created with
## 1.0.44.0 Mar 31, 2026
- Support for FIDO/U2F hardware security keys (YubiKey, etc.) when adding SSH keys
## 1.0.42.0 Mar 30, 2026
- Suspension now triggers based on dynamic residual runway cost instead of fixed 1-hour threshold, giving users ~78 hours of runway (for a SMALL machine) to top up before resources are suspended
- Auto top-up attempts start 48 hours before the dynamic suspension point instead of at a fixed runway threshold
- Low balance warnings fire relative to the suspension point instead of at a fixed 6-hour runway
- Residual cost calculation accounts for estimated snapshot storage, existing image storage, and async suspension time with 10% safety margin
## 1.0.36.0 Mar 27, 2026
- Removed
--enable-proxy flag from machine0 new and machine0 update commands
- Removed
DEFAULT_ENABLE_PROXY config setting
- HTTPS proxying is now always on for all VMs (authenticated via session cookies)
## 1.0.33.0 Mar 26, 2026
- New
machine0 use webserver command sets up a VM as a web server and SSHs into it
## 1.0.32.0 Mar 25, 2026
- Improved error messages when the server is temporarily unreachable
## 1.0.31.0 Mar 24, 2026
- Firewall enabled by default on all new VMs via
ufw
- Security hardening for proxy authentication and session permissions
## 1.0.30.0 Mar 22, 2026
- Rate limit errors now correctly return
429 Too Many Requests instead of 401
## 1.0.29.0 Mar 21, 2026
- New
--description flag on machine0 images new to annotate custom images
- Fixed GPU sizes incorrectly shown as available when no region had capacity
## 1.0.28.0 Mar 20, 2026
- New
machine0 update command to rename VMs
- CLI now supports authentication via
MACHINE0_API_TOKEN environment variable
- New API token management page in the web dashboard
- New billing page with Stripe Customer Portal access
- API tokens are now obfuscated in
machine0 config get output
- Fixed CLI update notification showing incorrect package name
- Fixed duplicate regions appearing in machine creation
## 1.0.27.0 Mar 19, 2026
- Machine URLs are now hidden in CLI output when no IP is assigned yet
## 1.0.26.0 Mar 16, 2026
- Machines are now automatically suspended when wallet balance runs out
- Fixed SSH key provisioning for GPU instances
- Fixed interactive SSH sessions showing spurious errors on exit
- Machines in UNAVAILABLE status can now be destroyed
## 1.0.25.0 Mar 15, 2026
- New
openclaw image available
- SSH key management improvements
## 1.0.24.0 Mar 14, 2026
- Wildcard subdomain proxying, access VMs at
*.mac0.io
- Always-on auto top-up keeps your wallet funded automatically
- Bandwidth billing now tracks and charges for network usage
- Streamlined CLI with merged sizes table and top-up dialog
## 1.0.23.0 Mar 13, 2026
- Google OAuth sign-in
- Stripe integration for wallet top-up payments
- GPU instance support
- Fixed email verification links pointing to wrong URL
## 1.0.22.0 Mar 12, 2026
- Email verification added to the sign-up flow
## 1.0.21.0 Mar 10, 2026
- Multi-region support:
us, uk, eu, asia
- New
machine0 sizes command to view available sizes and pricing
## 1.0.0.0 Mar 5, 2026
- Initial public release
- CLI available via
npm install -g @machine0/cli
- Pay-as-you-go billing with auto top-up