Simple S3-compatible storage server for development and testing.
A lightweight S3-compatible storage server for development and testing.
Quick Start:
# Install
go install github.com/go-faster/fs/cmd/fs@latest
# Start the server
fs s3
# Or with custom configuration
fs s3 --addr :9000 --root /data/s3Features:
- Bucket operations (create, delete, list)
- Object operations (put, get, delete, list)
- File system-based storage
- Compatible with AWS CLI, MinIO client, and other S3 clients
- Health check endpoint
Example Usage:
# Using AWS CLI
export AWS_ENDPOINT_URL=http://localhost:8080
aws s3 mb s3://mybucket --endpoint-url $AWS_ENDPOINT_URL
aws s3 cp file.txt s3://mybucket/ --endpoint-url $AWS_ENDPOINT_URL
# Using cURL
curl -X PUT http://localhost:8080/mybucket
curl -X PUT -d "Hello!" http://localhost:8080/mybucket/hello.txt
curl http://localhost:8080/mybucket/hello.txtSee S3_README.md for detailed documentation.
go install github.com/go-faster/fs/cmd/fs@latestOr build from source:
git clone https://github.com/go-faster/fs
cd fs
go build -o bin/fs ./cmd/fs# Start S3 server with defaults
fs s3
# Show help
fs s3 --helpThe server supports both YAML configuration files and command-line flags:
# Using YAML configuration
fs s3 --config config.yaml
# Using command-line flags
fs s3 --addr :9000 --root /var/lib/s3data
# Mix both (flags override config file)
fs s3 --config config.yaml --addr :9000
# Generate example configuration
fs s3 --generate-config > my-config.yamlSee CONFIGURATION.md for detailed configuration documentation.
server:
addr: ":8080"
read_timeout: 30s
write_timeout: 30s
idle_timeout: 120s
health_path: "/health"
storage:
root: ".s3data"
type: "filesystem"
observability:
service_name: "go-faster/fs"
enable_request_logging: true
enable_metrics: true
enable_tracing: true# Run tests
go test ./...
# Build
go build ./cmd/fs
# Run with coverage
./go.coverage.shApache 2.0