Drop-in file upload infrastructure backed by Cloudflare R2. Presigned URLs, multi-platform SDKs, a dashboard to manage everything. From zero to uploads in 5 minutes.
import { DevStorage } from "@devstorage/node"
const ds = new DevStorage({
apiKey: process.env.DSK_API_KEY
});
const file = await ds.upload(buffer, {
name: "photo.jpg",
mimeType: "image/jpeg",
})
// That's it. On Cloudflare R2.
console.log(file.url)Built for teams who use
Features
A focused set of primitives for file uploads. No bloat, no surprises, no hidden costs.
Cloudflare R2 means $0 bandwidth costs. Serve files globally without watching the meter.
Files upload directly to R2 via presigned URLs. Your server never sees a byte of file data.
Node.js, Next.js, React, React Native. One API, every platform your app runs on.
Manage projects, browse files, generate API keys, track usage — all from one place.
Scoped keys per project with upload, read, delete permissions. Revoke instantly.
Get notified on upload complete. HMAC-signed for security. Trigger post-processing pipelines.
How it works
Install the SDK, pass your API key, call upload. The SDK handles presigned URL generation, direct upload to R2, and confirmation — your server never touches the file bytes.
SDK requests a presigned URL from DevStorage API
File uploads directly to Cloudflare R2 (zero server bandwidth)
DevStorage verifies the upload and returns the file URL
import { DevStorage } from "@devstorage/node";
const ds = new DevStorage({
apiKey: process.env.DSK_API_KEY,
});
// Upload a file — that's it
const file = await ds.upload(buffer, {
name: "invoice.pdf",
mimeType: "application/pdf",
metadata: { orderId: "ord_123" }
});
console.log(file.url); // presigned R2 URL
console.log(file.id); // "fil_01HXYZ..."Pricing
Start free. Upgrade when you need more. No surprises, no egress fees, ever.
For trying things out
For indie devs in production
For teams building products
For high-volume apps
FAQ
Your app calls our API to get a presigned URL, then uploads the file directly to Cloudflare R2. The file never passes through our servers or yours — zero bandwidth cost on both sides.
On paid plans, you can keep uploading and we'll charge overage at $0.04-0.05/GB. On the free plan, uploads will be rejected until you delete files or upgrade.
Files are stored on Cloudflare R2 with 99.999999999% (11 nines) durability. All access is via presigned URLs that expire. R2 credentials never leave our API server.
Yes. R2 is S3-compatible, so you can use standard migration tools. We also provide import utilities to move file metadata into DevStorage.
No. Cloudflare R2 has zero egress fees. Downloads are free, forever. This is the main reason we chose R2 over S3.
Free plan includes 1 GB storage. No credit card required. Upgrade anytime.
npm install @devstorage/node