froglet.
CLI

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.

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 rm requires the full UUID, not the 8-char prefix shown in vol ls. Use --json to grab it:
    vid=$(froglet vol ls --json | jq -r '.[] | select(.name=="shared-data") | .id')
    froglet vol rm "$vid"
  • The body fields for new, attach, detach are 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.