Object storage with a developer-first DX.
S3-grade object storage with Resend-grade DX. One API key, a typed SDK, signed-URL uploads, resumable multipart, and webhooks — backed by Cloudflare R2.
import { Storage } from "@vault/storage";
const storage = new Storage({ apiKey: process.env.VAULT_API_KEY });
// upload — auto-switches to multipart for large files
await storage.objects.upload({
bucket: "avatars",
key: "users/42.png",
body: file,
contentType: "image/png",
});
// browser direct upload — no bytes through your server
const { url } = await storage.objects.createSignedUrl({
bucket: "avatars",
key: "users/42.png",
method: "PUT",
expiresIn: "15m",
});Everything you need to ship storage.
The power of S3, without the sprawling API — batteries included.
One API key
No SigV4, no ceremony. A single bearer key and a typed SDK that works in Node, the browser, and the edge.
Signed URLs
Issue time-limited, method-scoped upload and download URLs so bytes never round-trip through your server.
Resumable multipart
The SDK transparently switches to multipart for large files, with retries and abort handling built in.
Per-tenant isolation
Every object is namespaced and every read is ownership-checked — cross-tenant access is a single, tested invariant.
Webhooks
Subscribe to object.created, object.deleted, and upload.completed with signed, verifiable deliveries.
Built on Cloudflare R2
Zero egress fees, global by default. Workers on the hot path, D1 for the control plane.
Store your first object in two minutes.
Grab a key from the dashboard and upload with a single call.