Cloud Parts

SeaweedFS

A distributed blob store with an S3 gateway and a file system layer, built to store and serve billions of small files.

Type
Open source
Made by
Chris Lu and contributors; a paid Enterprise edition is sold at seaweedfs.com
License
Apache 2.0
Facts checked
5 October 2026

What it is

SeaweedFS splits storage into three roles. Volume servers pack many files into large append-only volume files and keep a 16-byte index entry per file in memory, so reading any file, small or large, takes one disk seek. Master servers (one, or three in a Raft group) track volumes, not files: clients ask a master which server holds a volume, cache the answer and then talk to volume servers directly. Copies are made per volume with a three-digit setting for data centre, rack and server, so 001 means one extra copy on another server and 010 one on another rack. Volumes that have gone warm can later be converted to Reed-Solomon 10+4 erasure coding in the background.

On top sits the filer, which adds directories and file names and keeps that metadata in a database you choose: embedded LevelDB by default, or PostgreSQL, MySQL, Redis, Cassandra, TiKV and many others. The S3 gateway, WebDAV, SFTP, a FUSE mount and a Kubernetes CSI driver all go through the filer, so the same data is reachable as S3 objects and as files. The S3 gateway covers versioning, Object Lock, lifecycle rules, bucket policies, IAM users and STS, and S3 Tables with a built-in Iceberg REST catalog. Everything ships in one weed binary, and weed mini runs all the roles in one process for a single node.

Why teams pick it

  • Fast with huge numbers of small files: one disk read per file and about 40 bytes of on-disk metadata each, where MinIO also writes a metadata file on every drive of the erasure set
  • Broad S3 support: versioning, Object Lock, lifecycle, bucket policies, IAM groups, STS with OIDC or LDAP, and SSE-S3, SSE-KMS and SSE-C
  • The same data as objects and as files, over S3, FUSE, WebDAV, SFTP, HDFS and a Kubernetes CSI driver
  • Grows by adding volume servers with no data reshuffle, and the filer and S3 gateways are stateless, so you run as many as you need
  • Apache 2.0, developed since 2011, with releases every week or two (4.48 in September 2026)

Watch out for

  • No S3 bucket notification or bucket replication APIs and no S3 Select; cross-cluster replication and change events use SeaweedFS’s own replication and metadata feeds instead
  • More moving parts than MinIO: masters, volume servers, filers, a metadata database and S3 gateways, each with its own flags and failure modes
  • Missing replicas are not repaired automatically in normal operation: you run volume.fix.replication, balancing and vacuum from weed shell or the maintenance worker
  • Some data-safety features are Enterprise-only: self-healing storage, data recovery, point-in-time recovery and custom erasure coding ratios (open source is fixed at 10+4)
  • Heavily dependent on its founder: Chris Lu has written about two thirds of all commits

Alternatives

What all object storage have in common →
Amazon S3AWSAWS’s object storage, and the de facto API most object stores copy.Apache OpenDALOpen sourceA Rust library, with bindings for Python, Java, Node.js, Go and more, that gives one API (read, write, stat, list, delete) over 50-plus storage backends: S3 and other object stores, local and HDFS file systems, Google Drive and Dropbox, and key-value stores.Apache OzoneOpen sourceA Hadoop-born object store that serves the same buckets over S3 and as a Hadoop file system.Azure Blob StorageAzureAzure’s object storage, with three blob types and an optional real directory tree for analytics.Backblaze B2 Cloud StorageCommercialLow-cost object storage on Backblaze’s own hardware, with its own API and an S3-compatible one.CephOpen sourceA distributed storage cluster that serves S3 buckets, block devices and a file system from the same pool of disks.Cloudflare R2CommercialS3-compatible object storage from Cloudflare that charges nothing for data going out.GarageOpen sourceA lightweight S3 object store that keeps copies of your data in several sites linked by ordinary Internet connections.Google Cloud StorageGoogle CloudGoogle Cloud’s object storage, where even the archive class answers in milliseconds.MinIOArchivedOpen sourceA self-hosted object store that speaks the S3 API. The open-source edition is archived and its images are gone from Docker Hub; MinIO now sells AIStor.PGSTY SiloOpen sourceA community-maintained fork of the open-source MinIO server, with builds, images, security fixes and the full web console.RustFSOpen sourceA young Rust reimplementation of MinIO’s design: S3-compatible, erasure-coded, Apache 2.0, and generally available since September 2026.TigrisCommercialGlobally distributed S3-compatible object storage that moves data to where it’s read, with no egress fees.Versity S3 GatewayOpen sourceA stateless S3 server that exposes an existing file system, or another object store, through the S3 API.Wasabi Hot Cloud StorageCommercialS3-compatible object storage sold at one flat price per TB, with no egress or request fees.Zenko CloudServerOpen sourceScality’s open-source Node.js S3 server: a light S3 endpoint for development and tests, and a front end that can store objects in other clouds.

How it fits with other technologies

Start an all-in-one node in Docker, use it with the aws CLI, then lay out a real cluster · bash

# master, volume server, filer and S3 (port 8333) in one process
docker run -d --name seaweed -p 8333:8333 -v weed-data:/data \
  -e AWS_ACCESS_KEY_ID=admin -e AWS_SECRET_ACCESS_KEY=change-me \
  -e S3_BUCKET=backups chrislusf/seaweedfs:4.48

export AWS_ACCESS_KEY_ID=admin AWS_SECRET_ACCESS_KEY=change-me
aws s3 cp --recursive ./exports/ s3://backups/2026-10-05/ --endpoint-url http://localhost:8333
aws s3 ls s3://backups/2026-10-05/ --endpoint-url http://localhost:8333

# a cluster: three masters, volume servers per rack, filer with the S3 gateway
weed master -mdir=/data/seaweedfs/master -peers=ip1:9333,ip2:9333,ip3:9333 -ip=ip1
weed volume -master=ip1:9333,ip2:9333,ip3:9333 -dataCenter=dc1 -rack=rack1 \
  -dir=/data/seaweedfs/volume -max=0
weed filer -master=ip1:9333,ip2:9333,ip3:9333 -s3 -s3.port=8333

S3 API: SeaweedFS vs MinIO#

Taken from SeaweedFS’s own comparison page. It says it was generated by scanning the source code with AI and is kept as a to-do list, so test the calls you rely on.

FeatureSeaweedFSMinIO
VersioningYesYes
Object Lock (retention, legal hold)YesYes
Lifecycle rulesYesYes
Bucket policiesYesYes
ACLsYesAccepted but not enforced
Bucket notificationsNoYes
Bucket replicationNoYes
S3 SelectNoYes
S3 Tables (Iceberg)YesNo
User and group adminAWS IAM APIMinIO’s own admin API

Moving from MinIO#

Copy data over the S3 API: rclone has a SeaweedFS provider setting, so rclone sync minio:bucket seaweed:bucket works, or use mc mirror if you still have the MinIO client. Run the sync again just before cutover, then switch endpoints. Users and policies have to be recreated; SeaweedFS manages them through AWS-style IAM calls rather than mc admin.

Plan around the gaps. Apps that react to MinIO bucket notifications need to subscribe to the filer’s metadata change events or webhooks instead, and MinIO bucket replication becomes SeaweedFS’s cluster-to-cluster replication. Unlike MinIO, SeaweedFS replicates new data first and erasure-codes it later, so size disks for the replication setting you choose.

See it in a real stack

No architecture uses SeaweedFS yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2010–2025

In 2010 Facebook described Haystack, the system it built to store billions of photos. Ordinary file systems spent extra disk reads per photo on directory and inode metadata, so Haystack packed many photos into large files and kept a small index in memory, making each photo one disk read. In November 2011 Chris Lu started Weed-FS on Google Code, an open-source blob store in Go built on the same idea.

The project moved to GitHub, and in April 2015, after a user asked what it was actually called, Lu suggested “SeaweedFS”, keeping weed as the binary’s name. Over the following decade he added the filer with pluggable metadata stores, the S3 gateway, FUSE mounts, erasure coding for warm data inspired by Facebook’s later f4 paper, and cloud tiering.

Lu still writes most of the code, about two thirds of all commits, and funds the work through sponsors and a paid Enterprise edition. Versions 1.0, 3.0 and 4.0 came in 2018, 2022 and 2025, and the project now presents itself as one system for S3 objects, files and Iceberg tables.

Why it’s built this way

Pack small files into big volume files
Haystack showed that per-file metadata, not the data, was the bottleneck for photo serving. Appending files to large volumes with a tiny in-memory index turns every read into one disk seek.
The master tracks volumes, not files
A cluster with billions of files has only thousands of volumes, so one master, or a Raft group of three, stays small and stays out of the read path.
Replicate hot data, erasure-code warm data
Writing whole copies is fast. Sealing older volumes and converting them to 10+4 erasure coding later saves disk without making every write pay the encoding cost.
Keep directory metadata in an existing database
Instead of writing its own metadata server, the filer stores names and directories in databases operators already run, from LevelDB to PostgreSQL, Redis and Cassandra.

Timeline

  1. 2010

    Facebook presents the Haystack photo store at OSDI

  2. 2011

    Chris Lu starts Weed-FS on Google Code (November)

  3. 2015

    Project renamed SeaweedFS (April)

  4. 2018

    Version 1.0 released (November)

  5. 2022

    Version 3.0 released (April)

  6. 2025

    Version 4.0 released (November)

Sources12 · facts checked 5 October 2026

Improve this page on GitHub