Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.withnubo.com/llms.txt

Use this file to discover all available pages before exploring further.

A volume is a chunk of disk that lives outside any one Frame. Attach it, give it a mount path, and your app sees a normal folder there. Stop, redeploy, or rollback the Frame and the data stays exactly where you left it. Volumes are scoped to a Project, so you can mount the same one across Frames in the same Project (for example, the same uploads folder on production and staging).

Create a volume

From the dashboard:
  1. Open any Project and click the Volumes tab (or use Quick actions → New volume).
  2. Pick a name and a size between 1 GiB and 1 TiB.
  3. Hit Create.
The volume shows up in the list immediately and is ready to attach. Via API:
curl -X POST https://shuttle.withnubo.com/v2/projects/<project_id>/volumes \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "uploads",
    "size_gb": 20
  }'

Attach a volume to a Frame

Open the Frame’s sidebar, scroll to the Volumes panel, and pick a volume from the list. Set the mount path your app expects (e.g. /data, /var/lib/postgres, /app/uploads) and save. The Frame rolls with the volume mounted on the next deploy.
curl -X POST https://shuttle.withnubo.com/v2/projects/<project_id>/volumes/<volume_id>/attach \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{
    "frame_id": "<frame_id>",
    "mount_path": "/data"
  }'
Mount paths are validated. You can’t mount on /, /etc, /proc, or anywhere else that would shadow a system directory.

Detach a volume

Detaching unmounts the volume from the Frame on the next reconcile. The data stays on the volume, so you can re-attach it later or move it to another Frame.
curl -X DELETE https://shuttle.withnubo.com/v2/projects/<project_id>/volumes/<volume_id>/attach/<frame_id> \
  -H "Authorization: Bearer <your-token>"

Delete a volume

Deleting a volume erases its data. Detach it from every Frame first.
curl -X DELETE https://shuttle.withnubo.com/v2/projects/<project_id>/volumes/<volume_id> \
  -H "Authorization: Bearer <your-token>"

What’s it for

Anything that needs to stick around between deploys:
  • Databases you run yourself (Postgres, Redis, SQLite files).
  • User uploads, generated assets, image caches.
  • Long-running queues or job state.
  • Anything you’d normally put on a server’s disk.

Pricing

You pay by the GB-hour of attached storage, not provisioned size. A 50 GiB volume attached for the whole month costs the same as a 100 GiB volume attached for half of it. Detach or delete to stop the meter. Your plan caps the max size per volume, the total GiB you can hold, and how many volumes you can have at once. See Plans for the current limits.

Managed Nubo vs self-hosted agents

  • Managed Nubo: volumes are backed by replicated block storage. Pay-by-the-hour billing applies as above.
  • Self-hosted agents: volumes are files on the agent’s own disk, attached as a loopback mount. There’s no extra charge from us, but the data lives on your hardware, so back it up.

Frames

Attach a volume from a Frame’s sidebar

Plans

Volume size and count limits per plan