VercelMicroVMSandbox
Executes commands inside Vercel Sandbox — 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 VercelSandbox, which runs commands as stateless Vercel serverless Functions. VercelMicroVMSandbox 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 available.
- 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 VercelMicroVMSandbox({
token: 'your-token',
teamId: 'your-team-id',
projectId: 'your-project-id',
})
UsageDirect link to Usage
Add a VercelMicroVMSandbox to a workspace and assign it to an agent:
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { VercelMicroVMSandbox } from '@mastra/vercel'
const workspace = new Workspace({
sandbox: new VercelMicroVMSandbox({
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 VercelMicroVMSandbox({
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?:
PropertiesDirect link to Properties
id:
name:
provider:
status:
sandbox:
processes:
Background processesDirect link to Background processes
VercelMicroVMSandbox 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 VercelMicroVMSandbox({ 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 does not 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 8 vCPUs, with 2048 MB of memory per vCPU.
- Up to 4 exposed ports.
- The filesystem is ephemeral — persisted only within the session and lost when the sandbox stops.
- Maximum runtime is plan-dependent (45 minutes on Hobby, up to 5 hours on Pro/Enterprise), with a default of 5 minutes.
See the Vercel Sandbox documentation for current limits and pricing.