S3Filesystem
Stores files in Amazon S3 or S3-compatible storage services like Cloudflare R2, MinIO, and DigitalOcean Spaces.
info
For interface details, see WorkspaceFilesystem Interface.
InstallationDirect link to Installation
npm install @mastra/s3
UsageDirect link to Usage
Add an S3Filesystem to a workspace and assign it to an agent:
import { Agent } from '@mastra/core/agent';
import { Workspace } from '@mastra/core/workspace';
import { S3Filesystem } from '@mastra/s3';
const workspace = new Workspace({
filesystem: new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
});
const agent = new Agent({
name: 'file-agent',
model: 'anthropic/claude-opus-4-5',
workspace,
});
Cloudflare R2Direct link to Cloudflare R2
import { S3Filesystem } from '@mastra/s3';
const filesystem = new S3Filesystem({
bucket: 'my-r2-bucket',
region: 'auto',
endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
accessKeyId: process.env.R2_ACCESS_KEY_ID,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY,
});
MinIODirect link to MinIO
import { S3Filesystem } from '@mastra/s3';
const filesystem = new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
endpoint: 'http://localhost:9000',
accessKeyId: 'minioadmin',
secretAccessKey: 'minioadmin',
});
Constructor parametersDirect link to Constructor parameters
bucket:
string
S3 bucket name
region:
string
AWS region (use 'auto' for R2)
accessKeyId?:
string
AWS access key ID. Optional for public buckets (read-only access).
secretAccessKey?:
string
AWS secret access key. Optional for public buckets (read-only access).
endpoint?:
string
Custom endpoint URL for S3-compatible storage (R2, MinIO, etc.)
prefix?:
string
Optional prefix for all keys (acts like a subdirectory)
id?:
string
= Auto-generated
Unique identifier for this filesystem instance
displayName?:
string
Human-friendly display name for the UI
readOnly?:
boolean
= false
When true, all write operations are blocked
PropertiesDirect link to Properties
id:
string
Filesystem instance identifier
name:
string
Provider name ('S3Filesystem')
provider:
string
Provider identifier ('s3')
bucket:
string
The S3 bucket name
readOnly:
boolean | undefined
Whether the filesystem is in read-only mode
MethodsDirect link to Methods
S3Filesystem implements the WorkspaceFilesystem interface, providing all standard filesystem methods:
readFile(path, options?)- Read file contentswriteFile(path, content, options?)- Write content to a fileappendFile(path, content)- Append content to a filedeleteFile(path, options?)- Delete a filecopyFile(src, dest, options?)- Copy a filemoveFile(src, dest, options?)- Move or rename a filemkdir(path, options?)- Create a directoryrmdir(path, options?)- Remove a directoryreaddir(path, options?)- List directory contentsexists(path)- Check if a path existsstat(path)- Get file or directory metadata
init()Direct link to init
Initialize the filesystem. Verifies bucket access and credentials.
await filesystem.init();
getInfo()Direct link to getinfo
Returns metadata about this filesystem instance.
const info = filesystem.getInfo();
// { id: '...', name: 'S3Filesystem', provider: 's3', status: 'ready' }
getMountConfig()Direct link to getmountconfig
Returns the mount configuration for sandboxes that support mounting this filesystem type.
const config = filesystem.getMountConfig();
// { type: 's3', bucket: 'my-bucket', region: 'us-east-1', ... }
Mounting in E2B SandboxesDirect link to Mounting in E2B Sandboxes
S3Filesystem can be mounted into E2B sandboxes, making the bucket accessible as a local directory:
import { Workspace } from '@mastra/core/workspace';
import { S3Filesystem } from '@mastra/s3';
import { E2BSandbox } from '@mastra/e2b';
const workspace = new Workspace({
mounts: {
'/data': new S3Filesystem({
bucket: 'my-bucket',
region: 'us-east-1',
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
}),
},
sandbox: new E2BSandbox({ id: 'dev-sandbox' }),
});
See E2BSandbox reference for more details on mounting.