all posts

The best Morph Cloud alternatives in 2026

Ajay Kumar··10 min read

Most agent sandbox platforms sell the same primitive with different packaging: create a machine, run some code, throw it away. Morph Cloud is one of the few selling something else — snapshot a running VM, then branch that snapshot into several live copies that each continue from the same instant.

That difference matters because it is not a feature you can approximate. If you need it, most of the obvious alternatives simply do not have it, and comparing them on price or SDK ergonomics misses the point entirely. So this guide starts by asking whether you actually need branching, and only then looks at who else offers it.

Why branching a running VM is a different primitive

Consider an agent that has spent four minutes setting itself up: cloning a repository, installing dependencies, starting a dev server, reading files into a warm page cache. Now it faces a choice between three approaches, and it would like to try all of them.

Without branching you have two options, both bad. Run them sequentially and pay the setup cost three times, plus the time. Or run them in parallel from scratch in three fresh machines and pay the setup three times anyway, in parallel. Either way the expensive part is repeated, and the three attempts do not start from identical state, which quietly makes the comparison unsound.

With branching, you snapshot once after setup and start three copies from that exact memory and disk state. Setup is paid once. The three attempts are genuinely comparable because they are byte-identical at the branch point. And a failed attempt costs nothing beyond the seconds it ran.

The underlying mechanism is copy-on-write. The branches share memory pages and disk blocks with the parent until one of them writes, at which point only the changed page is copied. That is why the operation can be fast and why ten branches do not cost ten times the memory — they cost the parent plus each branch's divergence.

Be honest about whether you need it

Branching pays for itself in three situations, and is an interesting curiosity in the rest.

  • Best-of-N. Run several attempts at the same task from the same starting state, score them, keep the winner. This is where the comparability argument matters most.
  • Expensive setup, cheap exploration. Anything where getting to the starting line takes minutes and the actual work takes seconds — a large repository, a seeded database, a warm model server.
  • Long-lived agent sessions. Snapshot after each significant step so a bad decision can be rewound rather than restarted, which is the difference between an agent that recovers and one that gives up.

If your agent runs a self-contained snippet and returns a result — the majority of code-interpreter workloads — you do not need this, and you should choose on latency, price, and SDK quality instead. That is a much wider field.

The alternatives

  • E2B — The most established code-interpreter platform, with good SDKs and a large template ecosystem. Strong on create-run-destroy; its persistence model is built around pausing and resuming a sandbox rather than branching one into many. Right if the branching was not the reason you were here.
  • Daytona — Fast sandbox creation with a developer-environment heritage, well suited to agents that need a workspace rather than an execution call. Compare on start latency and on how long a workspace can idle before it costs you.
  • Modal — Excellent at fanning out parallel work with fast starts, and the strongest option if your workload is Python-shaped batch or inference. The fan-out is from a defined function rather than from a live VM's state, which is a different thing.
  • Fly Machines — Not an agent product, but a low-level API for starting and stopping VMs quickly, with volumes. If you are willing to build the orchestration, it gives you the raw material and no opinions.
  • Runloop — Aimed squarely at coding agents, with devbox-shaped environments and snapshot support. Worth evaluating directly against Morph if repository-based agent work is the use case.
  • Cloudflare Sandbox SDK — Execution sandboxes tied into the Workers platform. Good if the rest of your stack is already there; the isolation is container-based and the model is not branch-oriented.
  • PandaStack — Firecracker microVMs where fork is a first-class operation: fork() and forkTree() snapshot a running sandbox once and start the children from that snapshot, with the filesystem shared copy-on-write, in roughly 400ms on the same host. The parent keeps running. The same substrate also runs apps and managed Postgres, so an agent can be given a real database alongside its machine, and billing is metered on active CPU and working-set memory, which suits fan-out where most branches are short-lived. Best when branching and per-branch isolation are both requirements; less compelling if you want a large catalogue of prebuilt templates.

What to verify when you evaluate

Four questions separate platforms that have this primitive from platforms that have a word for it.

  1. Does the branch include memory, or only disk? A disk-only clone means the branch boots fresh — your dev server is not running, your page cache is cold, your process state is gone. That is a much weaker guarantee and it is often what "snapshot" means.
  2. How long does a branch take, on a machine that has been doing real work? Benchmarks on an idle VM with a clean page cache are not informative. Measure after your actual setup.
  3. What does the tenth concurrent branch cost? Copy-on-write should mean sublinear memory. If ten branches cost ten times the parent, the sharing is not real.
  4. Can branches diverge safely? Two branches that share a disk image need genuine copy-on-write, not a shared mount. Write to a file in one and read it in the other; if you see it, walk away.
# The shape of best-of-N, once branching exists.
from pandastack import Sandbox

base = Sandbox.create(template="agent")
base.exec("git clone https://github.com/acme/service /work && cd /work && npm ci")
# Everything above is paid once.

branches = [base.fork() for _ in range(5)]

results = []
for branch, strategy in zip(branches, STRATEGIES):
    out = branch.exec(f"cd /work && {strategy.command}", timeout_seconds=300)
    results.append((strategy, out.exit_code, out.stdout))

best = pick_best(results)
for b in branches:
    b.kill()

# Five attempts from one identical starting state. The comparison is
# sound because nothing differs except the strategy.

Pick by situation

  • Best-of-N sampling on expensive setup → a platform with real memory-level branching. This is a short list and it is the whole reason to be reading this page.
  • Stateless code execution, one snippet at a time → E2B, Modal, or Cloudflare's Sandbox SDK. Do not pay for a primitive you will not use.
  • Coding agents working in a repository → Runloop, Daytona, or PandaStack. Evaluate on how fast a warm workspace is available, not on cold create time.
  • You want to build the orchestration yourself → Fly Machines, and accept that lifecycle, cleanup, and quotas are now your code.
  • The agent needs a database as well as a machine → a platform that offers both, or you will be gluing two vendors together for every environment.

The short version

Decide first whether branching is load-bearing for your agent. If it is not, the field is wide and you should optimise for latency, SDK quality, and price. If it is, the field is narrow, and you should evaluate the primitive itself rather than the marketing around it.

The test that settles it takes ten minutes: do your real setup, branch it ten times, and check that memory is shared, that the branches diverge cleanly, and that the tenth one is as fast as the first. Platforms that have genuinely built this will pass. Platforms that have a snapshot API and a blog post will not.

Frequently asked questions

What is the difference between forking a VM and restoring a snapshot?

A snapshot restore produces one machine from a saved state, and the usual assumption is that the original is gone or replaced. A fork produces an additional machine while the original keeps running, and the two diverge from that instant. The distinction matters for how the underlying storage works: a restore can afford to copy, whereas a fork intended to run alongside its parent needs copy-on-write memory and disk, or every fork would cost a full duplicate of both. That is also why the interesting question about any fork implementation is what the tenth concurrent fork costs. Sublinear memory means the sharing is real; linear means you are paying for copies with a nicer name. For agent workloads the practical difference is whether you can afford to explore ten branches or only one.

Does a branched VM keep running processes and memory state?

It depends on the implementation, and this is the single most important thing to check. A memory-level fork captures the guest's RAM as well as its disk, so a dev server that was listening on a port is still listening in the branch, an interpreter session still has its variables, and warm caches stay warm. A disk-only clone captures the filesystem and boots fresh, which means every process is gone and anything held only in memory is lost. Both are legitimately called snapshots by someone. For agent work the difference is usually decisive, because the whole value of branching is skipping expensive setup — and if the branch has to restart your server and re-warm your caches, most of that saving evaporates. Test it directly: start a process in the parent, branch, and see whether it is still there.

Do I need VM branching, or is a container enough?

For most code-execution workloads a container is enough, and reaching for branching is over-engineering. If your agent receives a task, runs a self-contained snippet, and returns output, then create-run-destroy is the right shape and you should choose on start latency, SDK quality, and price. Branching earns its complexity in a narrower set of cases: best-of-N sampling where several attempts must start from identical state to be comparable, workloads where reaching the starting line takes minutes and the actual work takes seconds, and long agent sessions where you want to rewind to a known-good point instead of restarting. Separately, containers and microVMs differ on the isolation boundary, which is a different argument that matters when the code being run is attacker-influenced rather than merely yours.

How much does running ten branches cost compared to one machine?

With genuine copy-on-write, considerably less than ten times, and the gap widens the more the branches share. Each branch starts by sharing the parent's memory pages and disk blocks and only allocates for what it modifies, so ten branches that each touch a small working set cost roughly the parent plus ten small deltas rather than ten full copies. The cost model of the platform then decides how much of that saving reaches your bill: a provider charging for provisioned instance size charges you ten times regardless of sharing, whereas one metering actual CPU and resident memory reflects it. That is worth checking explicitly during evaluation, because the technical efficiency and the billing model are separate decisions and only the second one shows up on the invoice.

Can I build best-of-N sampling without a branching platform?

Yes, and plenty of teams do — you start N fresh machines and run the same setup in each. It works, and the two costs are real. You pay the setup time and money N times, which for a repository clone and dependency install can dominate the whole run. And the attempts are not identical at the starting line: package resolution, timestamps, network ordering, and cache state all differ slightly, so when one branch wins you cannot be certain it was the strategy rather than the environment. For a handful of attempts on a cheap setup, neither cost is worth restructuring for. For dozens of attempts, or setup measured in minutes, the arithmetic changes quickly and branching stops being a nice-to-have.

Keep reading

Run code in a microVM in one API call.

49ms p50 cold start. Fork, snapshot, and scale to zero.

Start free
Written by Ajay Kumar, Founder, PandaStack.