migrations | ||
run | ||
src | ||
.env.example | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
README.md | ||
rustfmt.toml |
minna-caos
Content-Addressed Object Storage server intended for usage with Minna.
minna-caos was created because the developers found themselves writing similar storage backends in every project, again and again. It is intended to be a companion to a single application (“the app”) that has full authority. You should imagine it as a library, not a stand-alone application.
Features
-
resumable uploads (via
draft-ietf-httpbis-resumable-upload-08
) -
automatic media type (“MIME type”) detection (via Wikidata)
-
multiple storage backends (via Apache OpenDAL™):
- local filesystem
- S3-compatible
- FTP
- Google Drive
- OneDrive
-
direct download from the underlying storage backend (if supported)
-
named storage buckets
-
object operations:
- upload
- set target buckets
- delete
-
deletion tombstones
Upload steps
-
client to app: request to upload something, returns
{upload_id}
- app to caos:
POST /uploads
returns{upload_ìd}
- app to caos:
-
client to caos:
PATCH /uploads/{upload_id}
with upload data -
app to caos:
GET /uploads/{upload_id}
, returns metadata (including{hash}
) as soon as the upload is finished. -
app to caos:
POST /uploads/{upload_id}/accept
with target bucket IDs
Roadmap
- metadata endpoints
- accepting uploads
- upload expiration
- garbage-collect failed uploads
- add code comments
- graceful shutdown
- more storage backends