Skip to main content
File System Snapshots (FSS) let a sandbox write to a local working directory, capture that directory into object storage as an immutable snapshot, and later restore it into new sandboxes. Use FSS to suspend and resume a sandbox’s filesystem across runs, or to fork one snapshot into several sandboxes that then diverge independently.
CoreWeave sandboxes are in public preview. For access, contact your CoreWeave account team, CoreWeave Support, or email support@coreweave.com.

How it works

A sandbox with FSS mounts a writable scratch filesystem at a path you choose. The runner backs this mount with an EmptyDir, not a direct object storage mount. Snapshot and restore operations copy a tarball between that local filesystem and an organization-scoped object storage bucket. Each snapshot is a FileSystemSnapshot resource identified by a server-assigned fileSystemSnapshotId. Snapshots have three defining properties:
  • Immutable: creating a snapshot writes one archive. Restoring a snapshot never changes the source snapshot, so a later restore always sees the original bytes.
  • Organization-scoped: you can restore only snapshots created in your own organization. A snapshot ID from another organization is treated as not found.
  • Independent lifecycle: snapshots are managed separately from sandboxes. Deleting a sandbox does not delete its snapshots, and deleting a snapshot does not affect sandboxes already running from it.
By default, CoreWeave provisions and manages the object storage bucket that holds your snapshots. To store snapshots in a bucket you own and control instead, see Bring your own bucket.

Enable file system snapshots

FSS is enabled per organization. If your organization is not enabled, snapshot calls fail: the Python client raises SnapshotNotSupportedError, and the HTTP API rejects the request before any snapshot work begins. To request access, contact your CoreWeave account team or CoreWeave Support. Once FSS is enabled, CoreWeave manages a bucket for your organization automatically. You don’t have to configure storage unless you want to bring your own bucket.

Start a sandbox with a snapshot mount

A sandbox can start from one of two filesystem sources: a fresh, empty scratch filesystem, or a restore of an existing snapshot.

Fresh scratch

A fresh scratch filesystem starts empty and can be snapshotted later. Use it for workflows that need writable local state during a run.

Restore from a snapshot

A restore starts the filesystem from an existing snapshot. Set the snapshot ID on the mount’s snapshot source.
A snapshot must be READY before you restore it. Restoring a snapshot that is still CREATING fails. See Snapshot status and failures.

Take a snapshot

You can capture a snapshot in two ways: on stop, when a sandbox shuts down, and mid-life, from a running sandbox.

Snapshot on stop

To preserve a sandbox’s filesystem when it shuts down, stop the sandbox with snapshot-on-stop enabled. This is the pattern for suspend and resume: stop with a snapshot, then later start a new sandbox that restores it.

Mid-life snapshot

A mid-life snapshot captures a running sandbox without stopping it. The sandbox keeps running afterward.
snapshot() waits until the snapshot is READY by default and returns the snapshot ID.

Fork a snapshot

The same snapshot can be restored into more than one sandbox. Because each snapshot is immutable, the restored sandboxes start from identical bytes and then diverge as they write.
  1. Create a READY snapshot, with either snapshot-on-stop or a mid-life snapshot.
  2. Start sandbox A with fileSystemSnapshotId set to that snapshot.
  3. Start sandbox B with the same fileSystemSnapshotId.
  4. Writes in sandbox A and sandbox B diverge independently. The source snapshot is unchanged, so a later restore from the same ID still sees the original snapshot, not the writes from either fork.

Manage snapshots

List, fetch, and delete snapshots independently of the sandboxes that created them.

Snapshot status and failures

Snapshots are created asynchronously. A snapshot request can succeed and return a fileSystemSnapshotId while the archive is still being written, and the snapshot can fail afterward. This happens most often when waitForReady is false, or when a client timeout occurs while the runner is still archiving. To check progress, fetch the snapshot and read two fields:
  • status: the lifecycle state. The terminal values are READY and FAILED. The HTTP API returns the fully qualified form, such as FILE_SYSTEM_SNAPSHOT_STATUS_READY.
  • statusReason: populated when status is FAILED, explaining why.
Poll GetFileSystemSnapshot until the snapshot reaches READY before you restore it. The Python client’s snapshot() and get_snapshot() handle this polling for you when you wait for the result. The following table lists the common failure reasons and what to do about each. If a runner finishes uploading the archive but cannot record the result, the snapshot row can become FAILED even though an object exists in the bucket. Retry the snapshot in this case. For asynchronous failures, the platform also emits a sandbox.file_system_snapshot.async_fail event, so downstream notification systems can react to snapshots that fail after the original call returned.

Limitations

FSS version 1 provides snapshot-backed local scratch storage. It is not a shared filesystem and does not provide live, multi-writer mounts. Sandboxes do not read or write each other’s filesystems while running. They share state only by snapshotting and restoring.

SDK example

For a complete, runnable Python example that starts a sandbox, takes a mid-life snapshot, forks it, captures a snapshot on stop, and manages snapshots, see file_system_snapshots.py in the cwsandbox-client repository.
Last modified on August 13, 2026