Skip to content

feat(sdk,cli): add support for Drive - #285

Merged
QuiiBz merged 29 commits into
mainfrom
drives-beta
Sep 11, 2026
Merged

QuiiBz merged 29 commits into
mainfrom
drives-beta

Conversation

@QuiiBz

@QuiiBz QuiiBz commented Aug 10, 2026

Copy link
Copy Markdown
Member

Add support for Drives, persistent storage that can store TBs of data and be mounted on sandboxes at a specific path. Drives support point-in-time, read-only snapshots.

Get started by creating a drive, then mount it on a sandbox:

import { Sandbox, Drive } from '@vercel/sandbox';
 
const drive = await Drive.getOrCreate({ name: 'workspace-cache' });
 
// Mount as read-write once
const sandbox = await Sandbox.create({
  name: 'my-sandbox',
  mounts: {
    '/data': drive
  },
});

Create a snapshot to mount the same drive on multiple sandboxes at a time:

import { Sandbox, Drive } from '@vercel/sandbox';
 
const drive = await Drive.getOrCreate({ name: 'shared' });
 
// Mount many snapshots of the same drive
const firstReader = await Sandbox.create({
  name: 'reader-1',
  mounts: {
    '/data': drive.snapshot()
  },
});
const secondReader = await Sandbox.create({
  name: 'reader-2',
  mounts: {
    '/data': drive.snapshot()
  },
});

Read the documentation to learn more: https://vercel.com/docs/sandbox/concepts/drives

QuiiBz added 6 commits June 1, 2026 16:33
This PR adds support for drives in beta. Drives are persistent storage
that can be attached or detached to sandboxes. You can mount up to 4
drives per sandbox, with up to 1 TiB per drive

CLI:
```bash
sbx drives ls
sbx drives get-or-create --max-size <bytes>
sbx drives delete <drive>
sbx create --mount <drive>:/path[:read-only|read-write]
```

SDK:
```ts
const drive = await Drive.getOrCreate({
  name:  'my-drive',                           // unique per project
  maxSize: 1024 * 1024 * 1024 * 100  // optional, default 100 GiB
})

const sandbox = await Sandbox.create({
  name: 'my-sandbox',
  mounts: {
    '/mnt/storage': {               // can add up to 4 mounts
      drive: drive.name,
      mode: 'read-only'          // optional, defaults to 'read-write'
    }
  }
})

const { drives, pagination } = await Drive.list({ limit, since, until })
await drives.delete()
```
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
sandbox Ready Ready Preview, v0 Sep 11, 2026 3:54pm UTC
sandbox-cli Ready Ready Preview, v0 Sep 11, 2026 3:54pm UTC
sandbox-sdk-ai-example Ready Ready Preview, v0 Sep 11, 2026 3:54pm UTC
workflow-code-runner Ready Ready Preview, v0 Sep 11, 2026 3:54pm UTC

QuiiBz and others added 2 commits August 10, 2026 09:11
Co-authored-by: Elisabeth Rulke <221610566+erulkey@users.noreply.github.com>
Co-authored-by: Andy <76787794+AndyW22@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: LukePS <LukeSheard@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to drives-beta, this
PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`drives-beta` is currently in **pre mode** so this branch has
prereleases rather than normal releases. If you want to exit
prereleases, run `changeset pre exit` on `drives-beta`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## sandbox-image-node@0.1.1-beta.0

### Patch Changes

- Pin exact Node.js versions during builds and publish exact-version
image tags alongside the major-version tags.
([#286](#286))

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Following #301, this PR adds
support for multi-region in drives

- Set the `region` field when creating a new drive, or use the
`--region` flag in the CLI
- You can retrieve the region of a drive using the `region` getter on
the `Drive` class
- Drives can be only be mounted to sandboxes running on the same region

Also adding the missing mock for the `Drive` class in
`@vercel/sandbox-mock`
The `drives-beta` branch is behind `main` and is missing the latest
stable release and region updates.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
`read-only` mounts have been replaced by snapshots: you can now mount
the same drive on many sandboxes at once, using read-only snapshots:

```ts
const drive = await Drive.getOrCreate({ name: 'test' })
await Sandbox.create({
  mounts: {
    '/data': drive.snapshot()
  }
})
```

To mount a drive as `read-write`, simply pass in the drive object:

```ts
await Sandbox.create({
  mounts: {
    '/data': drive
  }
})
```
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to drives-beta, this
PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

`drives-beta` is currently in **pre mode** so this branch has
prereleases rather than normal releases. If you want to exit
prereleases, run `changeset pre exit` on `drives-beta`.

⚠️⚠️⚠️⚠️⚠️⚠️

# Releases
## sandbox@4.4.0-beta.0

### Minor Changes

- `read-only` mounts have been replaced by snapshots: you can now mount
the same drive on many sandboxes at once, using read-only snapshots:
([#331](#331))

  ```ts
  const drive = await Drive.getOrCreate({ name: "test" });
  await Sandbox.create({
    mounts: {
      "/data": drive.snapshot(),
    },
  });
  ```

  To mount a drive as `read-write`, simply pass in the drive object:

  ```ts
  await Sandbox.create({
    mounts: {
      "/data": drive,
    },
  });
  ```

### Patch Changes

- Updated dependencies
[[`f45a57b1c6b022f751c3ea43cf23920e6e0d8489`](f45a57b)]:
  - @vercel/sandbox@3.4.0-beta.0
## @vercel/sandbox@3.4.0-beta.0

### Minor Changes

- `read-only` mounts have been replaced by snapshots: you can now mount
the same drive on many sandboxes at once, using read-only snapshots:
([#331](#331))

  ```ts
  const drive = await Drive.getOrCreate({ name: "test" });
  await Sandbox.create({
    mounts: {
      "/data": drive.snapshot(),
    },
  });
  ```

  To mount a drive as `read-write`, simply pass in the drive object:

  ```ts
  await Sandbox.create({
    mounts: {
      "/data": drive,
    },
  });
  ```
## @vercel/sandbox-mock@3.4.0-beta.0

### Minor Changes

- `read-only` mounts have been replaced by snapshots: you can now mount
the same drive on many sandboxes at once, using read-only snapshots:
([#331](#331))

  ```ts
  const drive = await Drive.getOrCreate({ name: "test" });
  await Sandbox.create({
    mounts: {
      "/data": drive.snapshot(),
    },
  });
  ```

  To mount a drive as `read-write`, simply pass in the drive object:

  ```ts
  await Sandbox.create({
    mounts: {
      "/data": drive,
    },
  });
  ```

### Patch Changes

- Updated dependencies
[[`f45a57b1c6b022f751c3ea43cf23920e6e0d8489`](f45a57b)]:
  - @vercel/sandbox@3.4.0-beta.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@vercel

vercel Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Your Vercel team Curated Tests - Permanent E2E is not permitted to deploy from this git repository. Contact an administrator to add github organization vercel as a Protected Git Scope in Curated Tests - Permanent E2E on Vercel. Once added, commit again to see your changes.

Learn more: https://vercel.com/docs/security/protected-git-scopes

Comment thread packages/sandbox/docs/index.md Outdated
Comment thread packages/sandbox/src/commands/drives.ts
Comment thread packages/sandbox/src/commands/drives.ts Outdated
Comment thread packages/sandbox/src/commands/drives.ts Outdated
Comment thread packages/vercel-sandbox/src/api-client/api-client.ts Outdated
Comment thread packages/sandbox/package.json Outdated
This PR cleans up the changesets for drives and exits changeset `pre`
mode, so that we can release drives as stable
@github-actions github-actions Bot mentioned this pull request Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants