E2BSandbox
Executes commands in isolated E2B cloud sandboxes. Provides secure, ephemeral environments with support for mounting cloud storage.
For interface details, see WorkspaceSandbox interface.
InstallationDirect link to Installation
npm install @mastra/e2b
UsageDirect link to Usage
Add an E2BSandbox to a workspace and assign it to an agent:
import { Agent } from '@mastra/core/agent';
import { Workspace } from '@mastra/core/workspace';
import { E2BSandbox } from '@mastra/e2b';
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
timeout: 60_000, // 60 second timeout (default: 5 minutes)
}),
});
const agent = new Agent({
name: 'dev-agent',
model: 'anthropic/claude-opus-4-5',
workspace,
});
Constructor parametersDirect link to Constructor parameters
apiKey?:
timeout?:
template?:
env?:
runtimes?:
id?:
domain?:
apiUrl?:
accessToken?:
PropertiesDirect link to Properties
id:
name:
provider:
status:
supportsMounting:
MethodsDirect link to Methods
start()Direct link to start
Initialize and start the sandbox. Creates the E2B sandbox instance and mounts any configured filesystems.
await sandbox.start();
Called automatically on first command execution or by workspace.init().
stop()Direct link to stop
Stop the sandbox and release resources.
await sandbox.stop();
destroy()Direct link to destroy
Clean up sandbox resources completely.
await sandbox.destroy();
executeCommand(command, args?, options?)Direct link to executecommandcommand-args-options
Execute a shell command in the sandbox.
const result = await sandbox.executeCommand('ls', ['-la']);
const npmResult = await sandbox.executeCommand('npm', ['install', 'lodash'], {
timeout: 60000,
cwd: '/app',
});
Parameters:
command:
args?:
options.timeout?:
options.cwd?:
options.env?:
options.onStdout?:
options.onStderr?:
canMount(filesystem)Direct link to canmountfilesystem
Check if a filesystem can be mounted into this sandbox.
const canMount = sandbox.canMount(s3Filesystem);
// true for S3Filesystem and GCSFilesystem
mount(filesystem, mountPath)Direct link to mountfilesystem-mountpath
Mount a filesystem into the sandbox at the specified path.
await sandbox.mount(s3Filesystem, '/mnt/data');
unmount(mountPath)Direct link to unmountmountpath
Unmount a previously mounted filesystem.
await sandbox.unmount('/mnt/data');
getMounts()Direct link to getmounts
Get a list of currently mounted filesystems.
const mounts = await sandbox.getMounts();
// [{ path: '/mnt/data', filesystem: 's3' }]
getInfo()Direct link to getinfo
Get sandbox status and resource information.
const info = await sandbox.getInfo();
// { id: '...', name: 'E2BSandbox', provider: 'e2b', status: 'ready', supportsMounting: true }
Mounting Cloud StorageDirect link to Mounting Cloud Storage
E2B sandboxes can mount S3 or GCS filesystems, making cloud storage accessible as local directories inside the sandbox. This is useful for:
- Processing large datasets stored in cloud buckets
- Writing output files directly to cloud storage
- Sharing data between sandbox sessions
Using the mounts configDirect link to Using the mounts config
The simplest way to mount filesystems is through the workspace mounts config:
import { Workspace } from '@mastra/core/workspace';
import { S3Filesystem } from '@mastra/s3';
import { GCSFilesystem } from '@mastra/gcs';
import { E2BSandbox } from '@mastra/e2b';
const workspace = new Workspace({
mounts: {
'/s3-data': new S3Filesystem({
bucket: 'my-s3-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
'/gcs-data': new GCSFilesystem({
bucket: 'my-gcs-bucket',
projectId: 'my-project',
credentials: JSON.parse(process.env.GCS_SERVICE_ACCOUNT_KEY),
}),
},
sandbox: new E2BSandbox({ id: 'dev-sandbox' }),
});
When the sandbox starts, the filesystems are automatically mounted at the specified paths. Code running in the sandbox can then access files at /s3-data and /gcs-data as if they were local directories.
How mounting worksDirect link to How mounting works
E2B sandboxes use FUSE (Filesystem in Userspace) to mount cloud storage:
The E2B sandbox automatically installs the required FUSE tools when mounting is used. For best performance, pre-build a custom template with the tools installed.
Custom TemplatesDirect link to Custom Templates
By default, when no template is specified, E2BSandbox automatically builds a template with s3fs installed for S3 mounting support. This template is cached and reused across sandbox instances.
For GCS mounting, gcsfuse is automatically installed at mount time if not already present. For additional tools or faster cold starts, use custom templates.
Using an existing templateDirect link to Using an existing template
If you have a pre-built template, pass its ID:
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
template: 'my-custom-template',
}),
});
Customizing the default templateDirect link to Customizing the default template
Pass a function to customize the default mountable template. The function receives a TemplateBuilder and should return the modified template:
const workspace = new Workspace({
sandbox: new E2BSandbox({
template: (base) => base
.aptInstall(['ffmpeg', 'imagemagick', 'poppler-utils'])
.pipInstall(['pandas', 'numpy'])
.npmInstall(['sharp']),
}),
});
The template builder supports method chaining with operations like:
aptInstall(packages)- Install system packagespipInstall(packages)- Install Python packagesnpmInstall(packages)- Install Node.js packagesrunCmd(command)- Run shell commandssetEnvs(vars)- Set environment variablescopy(src, dest)- Copy files into the template
See E2B's template documentation for the full list of available methods.
Pre-building templatesDirect link to Pre-building templates
The default template is built on first use and cached. For faster cold starts or to include GCS support, you can pre-build a template:
import { createDefaultMountableTemplate } from '@mastra/e2b';
import { Template } from 'e2b';
// Get the default mountable template (includes s3fs)
const { template, id } = createDefaultMountableTemplate();
// Build and save to E2B
const result = await Template.build(template, id);
console.log('Template ID:', result.templateId);
// Use this ID in your E2BSandbox config for instant startup
const sandbox = new E2BSandbox({
template: result.templateId,
});
For faster GCS cold starts, pre-install gcsfuse in a custom template:
const workspace = new Workspace({
sandbox: new E2BSandbox({
id: 'dev-sandbox',
template: (base) => base.aptInstall(['gcsfuse']),
}),
});
This is optional—gcsfuse is installed automatically at mount time if not present.