From d9a1177b1f84a1ddf0bda863242f9d3750c4fa0c Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Wed, 18 Feb 2026 15:49:06 +0100
Subject: [PATCH 1/7] added volume docs
---
docs.json | 10 +++
docs/volumes.mdx | 121 ++++++++++++++++++++++++++
docs/volumes/download.mdx | 31 +++++++
docs/volumes/info.mdx | 165 ++++++++++++++++++++++++++++++++++++
docs/volumes/read-write.mdx | 135 +++++++++++++++++++++++++++++
docs/volumes/upload.mdx | 75 ++++++++++++++++
6 files changed, 537 insertions(+)
create mode 100644 docs/volumes.mdx
create mode 100644 docs/volumes/download.mdx
create mode 100644 docs/volumes/info.mdx
create mode 100644 docs/volumes/read-write.mdx
create mode 100644 docs/volumes/upload.mdx
diff --git a/docs.json b/docs.json
index 2e722f14..10e3f829 100644
--- a/docs.json
+++ b/docs.json
@@ -164,6 +164,16 @@
"docs/filesystem/download"
]
},
+ {
+ "group": "Volumes",
+ "pages": [
+ "docs/volumes",
+ "docs/volumes/read-write",
+ "docs/volumes/info",
+ "docs/volumes/upload",
+ "docs/volumes/download"
+ ]
+ },
{
"group": "Commands",
"pages": [
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
new file mode 100644
index 00000000..e39a8db2
--- /dev/null
+++ b/docs/volumes.mdx
@@ -0,0 +1,121 @@
+---
+title: "Volumes"
+sidebarTitle: Overview
+---
+
+Volumes provide persistent storage that exists independently of sandbox lifecycles. Data written to a volume persists even after a sandbox is shut down, and volumes can be mounted to multiple sandboxes over time.
+
+With E2B SDK you can:
+- [Read and write files to a volume.](/docs/volumes/read-write)
+- [Get file and directory metadata.](/docs/volumes/info)
+- [Upload data to a volume.](/docs/volumes/upload)
+- [Download data from a volume.](/docs/volumes/download)
+
+## Create a volume
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+console.log(volume.volumeId) // Volume ID
+console.log(volume.name) // 'my-volume'
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+print(volume.volume_id) # Volume ID
+print(volume.name) # 'my-volume'
+```
+
+
+## Mount a volume to a sandbox
+
+You can mount one or more volumes to a sandbox when creating it. The keys of the `volumeMounts` / `volume_mounts` object are the mount paths inside the sandbox.
+
+
+```js JavaScript & TypeScript
+import { Volume, Sandbox } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+const sandbox = await Sandbox.create({
+ volumeMounts: {
+ '/mnt/my-data': volume,
+ },
+})
+
+// Files written to /mnt/my-data inside the sandbox are persisted in the volume
+await sandbox.files.write('/mnt/my-data/hello.txt', 'Hello, world!')
+```
+```python Python
+from e2b import Volume, Sandbox
+
+volume = Volume.create('my-volume')
+
+sandbox = Sandbox.create(
+ volume_mounts={
+ '/mnt/my-data': volume,
+ },
+)
+
+# Files written to /mnt/my-data inside the sandbox are persisted in the volume
+sandbox.files.write('/mnt/my-data/hello.txt', 'Hello, world!')
+```
+
+
+## List volumes
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volumes = await Volume.list()
+console.log(volumes)
+// [{ volumeId: '...', name: 'my-volume' }, ...]
+```
+```python Python
+from e2b import Volume
+
+volumes = Volume.list()
+print(volumes)
+# [VolumeInfo(volume_id='...', name='my-volume'), ...]
+```
+
+
+## Get volume info
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const info = await Volume.getInfo('volume-id')
+console.log(info)
+// { volumeId: '...', name: 'my-volume' }
+```
+```python Python
+from e2b import Volume
+
+info = Volume.get_info('volume-id')
+print(info)
+# VolumeInfo(volume_id='...', name='my-volume')
+```
+
+
+## Destroy a volume
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const success = await Volume.destroy('volume-id')
+console.log(success) // true
+```
+```python Python
+from e2b import Volume
+
+success = Volume.destroy('volume-id')
+print(success) # True
+```
+
diff --git a/docs/volumes/download.mdx b/docs/volumes/download.mdx
new file mode 100644
index 00000000..e2f0ef2a
--- /dev/null
+++ b/docs/volumes/download.mdx
@@ -0,0 +1,31 @@
+---
+title: "Download data from volume"
+sidebarTitle: Download data
+---
+
+You can download data from a volume using the `readFile()` / `read_file()` method.
+
+
+```js JavaScript & TypeScript
+import fs from 'fs'
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+// Read file from volume
+const content = await volume.readFile('/path/in/volume')
+// Write file to local filesystem
+fs.writeFileSync('/local/path', content)
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+# Read file from volume
+content = volume.read_file('/path/in/volume')
+# Write file to local filesystem
+with open('/local/path', 'w') as file:
+ file.write(content)
+```
+
diff --git a/docs/volumes/info.mdx b/docs/volumes/info.mdx
new file mode 100644
index 00000000..e3b1aa54
--- /dev/null
+++ b/docs/volumes/info.mdx
@@ -0,0 +1,165 @@
+---
+title: "Get information about a file or directory"
+sidebarTitle: File & directory metadata
+---
+
+You can get information about a file or directory in a volume using the `getEntryInfo()` / `get_entry_info()` method.
+
+### Getting information about a file
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+// Create a new file
+await volume.writeFile('/test_file.txt', 'Hello, world!')
+
+// Get information about the file
+const info = await volume.getEntryInfo('/test_file.txt')
+
+console.log(info)
+// {
+// name: 'test_file.txt',
+// type: 'file',
+// path: '/test_file.txt',
+// size: 13,
+// mode: 0o644,
+// uid: 0,
+// gid: 0,
+// mtime: 2025-05-26T12:00:00.000Z,
+// ctime: 2025-05-26T12:00:00.000Z,
+// target: null
+// }
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+# Create a new file
+volume.write_file('/test_file.txt', 'Hello, world!')
+
+# Get information about the file
+info = volume.get_entry_info('/test_file.txt')
+
+print(info)
+# VolumeEntryStat(
+# name='test_file.txt',
+# type_='file',
+# path='/test_file.txt',
+# size=13,
+# mode=0o644,
+# uid=0,
+# gid=0,
+# mtime=datetime(2025, 5, 26, 12, 0, 0),
+# ctime=datetime(2025, 5, 26, 12, 0, 0),
+# target=None
+# )
+```
+
+
+### Getting information about a directory
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+// Create a new directory
+await volume.makeDir('/test_dir')
+
+// Get information about the directory
+const info = await volume.getEntryInfo('/test_dir')
+
+console.log(info)
+// {
+// name: 'test_dir',
+// type: 'directory',
+// path: '/test_dir',
+// size: 0,
+// mode: 0o755,
+// uid: 0,
+// gid: 0,
+// mtime: 2025-05-26T12:00:00.000Z,
+// ctime: 2025-05-26T12:00:00.000Z,
+// target: null
+// }
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+# Create a new directory
+volume.make_dir('/test_dir')
+
+# Get information about the directory
+info = volume.get_entry_info('/test_dir')
+
+print(info)
+# VolumeEntryStat(
+# name='test_dir',
+# type_='directory',
+# path='/test_dir',
+# size=0,
+# mode=0o755,
+# uid=0,
+# gid=0,
+# mtime=datetime(2025, 5, 26, 12, 0, 0),
+# ctime=datetime(2025, 5, 26, 12, 0, 0),
+# target=None
+# )
+```
+
+
+### Updating metadata
+
+You can update file or directory metadata such as user ID, group ID, and permissions mode using the `updateMetadata()` / `update_metadata()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+await volume.writeFile('/test_file.txt', 'Hello, world!')
+
+const updated = await volume.updateMetadata('/test_file.txt', { uid: 1000, gid: 1000, mode: 0o600 })
+
+console.log(updated)
+// {
+// name: 'test_file.txt',
+// type: 'file',
+// path: '/test_file.txt',
+// size: 13,
+// mode: 0o600,
+// uid: 1000,
+// gid: 1000,
+// ...
+// }
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+volume.write_file('/test_file.txt', 'Hello, world!')
+
+updated = volume.update_metadata('/test_file.txt', uid=1000, gid=1000, mode=0o600)
+
+print(updated)
+# VolumeEntryStat(
+# name='test_file.txt',
+# type_='file',
+# path='/test_file.txt',
+# size=13,
+# mode=0o600,
+# uid=1000,
+# gid=1000,
+# ...
+# )
+```
+
diff --git a/docs/volumes/read-write.mdx b/docs/volumes/read-write.mdx
new file mode 100644
index 00000000..53f33df0
--- /dev/null
+++ b/docs/volumes/read-write.mdx
@@ -0,0 +1,135 @@
+---
+title: "Read & write files"
+sidebarTitle: Read & write
+---
+
+## Reading files
+
+You can read files from a volume using the `readFile()` / `read_file()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+const content = await volume.readFile('/path/to/file')
+console.log(content)
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+content = volume.read_file('/path/to/file')
+print(content)
+```
+
+
+## Writing files
+
+You can write files to a volume using the `writeFile()` / `write_file()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+await volume.writeFile('/path/to/file', 'file content')
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+volume.write_file('/path/to/file', 'file content')
+```
+
+
+## Creating directories
+
+You can create directories in a volume using the `makeDir()` / `make_dir()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+await volume.makeDir('/path/to/dir')
+
+// Create nested directories with force option
+await volume.makeDir('/path/to/nested/dir', { force: true })
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+volume.make_dir('/path/to/dir')
+
+# Create nested directories with create_parents option
+volume.make_dir('/path/to/nested/dir', create_parents=True)
+```
+
+
+## Listing directory contents
+
+You can list the contents of a directory in a volume using the `list()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+const entries = await volume.list('/path/to/dir')
+console.log(entries)
+// [
+// { name: 'file.txt', type: 'file', path: '/path/to/dir/file.txt', size: 13, ... },
+// { name: 'subdir', type: 'directory', path: '/path/to/dir/subdir', size: 0, ... },
+// ]
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+entries = volume.list('/path/to/dir')
+print(entries)
+# [
+# VolumeEntryStat(name='file.txt', type_='file', path='/path/to/dir/file.txt', size=13, ...),
+# VolumeEntryStat(name='subdir', type_='directory', path='/path/to/dir/subdir', size=0, ...),
+# ]
+```
+
+
+## Removing files or directories
+
+You can remove files or directories from a volume using the `remove()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+// Remove a file
+await volume.remove('/path/to/file')
+
+// Remove a directory recursively
+await volume.remove('/path/to/dir', { recursive: true })
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+# Remove a file
+volume.remove('/path/to/file')
+
+# Remove a directory recursively
+volume.remove('/path/to/dir', recursive=True)
+```
+
diff --git a/docs/volumes/upload.mdx b/docs/volumes/upload.mdx
new file mode 100644
index 00000000..dee64c68
--- /dev/null
+++ b/docs/volumes/upload.mdx
@@ -0,0 +1,75 @@
+---
+title: "Upload data to volume"
+sidebarTitle: Upload data
+---
+
+You can upload data to a volume using the `writeFile()` / `write_file()` method.
+
+## Upload single file
+
+
+```js JavaScript & TypeScript
+import fs from 'fs'
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+// Read file from local filesystem
+const content = fs.readFileSync('/local/path')
+// Upload file to volume
+await volume.writeFile('/path/in/volume', content)
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+# Read file from local filesystem
+with open('/local/path', 'rb') as file:
+ # Upload file to volume
+ volume.write_file('/path/in/volume', file)
+```
+
+
+## Upload directory / multiple files
+
+
+```js JavaScript & TypeScript
+import fs from 'fs'
+import path from 'path'
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+const directoryPath = '/local/dir'
+const files = fs.readdirSync(directoryPath)
+
+for (const file of files) {
+ const fullPath = path.join(directoryPath, file)
+
+ // Skip directories
+ if (!fs.statSync(fullPath).isFile()) continue
+
+ const content = fs.readFileSync(fullPath)
+ await volume.writeFile(`/upload/${file}`, content)
+}
+```
+```python Python
+import os
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+directory_path = '/local/dir'
+
+for filename in os.listdir(directory_path):
+ file_path = os.path.join(directory_path, filename)
+
+ # Skip directories
+ if not os.path.isfile(file_path):
+ continue
+
+ with open(file_path, 'rb') as file:
+ volume.write_file(f'/upload/{filename}', file)
+```
+
From 67c659a01cd2b372ccf069f07892383ba329e95f Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Mon, 23 Feb 2026 18:53:52 +0100
Subject: [PATCH 2/7] updated docs
---
docs/volumes.mdx | 21 +++++++++++++++++++
docs/volumes/info.mdx | 41 +++++++++++++++++++++++++++++--------
docs/volumes/read-write.mdx | 4 ++--
3 files changed, 55 insertions(+), 11 deletions(-)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index e39a8db2..4ad193dc 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -30,6 +30,27 @@ print(volume.name) # 'my-volume'
```
+## Connect to an existing volume
+
+You can connect to an existing volume by its ID using the `connect()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.connect('volume-id')
+console.log(volume.volumeId) // Volume ID
+console.log(volume.name) // Volume name
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.connect('volume-id')
+print(volume.volume_id) # Volume ID
+print(volume.name) # Volume name
+```
+
+
## Mount a volume to a sandbox
You can mount one or more volumes to a sandbox when creating it. The keys of the `volumeMounts` / `volume_mounts` object are the mount paths inside the sandbox.
diff --git a/docs/volumes/info.mdx b/docs/volumes/info.mdx
index e3b1aa54..91c3c7ef 100644
--- a/docs/volumes/info.mdx
+++ b/docs/volumes/info.mdx
@@ -3,7 +3,7 @@ title: "Get information about a file or directory"
sidebarTitle: File & directory metadata
---
-You can get information about a file or directory in a volume using the `getEntryInfo()` / `get_entry_info()` method.
+You can get information about a file or directory in a volume using the `getInfo()` / `get_info()` method.
### Getting information about a file
@@ -17,7 +17,7 @@ const volume = await Volume.create('my-volume')
await volume.writeFile('/test_file.txt', 'Hello, world!')
// Get information about the file
-const info = await volume.getEntryInfo('/test_file.txt')
+const info = await volume.getInfo('/test_file.txt')
console.log(info)
// {
@@ -28,9 +28,9 @@ console.log(info)
// mode: 0o644,
// uid: 0,
// gid: 0,
+// atime: 2025-05-26T12:00:00.000Z,
// mtime: 2025-05-26T12:00:00.000Z,
// ctime: 2025-05-26T12:00:00.000Z,
-// target: null
// }
```
```python Python
@@ -42,7 +42,7 @@ volume = Volume.create('my-volume')
volume.write_file('/test_file.txt', 'Hello, world!')
# Get information about the file
-info = volume.get_entry_info('/test_file.txt')
+info = volume.get_info('/test_file.txt')
print(info)
# VolumeEntryStat(
@@ -53,9 +53,9 @@ print(info)
# mode=0o644,
# uid=0,
# gid=0,
+# atime=datetime(2025, 5, 26, 12, 0, 0),
# mtime=datetime(2025, 5, 26, 12, 0, 0),
# ctime=datetime(2025, 5, 26, 12, 0, 0),
-# target=None
# )
```
@@ -72,7 +72,7 @@ const volume = await Volume.create('my-volume')
await volume.makeDir('/test_dir')
// Get information about the directory
-const info = await volume.getEntryInfo('/test_dir')
+const info = await volume.getInfo('/test_dir')
console.log(info)
// {
@@ -83,9 +83,9 @@ console.log(info)
// mode: 0o755,
// uid: 0,
// gid: 0,
+// atime: 2025-05-26T12:00:00.000Z,
// mtime: 2025-05-26T12:00:00.000Z,
// ctime: 2025-05-26T12:00:00.000Z,
-// target: null
// }
```
```python Python
@@ -97,7 +97,7 @@ volume = Volume.create('my-volume')
volume.make_dir('/test_dir')
# Get information about the directory
-info = volume.get_entry_info('/test_dir')
+info = volume.get_info('/test_dir')
print(info)
# VolumeEntryStat(
@@ -108,13 +108,36 @@ print(info)
# mode=0o755,
# uid=0,
# gid=0,
+# atime=datetime(2025, 5, 26, 12, 0, 0),
# mtime=datetime(2025, 5, 26, 12, 0, 0),
# ctime=datetime(2025, 5, 26, 12, 0, 0),
-# target=None
# )
```
+### Checking if a path exists
+
+You can check whether a file or directory exists in a volume using the `exists()` method.
+
+
+```js JavaScript & TypeScript
+import { Volume } from 'e2b'
+
+const volume = await Volume.create('my-volume')
+
+const fileExists = await volume.exists('/test_file.txt')
+console.log(fileExists) // true or false
+```
+```python Python
+from e2b import Volume
+
+volume = Volume.create('my-volume')
+
+file_exists = volume.exists('/test_file.txt')
+print(file_exists) # True or False
+```
+
+
### Updating metadata
You can update file or directory metadata such as user ID, group ID, and permissions mode using the `updateMetadata()` / `update_metadata()` method.
diff --git a/docs/volumes/read-write.mdx b/docs/volumes/read-write.mdx
index 53f33df0..43838b6c 100644
--- a/docs/volumes/read-write.mdx
+++ b/docs/volumes/read-write.mdx
@@ -69,8 +69,8 @@ volume = Volume.create('my-volume')
volume.make_dir('/path/to/dir')
-# Create nested directories with create_parents option
-volume.make_dir('/path/to/nested/dir', create_parents=True)
+# Create nested directories with force option
+volume.make_dir('/path/to/nested/dir', force=True)
```
From 7e6be2f978994cbe365b4a9d5bcf0df24e5d5285 Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Mon, 23 Feb 2026 19:17:14 +0100
Subject: [PATCH 3/7] diagram
---
docs/volumes.mdx | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index 4ad193dc..147e41ab 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -5,6 +5,23 @@ sidebarTitle: Overview
Volumes provide persistent storage that exists independently of sandbox lifecycles. Data written to a volume persists even after a sandbox is shut down, and volumes can be mounted to multiple sandboxes over time.
+### One volume shared across multiple sandboxes
+
+```mermaid
+graph LR
+ V1[Volume A] --- S1[Sandbox 1]
+ V1 --- S2[Sandbox 2]
+ V1 --- S3[Sandbox 3]
+```
+
+### Each sandbox with its own volume
+
+```mermaid
+graph LR
+ V2[Volume A] --- S4[Sandbox 1]
+ V3[Volume B] --- S5[Sandbox 2]
+```
+
With E2B SDK you can:
- [Read and write files to a volume.](/docs/volumes/read-write)
- [Get file and directory metadata.](/docs/volumes/info)
From 3655dc343995c67e8cbd8cb5ff0e5a666c42cc2b Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Mon, 23 Feb 2026 19:28:12 +0100
Subject: [PATCH 4/7] added examples, note
---
docs/volumes.mdx | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index 147e41ab..4cdb738f 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -30,6 +30,10 @@ With E2B SDK you can:
## Create a volume
+
+Volume names can only contain letters, numbers, and hyphens.
+
+
```js JavaScript & TypeScript
import { Volume } from 'e2b'
@@ -78,12 +82,20 @@ import { Volume, Sandbox } from 'e2b'
const volume = await Volume.create('my-volume')
+// You can pass a Volume object
const sandbox = await Sandbox.create({
volumeMounts: {
'/mnt/my-data': volume,
},
})
+// Or pass the volume name directly
+const sandbox2 = await Sandbox.create({
+ volumeMounts: {
+ '/mnt/my-data': 'my-volume',
+ },
+})
+
// Files written to /mnt/my-data inside the sandbox are persisted in the volume
await sandbox.files.write('/mnt/my-data/hello.txt', 'Hello, world!')
```
@@ -92,12 +104,20 @@ from e2b import Volume, Sandbox
volume = Volume.create('my-volume')
+# You can pass a Volume object
sandbox = Sandbox.create(
volume_mounts={
'/mnt/my-data': volume,
},
)
+# Or pass the volume name directly
+sandbox2 = Sandbox.create(
+ volume_mounts={
+ '/mnt/my-data': 'my-volume',
+ },
+)
+
# Files written to /mnt/my-data inside the sandbox are persisted in the volume
sandbox.files.write('/mnt/my-data/hello.txt', 'Hello, world!')
```
From 820eba192a2f610d1792738df859256b3e9599d0 Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Mon, 23 Feb 2026 19:37:38 +0100
Subject: [PATCH 5/7] added clarification
---
docs/volumes.mdx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index 4cdb738f..dd0252f9 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -5,7 +5,7 @@ sidebarTitle: Overview
Volumes provide persistent storage that exists independently of sandbox lifecycles. Data written to a volume persists even after a sandbox is shut down, and volumes can be mounted to multiple sandboxes over time.
-### One volume shared across multiple sandboxes
+**One volume shared across multiple sandboxes**
```mermaid
graph LR
@@ -14,7 +14,7 @@ graph LR
V1 --- S3[Sandbox 3]
```
-### Each sandbox with its own volume
+**Each sandbox with its own volume**
```mermaid
graph LR
@@ -22,6 +22,8 @@ graph LR
V3[Volume B] --- S5[Sandbox 2]
```
+When a volume is mounted to a sandbox, files can be read and written directly at the mount path. The SDK methods are meant to be used when the volume is not mounted to any sandbox.
+
With E2B SDK you can:
- [Read and write files to a volume.](/docs/volumes/read-write)
- [Get file and directory metadata.](/docs/volumes/info)
From 9082105cd0352deb866ceecb7ee3855e5d89cef5 Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Thu, 26 Feb 2026 23:27:02 +0100
Subject: [PATCH 6/7] removed diagram controls
---
docs/volumes.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index dd0252f9..ae2d15e4 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -7,7 +7,7 @@ Volumes provide persistent storage that exists independently of sandbox lifecycl
**One volume shared across multiple sandboxes**
-```mermaid
+```mermaid actions={false}
graph LR
V1[Volume A] --- S1[Sandbox 1]
V1 --- S2[Sandbox 2]
From 8e0db0331849320d9ef2655d12d6740fca1ff316 Mon Sep 17 00:00:00 2001
From: Mish Ushakov <10400064+mishushakov@users.noreply.github.com>
Date: Thu, 26 Feb 2026 23:29:10 +0100
Subject: [PATCH 7/7] remove the diagram controls
---
docs/volumes.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/volumes.mdx b/docs/volumes.mdx
index ae2d15e4..83311365 100644
--- a/docs/volumes.mdx
+++ b/docs/volumes.mdx
@@ -16,7 +16,7 @@ graph LR
**Each sandbox with its own volume**
-```mermaid
+```mermaid actions={false}
graph LR
V2[Volume A] --- S4[Sandbox 1]
V3[Volume B] --- S5[Sandbox 2]