---
title: SeaweedFS
icon: /images/seaweedfs-logo.svg
description: Mount a SeaweedFS bucket as a virtual filesystem.
---
The SeaweedFS resource is a thin wrapper over the [S3 resource](/python/resource/s3).
It maps a `SeaweedFSConfig` to an `S3Config` and reuses the exact same backend,
commands, and behavior as S3, it just points at your SeaweedFS S3 gateway
`endpoint_url` and uses path-style addressing by default.

SeaweedFS exposes an S3-compatible gateway (default port `8333`), so
`endpoint_url` is **required** (there is no region-derived host). Uses aioboto3
against the SeaweedFS S3 API.

## Config

```python
import os

from mirage import MountMode, Workspace
from mirage.resource.seaweedfs import SeaweedFSConfig, SeaweedFSResource

config = SeaweedFSConfig(
    bucket=os.environ["SEAWEEDFS_BUCKET"],
    endpoint_url=os.environ.get("SEAWEEDFS_ENDPOINT", "http://localhost:8333"),
    access_key_id=os.environ["SEAWEEDFS_ACCESS_KEY"],
    secret_access_key=os.environ["SEAWEEDFS_SECRET_KEY"],
    # Optional:
    # region="us-east-1",   # default
    # path_style=True,      # default; SeaweedFS uses path-style addressing
    # timeout=30,
    # proxy="http://proxy:8080",
)
resource = SeaweedFSResource(config)
ws = Workspace({"/seaweedfs": resource}, mode=MountMode.WRITE)
```

Both `READ` and `WRITE` modes are supported.

## Example

```python
import asyncio
import os

from dotenv import load_dotenv

from mirage import MountMode, Workspace
from mirage.resource.seaweedfs import SeaweedFSConfig, SeaweedFSResource

load_dotenv(".env.development")

config = SeaweedFSConfig(
    bucket=os.environ.get("SEAWEEDFS_BUCKET", "mirage-demo"),
    endpoint_url=os.environ.get("SEAWEEDFS_ENDPOINT", "http://localhost:8333"),
    access_key_id=os.environ.get("SEAWEEDFS_ACCESS_KEY", "any"),
    secret_access_key=os.environ.get("SEAWEEDFS_SECRET_KEY", "any"),
)
resource = SeaweedFSResource(config)


async def main() -> None:
    ws = Workspace({"/seaweedfs/": resource}, mode=MountMode.READ)

    r = await ws.execute("ls /seaweedfs/")
    print(await r.stdout_str())

    r = await ws.execute("tree /seaweedfs/")
    print(await r.stdout_str())

    r = await ws.execute("cat /seaweedfs/data/config.json")
    print(await r.stdout_str())


if __name__ == "__main__":
    asyncio.run(main())
```

## Notes

- SeaweedFS reports `ResourceName.S3` and routes through the same `core/s3`
  implementation, so the full S3 shell-command set applies (`ls`, `cat`,
  `head`, `tail`, `grep`, `rg`, `wc`, `find`, `tree`, `jq`, `stat`). See the
  [S3 resource](/python/resource/s3)
  for the complete command reference, range reads, streaming, and the index
  cache fast path.
- Blaxel Agent Drive is backed by SeaweedFS. To mount a drive's S3 gateway,
  point `endpoint_url` at the drive's `s3Url` and supply credentials for it.
- For credential setup, see [SeaweedFS Setup](/home/setup/seaweedfs).
