Skip to main content
Every sandbox gets a writable local workspace at /home/daytona/project/workspace. You do not need to create or configure a volume to use file, shell, browser, or code tools. Local workspace data follows the sandbox lifecycle. Create a persistent volume only when files must survive independently of one sandbox or be shared with the Files API.

Persistent volumes

Volumes are project resources backed by project-scoped object storage. A volume has one canonical strategy: Both strategies support read-only and read-write access. A read-write hydrated volume also requires a writeback policy:
  • auto synchronizes changed files before the outer run releases its sandbox.
  • manual requires the agent to call sandbox_volume_checkpoint after a consistent set of changes. A dirty manual volume fails finalization instead of silently dropping changes.
Read-only hydrated volumes are verified at finalization. A run that modifies one fails instead of persisting or discarding the change silently.

Agent grants

Creating a volume does not expose it to every agent. Grant each agent only the volumes it needs in Agent > Security. A grant can narrow the volume to read-only or manual writeback, but cannot widen the project volume policy. At runtime, callers may narrow the granted set again:
The request receives only the selected volume. It cannot add an ungranted volume, change its host-owned mount path, or widen its access. Catalog configuration, authorization, and runtime selection are intentionally separate. An agent’s sandbox.volumes field only selects or narrows existing grants; it does not create a volume or grant access during polpo deploy.

Volume CLI

Manage the project catalog from any linked project directory:
Create, inspect, narrow, or revoke per-agent grants by stable volume name:
Add --json to every command for machine-readable output. Destructive commands require interactive confirmation or --yes in automation. The CLI resolves a volume name to its immutable id before modifying a grant and fails if the name is absent.

Volume API

List and create project volumes:
Update or delete one volume with PATCH or DELETE on /v1/files/volumes/{name}. Volume names are stable and cannot be renamed. They must start with a lowercase letter, contain only lowercase letters, digits, dashes, or underscores, and contain 2 to 63 characters. Mount paths must stay below /home/daytona/project, cannot overlap, and cannot cover the reserved .polpo tree. The runtime also rejects paths that resolve through symlinks before mounting or hydrating storage. Grant and revoke agent access with:
Provider credentials, storage prefixes, revisions, and synchronization state are host-owned. They are never accepted from a public create or update payload.

Files SDK

The SDK exposes project file methods directly on PolpoClient:
Upload a File or Blob to a persistent volume path:
Other operations are also direct client methods:
The TypeScript SDK also exposes the managed volume catalog and grant contract:

Concurrency and failure behavior

Hydrated writeback uses revision compare-and-swap. If two runs hydrate the same revision, only the first valid writeback can commit. The other run fails with a conflict rather than overwriting newer data. Sandbox pooling also includes the resolved volume-plan fingerprint. A pooled sandbox is reused only when its mounted paths, policies, and storage selection match the new run.

Self-hosted providers

The volume contract is provider-neutral in Polpo OSS. A self-hosted sandbox provider decides how to implement mounted, hydration, checkpoint, writeback, and finalization. Polpo Cloud supplies the managed object-storage adapter. See Sandboxes for isolation and lifecycle policy.