No description
Find a file
2025-04-18 21:29:03 +02:00
migrations WIP: v1.0.0 2025-04-03 02:03:51 +02:00
run WIP: v1.0.0 2025-04-18 21:29:03 +02:00
src WIP: v1.0.0 2025-04-18 21:29:03 +02:00
.env.example WIP: v1.0.0 2025-04-01 21:11:27 +02:00
.gitignore WIP: v1.0.0 2025-04-01 21:11:27 +02:00
Cargo.lock WIP: v1.0.0 2025-04-17 19:05:38 +02:00
Cargo.toml WIP: v1.0.0 2025-04-17 19:05:38 +02:00
README.md WIP: v1.0.0 2025-04-18 00:08:36 +02:00
rustfmt.toml WIP: v1.0.0 2025-04-01 21:11:27 +02:00

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}
  • 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