One Interface
Put, Get, Delete, Exists, Stat, List, Copy, Move, URL, SignedURL — identical on every backend
One Storage interface for local filesystem, AWS S3, Google Cloud Storage, Azure Blob Storage, and in-memory testing. Write your storage layer once — swap the backend with configuration, not code.
go get github.com/KARTIKrocks/objstorePut, Get, Delete, Exists, Stat, List, Copy, Move, URL, SignedURL — identical on every backend
Local filesystem, AWS S3, Google Cloud Storage, Azure Blob, and in-memory
MinIO, DigitalOcean Spaces, Cloudflare R2, Backblaze B2, Wasabi via endpoint + path-style config
Bodies past 5MiB split into bounded-memory parts through S3's multipart uploader automatically
Cloud backends presign natively; local and memory produce verifiable HMAC-signed URLs
Resume downloads or seek into large files with byte-range requests
Atomic create-only writes and ETag compare-and-swap updates, enforced natively by each provider
Unique/date/hash-distributed path generation, file-type detection, size formatting, directory sync
In-memory backend for unit tests — no cloud credentials, no network
A small, consistent error set matched with errors.Is across every backend
Every backend below implements the same objstore.Storage interface. Develop against memory or local disk, then point the same code at S3, GCS, or Azure in production — see Switching Backends.
Disk-backed storage with an HMAC-signable base URL
Multipart uploads, IAM roles, path prefixes, custom endpoints
Service account, JSON, or default credentials
Account key, connection string, or managed identity
Zero-dependency backend built for tests
No backend-specific escape hatches to learn — these ten operations are all you need, and they behave the same on every backend.
PutGetDeleteExistsStatListCopyMoveURLSignedURL