Six drivers, one interface
Local filesystem, S3, GCS, Azure Blob, SFTP and in-memory. Swapping a backend is configuration, and the application code does not learn which one it got.
One object-storage API across local disk, memory, S3, GCS, Azure and SFTP, with middleware you stack on the read and write paths for encryption, compression or virus scanning. Content-addressed storage with reference counting and GC, and an io/fs.FS view so a flat bucket reads like a directory tree.
Local disk, S3, GCS, Azure Blob, SFTP and in-memory, swapped without the calling code changing.
Store by hash with automatic deduplication through reference counting, and a garbage collector that respects it.
A hierarchical directory interface over flat object storage, so standard Go file operations work unchanged.
Object storageStores uploads through Trove, with content addressing and deduplication handled in the middleware chain instead of at the call site.
Shipping something on Trove? The list is only as complete as the people who tell me. Ask to be on it, or just say what got in your way.
Get listed →Object storage with the parts everybody rewrites already present: dedup, encryption, scanning and a filesystem view.
Local filesystem, S3, GCS, Azure Blob, SFTP and in-memory. Swapping a backend is configuration, and the application code does not learn which one it got.
Zstd compression, AES-256-GCM encryption, BLAKE3 deduplication, ClamAV scanning and invisible watermarking compose into a pipeline that knows whether bytes are arriving or leaving.
Configurable chunk sizes, pause and resume, and managed stream pools across upload, download and bidirectional modes.
BLAKE3, SHA-256 or XXHash, with deduplication through reference counting and garbage collection that will not delete something still referenced.
A hierarchical directory view with metadata management, so code written against the standard library keeps working.
Glob patterns or a custom function decide the backend, so logs go to archive storage, images to CDN-backed S3 and temporary files to memory.
Multipart uploads, presigned URLs, server-side copy, versioning, change notifications and lifecycle rules are declared by the driver and detected at runtime.
REST API, ORM models, migrations, container registration and hooks into Chronicle, Dispatch and Warden.
Multi-backend routing with per-prefix rules.
Interfaces describing what a backend can do, not which product it is.
Immutable objects keyed by their own hash.
One tree across several stores.
Trove is a multi-backend object storage engine for Go: one API across local disk, memory, S3, GCS, Azure Blob and SFTP, with middleware you stack on the read and write paths.
Not every backend can do everything. A local filesystem has no pre-signed URLs; SFTP has no server-side copy. Rather than a lowest common denominator or a runtime error, capabilities are separate interfaces you type-assert for, so calling code can degrade deliberately instead of discovering the gap in production.