Vault
Built on Cloudflare R2

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.

upload.ts
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.