Vercel sandboxes
Vercel SandboxDirect link to Vercel Sandbox
Executes commands inside Vercel Sandbox which is an ephemeral Firecracker MicroVM running Amazon Linux 2023. Provides a persistent in-session filesystem, sudo access, exposed ports, and background processes. For interface details, see the WorkspaceSandbox interface.
This is distinct from VercelServerlessSandbox, which runs commands as stateless Vercel serverless Functions. VercelSandbox runs a full Linux MicroVM with a persistent filesystem and long-running processes.
InstallationDirect link to Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/vercel
pnpm add @mastra/vercel
yarn add @mastra/vercel
bun add @mastra/vercel
AuthenticationDirect link to Authentication
The @vercel/sandbox SDK uses a Vercel OIDC token automatically when no explicit credentials are provided. If you provide token, teamId, or projectId, provide all three values together.
- OIDC (recommended)
- Access token (.env)
- Constructor
For local development, link the project and pull a development token:
vercel link
vercel env pull
On Vercel, authentication is handled automatically — no configuration needed.
For environments without OIDC, provide all three values together:
VERCEL_TOKEN=your-token
VERCEL_TEAM_ID=your-team-id
VERCEL_PROJECT_ID=your-project-id
new VercelSandbox({
token: 'your-token',
teamId: 'your-team-id',
projectId: 'your-project-id',
})
UsageDirect link to Usage
Add a VercelSandbox to a workspace and assign it to an agent:
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { VercelSandbox } from '@mastra/vercel'
const workspace = new Workspace({
sandbox: new VercelSandbox({
runtime: 'node24',
timeout: 600_000,
}),
})
const agent = new Agent({
id: 'code-agent',
name: 'Code Agent',
instructions: 'You are a coding assistant working in this workspace.',
model: 'anthropic/claude-sonnet-4-6',
workspace,
})
const response = await agent.generate('Print "Hello, world!" and show the Node.js version.')
console.log(response.text)
Resources and exposed portsDirect link to Resources and exposed ports
Allocate vCPUs (2048 MB of memory per vCPU) and expose ports to reach network services running inside the sandbox:
const sandbox = new VercelSandbox({
runtime: 'node24',
resources: { vcpus: 4 },
ports: [3000],
})
const workspace = new Workspace({ sandbox })
await sandbox.start()
// The public HTTPS domain for an exposed port is available via getInfo()
const { metadata } = sandbox.getInfo()
console.log(metadata?.domains) // { 3000: 'https://....vercel.run' }
Streaming outputDirect link to Streaming output
Stream command output in real time via onStdout and onStderr callbacks:
await sandbox.executeCommand('sh', ['-c', 'for i in 1 2 3; do echo "line $i"; sleep 1; done'], {
onStdout: chunk => process.stdout.write(chunk),
onStderr: chunk => process.stderr.write(chunk),
})
Both callbacks are optional and can be used independently.
Constructor parametersDirect link to Constructor parameters
id?:
sandboxName?:
token?:
teamId?:
projectId?:
runtime?:
timeout?:
resources?:
ports?:
env?:
metadata?:
instructions?:
onStart?:
running status.onStop?:
onDestroy?:
PropertiesDirect link to Properties
id:
name:
provider:
status:
sandbox:
processes:
Background processesDirect link to Background processes
VercelSandbox includes a process manager for spawning and managing background processes. Each spawned process runs as a detached command inside the MicroVM, with output streamed through the command logs.
const sandbox = new VercelSandbox({ runtime: 'node24', ports: [3000] })
await sandbox.start()
const handle = await sandbox.processes.spawn('node server.js', {
env: { PORT: '3000' },
onStdout: data => console.log(data),
})
console.log(handle.stdout)
await handle.kill()
See the SandboxProcessManager reference for the full API.
The Vercel Sandbox SDK doesn't expose a stdin channel for running commands, so handle.sendStdin() throws. Filesystem mounting (FUSE) is also not supported by this provider.
LimitsDirect link to Limits
- Up to 32 vCPUs, with 2048 MB of memory per vCPU.
- Up to 15 exposed ports.
- The filesystem is ephemeral. It's persisted only within the session and lost when the sandbox stops.
- Maximum runtime is plan-dependent (45 minutes on Hobby, up to 24 hours on Pro and Enterprise), with a default of 5 minutes.
See the Vercel Sandbox documentation for current limits and pricing.
Vercel Serverless SandboxDirect link to Vercel Serverless Sandbox
VercelServerlessSandbox executes commands as Vercel serverless functions. It provides globally distributed, zero-infrastructure execution with automatic scaling. For interface details, see the WorkspaceSandbox interface.
VercelServerlessSandbox is stateless. It doesn't provide a persistent filesystem, interactive shell, or long-running background processes. Only /tmp is writable, and it's ephemeral between invocations.
For a full Linux MicroVM with a persistent filesystem, sudo access, exposed ports, and background processes, use VercelSandbox, which is backed by the Vercel Sandbox product.
InstallationDirect link to Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/vercel
pnpm add @mastra/vercel
yarn add @mastra/vercel
bun add @mastra/vercel
UsageDirect link to Usage
Add a VercelServerlessSandbox to a workspace and assign it to an agent:
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { VercelServerlessSandbox } from '@mastra/vercel'
const workspace = new Workspace({
sandbox: new VercelServerlessSandbox({
token: process.env.VERCEL_TOKEN,
}),
})
const agent = new Agent({
id: 'dev-agent',
name: 'dev-agent',
instructions: 'You are a coding assistant working in this workspace.',
model: 'anthropic/claude-sonnet-4-6',
workspace,
})
Team-scoped deployment with custom resourcesDirect link to Team-scoped deployment with custom resources
const workspace = new Workspace({
sandbox: new VercelServerlessSandbox({
token: process.env.VERCEL_TOKEN,
teamId: 'team_abc123',
regions: ['iad1', 'sfo1'],
maxDuration: 120,
memory: 3008,
env: {
NODE_ENV: 'production',
},
}),
})
Constructor parametersDirect link to Constructor parameters
token?:
VERCEL_TOKEN environment variable.teamId?:
projectName?:
regions?:
maxDuration?:
memory?:
env?:
commandTimeout?:
instructions?:
getInstructions(). Pass a string to fully replace, or a function to extend the defaults.onStart?:
running status.onStop?:
onDestroy?:
PropertiesDirect link to Properties
id:
name:
provider:
status:
'pending', 'starting', 'running', 'stopping', 'stopped', 'destroying', 'destroyed', or 'error'.LimitationsDirect link to Limitations
VercelServerlessSandbox uses serverless functions under the hood, which means:
- No persistent filesystem: Files written to
/tmpare ephemeral and cleared between invocations. - No interactive shell: Commands run via
/bin/sh -cwith no stdin streaming. - No background processes: No process manager, PIDs, or long-running tasks.
- No mounting: Cloud storage mounting (S3, GCS) isn't supported.
- Timeout limits: Maximum execution time is bounded by
maxDuration(default 60s).
RelatedDirect link to Related
- WorkspaceSandbox interface
- Workspace class
- E2B sandbox: Full-featured cloud sandbox with persistent filesystem and process management