Qwaderton/vedro
3
0
Fork
You've already forked vedro
0
No description
  • Go 96.8%
  • Just 3.2%
2026年06月08日 12:16:29 +05:00
.github/workflows Create release.yml 2025年04月20日 16:30:36 +05:00
vedro update copyright 2026年06月08日 12:13:29 +05:00
justfile replace make with just (+amend) 2026年06月08日 12:16:29 +05:00
LICENSE update readme and license 2026年06月08日 12:01:36 +05:00
README.md update readme and license 2026年06月08日 12:01:36 +05:00

vedro

vedro is a simple, self-contained S3-like object storage written in Go. Built for local use — no cloud dependencies, no databases required.

⚠️ Not recommended for large-scale production, but works great for:

  • Local artifact storage
  • Simple CI/CD pipelines
  • Debugging and local development
  • Temporary S3 stubs

Features

  • S3-compatible interface (ListBucket, GetObject)
  • ETag, Last-Modified, and If-Modified-Since support
  • S3-standard XML responses
  • Lightweight HTTP server
  • Path traversal protection
  • Logging and panic recovery middleware

Configuration

Defaults are defined in config/config.go and can be overridden via CLI flags at runtime:

Flag Default Description
-addr :8080 Server listen address
-root /var/vedra Root directory containing buckets
-log true Enable request logging to stdout
-recover true Enable panic recovery middleware
-v Print version and exit
-c Print current configuration

Example:

./vedrod -addr :9000 -root /data/buckets -log=false

Usage

1. Build

go build -o vedrod .

2. Prepare directory structure

/var/vedra/
├── bucket1/
│ ├── file1.txt
│ └── image.png
└── bucket2/
 └── report.pdf

3. Run

./vedrod

Example requests

List bucket objects (S3 ListBucket)

GET http://localhost:8080/bucket1

Response (XML):

<ListBucketResult>
 <Name>bucket1</Name>
 <Contents>
 <Key>file1.txt</Key>
 <LastModified>2025年04月18日T17:42:18Z</LastModified>
 <Size>123</Size>
 <ETag>...</ETag>
 </Contents>
</ListBucketResult>

Download an object (S3 GetObject)

GET http://localhost:8080/bucket1/file1.txt

Notes

  • Does not support Multipart Upload, ACL, PUT/DELETE, presigned URLs, etc.
  • Assumes all data is available locally on disk.
  • MIME types are detected automatically via http.DetectContentType.
  • No caching — reads directly from disk on every request.

License

GNU GPLv3