Volumes
Persistent storage that outlives sandboxes. Created once, mounted into one or more sandboxes at --mount-path.
froglet vol ls froglet vol new <name> [--size-gb <gb>] froglet vol rm <volume-full-uuid> froglet vol attach --volume <vol-id> --sandbox <slug-or-id> --mount-path <path> [--mode rw|ro] froglet vol detach --volume <vol-id> --sandbox <slug-or-id> froglet vol mounted --sandbox <slug-or-id> froglet vol search <volume-id> <query>
Create, attach, use
$ froglet vol new shared-data --size-gb 25 created volume shared-data (3ff092d9-…) status ready path /var/lib/froglet/volumes/3ff092d9-… $ froglet vol attach --volume 3ff092d9-… --sandbox demo --mount-path /data attached 3ff092d9 → /data $ froglet sb exec demo 'echo persistent > /data/state.txt'
Detach with vol detach --volume <id> --sandbox <id>. Volumes can be attached read-only with --mode ro. Mount points are sandbox-local — you can mount the same volume at /data on one sandbox and /shared on another.
# attach to a different sandbox; the file is still there $ froglet vol attach --volume 3ff092d9-… --sandbox other --mount-path /data
Boot with a volume already mounted
froglet sb new --template ubuntu-24.04 --size s --name worker \ --volume 3ff092d9-…:/data:rw
--volume is repeatable for multiple mounts.
Server-side search
froglet vol search <volume-id> <query>
search is a server-side ripgrep against the volume contents — handy for finding files across a big shared volume without mounting it.
Currently the prod API returns 503 not_configured for this route because FROGLET_VOLUMED_URL/FROGLET_VOLUMED_AUTH_TOKEN aren't set on the API process. Operator-side fix.
Gotchas
- The flag is
--mount-path, not--mount. vol rmrequires the full UUID, not the 8-char prefix shown invol ls. Use--jsonto grab it:vid=$(froglet vol ls --json | jq -r '.[] | select(.name=="shared-data") | .id') froglet vol rm "$vid"
- The body fields for
new,attach,detachare snake_case server-side (size_gb,volume_id,mount_path). The CLI submits them correctly; matters only if you script against the REST API directly.